From 3f01c5eb485513cf8a87ac15044a42facdda8b39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Thu, 21 Aug 2025 16:56:01 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E5=85=A5=E5=BA=93=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=87=BA=E5=BA=93=E7=AE=A1=E7=90=86=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 24 + pages/workbench/index/index.vue | 18 + pages/workbench/sales/sales.vue | 5 +- pages/workbench/wms/in.vue | 627 ++++++++++++++++ pages/workbench/wms/out.vue | 627 ++++++++++++++++ pages/workbench/wms/purchase.vue | 643 ++++++++++++++++ static/images/chuku.png | Bin 0 -> 4930 bytes static/images/purchase.png | Bin 0 -> 3798 bytes static/images/ruku.png | Bin 0 -> 5012 bytes uni_modules/uni-data-picker/changelog.md | 79 ++ .../components/uni-data-picker/keypress.js | 45 ++ .../uni-data-picker/uni-data-picker.uvue | 380 ++++++++++ .../uni-data-picker/uni-data-picker.vue | 560 ++++++++++++++ .../uni-data-pickerview/loading.uts | 1 + .../uni-data-pickerview/uni-data-picker.js | 622 ++++++++++++++++ .../uni-data-pickerview/uni-data-picker.uts | 693 ++++++++++++++++++ .../uni-data-pickerview.css | 76 ++ .../uni-data-pickerview.uvue | 69 ++ .../uni-data-pickerview.vue | 323 ++++++++ uni_modules/uni-data-picker/package.json | 93 +++ uni_modules/uni-data-picker/readme.md | 22 + uni_modules/uni-icons/changelog.md | 4 +- .../components/uni-icons/uni-icons.uvue | 162 ++-- .../components/uni-icons/uni-icons.vue | 6 +- uni_modules/uni-icons/package.json | 110 +-- uni_modules/uni-load-more/changelog.md | 6 +- .../uni-load-more/uni-load-more.vue | 4 +- uni_modules/uni-load-more/package.json | 99 ++- 28 files changed, 5122 insertions(+), 176 deletions(-) create mode 100644 pages/workbench/wms/in.vue create mode 100644 pages/workbench/wms/out.vue create mode 100644 pages/workbench/wms/purchase.vue create mode 100644 static/images/chuku.png create mode 100644 static/images/purchase.png create mode 100644 static/images/ruku.png create mode 100644 uni_modules/uni-data-picker/changelog.md create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/keypress.js create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.uvue create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/loading.uts create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.uts create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.css create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.uvue create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue create mode 100644 uni_modules/uni-data-picker/package.json create mode 100644 uni_modules/uni-data-picker/readme.md diff --git a/pages.json b/pages.json index 2075676..90403b5 100644 --- a/pages.json +++ b/pages.json @@ -405,6 +405,30 @@ "navigationBarTitleText" : "智慧库房", "navigationStyle": "default" } + }, + { + "path" : "pages/workbench/wms/purchase", + "style" : + { + "navigationBarTitleText" : "采购进度", + "navigationStyle": "default" + } + }, + { + "path" : "pages/workbench/wms/in", + "style" : + { + "navigationBarTitleText" : "入库记录", + "navigationStyle": "default" + } + }, + { + "path" : "pages/workbench/wms/out", + "style" : + { + "navigationBarTitleText" : "出库记录", + "navigationStyle": "default" + } } ], "tabBar": { diff --git a/pages/workbench/index/index.vue b/pages/workbench/index/index.vue index 765887c..18666f1 100644 --- a/pages/workbench/index/index.vue +++ b/pages/workbench/index/index.vue @@ -115,6 +115,24 @@ export default { url: '/pages/workbench/smartWM/smartWM', category: '库房管理', }, + { + text: '采购进度', + icon: '/static/images/purchase.png', + url: '/pages/workbench/wms/purchase', + category: '库房管理', + }, + { + text: '入库记录', + icon: '/static/images/ruku.png', + url: '/pages/workbench/wms/in', + category: '库房管理', + }, + { + text: '出库记录', + icon: '/static/images/chuku.png', + url: '/pages/workbench/wms/out', + category: '库房管理', + }, { text: '线上营销', icon: '/static/images/yingxiao.png', diff --git a/pages/workbench/sales/sales.vue b/pages/workbench/sales/sales.vue index dbe21c0..15bfadb 100644 --- a/pages/workbench/sales/sales.vue +++ b/pages/workbench/sales/sales.vue @@ -54,7 +54,10 @@ export default { contactOptions() { // 只显示有邮箱的联系人 return this.furnitureTableList.filter(item => item.email).map(item => ({ - text: `${item.companyName}(${item.email})`, + text: `${item.companyName} + (${item.email}) + ${item.emailSendCount}->${item.receiveCount} + ${item.lastEmailSendTime ? '--' + item.lastEmailSendTime : ''}`, value: item.furnitureId, companyName: item.companyName, email: item.email diff --git a/pages/workbench/wms/in.vue b/pages/workbench/wms/in.vue new file mode 100644 index 0000000..73b6833 --- /dev/null +++ b/pages/workbench/wms/in.vue @@ -0,0 +1,627 @@ + + + + + \ No newline at end of file diff --git a/pages/workbench/wms/out.vue b/pages/workbench/wms/out.vue new file mode 100644 index 0000000..133fa64 --- /dev/null +++ b/pages/workbench/wms/out.vue @@ -0,0 +1,627 @@ + + + + + \ No newline at end of file diff --git a/pages/workbench/wms/purchase.vue b/pages/workbench/wms/purchase.vue new file mode 100644 index 0000000..401c38c --- /dev/null +++ b/pages/workbench/wms/purchase.vue @@ -0,0 +1,643 @@ + + + + + \ No newline at end of file diff --git a/static/images/chuku.png b/static/images/chuku.png new file mode 100644 index 0000000000000000000000000000000000000000..35f234bb28a43f7554a0a8d86094f7f53bf3e8d1 GIT binary patch literal 4930 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 { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.uvue b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.uvue new file mode 100644 index 0000000..82031e1 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.uvue @@ -0,0 +1,380 @@ + + + + + diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue new file mode 100644 index 0000000..be5bb64 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue @@ -0,0 +1,560 @@ + + + + + diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/loading.uts b/uni_modules/uni-data-picker/components/uni-data-pickerview/loading.uts new file mode 100644 index 0000000..baa0dff --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/loading.uts @@ -0,0 +1 @@ +export const imgbase : string = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QzlBMzU3OTlEOUM0MTFFOUI0NTZDNERBQURBQzI4RkUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QzlBMzU3OUFEOUM0MTFFOUI0NTZDNERBQURBQzI4RkUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDOUEzNTc5N0Q5QzQxMUU5QjQ1NkM0REFBREFDMjhGRSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDOUEzNTc5OEQ5QzQxMUU5QjQ1NkM0REFBREFDMjhGRSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pt+ALSwAAA6CSURBVHja1FsLkFZV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' \ No newline at end of file diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js new file mode 100644 index 0000000..cfae22a --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js @@ -0,0 +1,622 @@ +export default { + props: { + localdata: { + type: [Array, Object], + default () { + return [] + } + }, + spaceInfo: { + type: Object, + default () { + return {} + } + }, + collection: { + type: String, + default: '' + }, + action: { + type: String, + default: '' + }, + field: { + type: String, + default: '' + }, + orderby: { + type: String, + default: '' + }, + where: { + type: [String, Object], + default: '' + }, + pageData: { + type: String, + default: 'add' + }, + pageCurrent: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 500 + }, + getcount: { + type: [Boolean, String], + default: false + }, + getone: { + type: [Boolean, String], + default: false + }, + gettree: { + type: [Boolean, String], + default: false + }, + manual: { + type: Boolean, + default: false + }, + value: { + type: [Array, String, Number], + default () { + return [] + } + }, + modelValue: { + type: [Array, String, Number], + default () { + return [] + } + }, + preload: { + type: Boolean, + default: false + }, + stepSearh: { + type: Boolean, + default: true + }, + selfField: { + type: String, + default: '' + }, + parentField: { + type: String, + default: '' + }, + multiple: { + type: Boolean, + default: false + }, + map: { + type: Object, + default () { + return { + text: "text", + value: "value" + } + } + } + }, + data() { + return { + loading: false, + errorMessage: '', + loadMore: { + contentdown: '', + contentrefresh: '', + contentnomore: '' + }, + dataList: [], + selected: [], + selectedIndex: 0, + page: { + current: this.pageCurrent, + size: this.pageSize, + count: 0 + } + } + }, + computed: { + isLocalData() { + return !this.collection.length; + }, + isCloudData() { + return this.collection.length > 0; + }, + isCloudDataList() { + return (this.isCloudData && (!this.parentField && !this.selfField)); + }, + isCloudDataTree() { + return (this.isCloudData && this.parentField && this.selfField); + }, + dataValue() { + let isModelValue = Array.isArray(this.modelValue) ? (this.modelValue.length > 0) : (this.modelValue !== null || + this.modelValue !== undefined); + return isModelValue ? this.modelValue : this.value; + }, + hasValue() { + if (typeof this.dataValue === 'number') { + return true + } + return (this.dataValue != null) && (this.dataValue.length > 0) + } + }, + created() { + this.$watch(() => { + var al = []; + ['pageCurrent', + 'pageSize', + 'spaceInfo', + 'value', + 'modelValue', + 'localdata', + 'collection', + 'action', + 'field', + 'orderby', + 'where', + 'getont', + 'getcount', + 'gettree' + ].forEach(key => { + al.push(this[key]) + }); + return al + }, (newValue, oldValue) => { + let needReset = false + for (let i = 2; i < newValue.length; i++) { + if (newValue[i] != oldValue[i]) { + needReset = true + break + } + } + if (newValue[0] != oldValue[0]) { + this.page.current = this.pageCurrent + } + this.page.size = this.pageSize + + this.onPropsChange() + }) + this._treeData = [] + }, + methods: { + onPropsChange() { + this._treeData = []; + }, + + // 填充 pickview 数据 + async loadData() { + if (this.isLocalData) { + this.loadLocalData(); + } else if (this.isCloudDataList) { + this.loadCloudDataList(); + } else if (this.isCloudDataTree) { + this.loadCloudDataTree(); + } + }, + + // 加载本地数据 + async loadLocalData() { + this._treeData = []; + this._extractTree(this.localdata, this._treeData); + + let inputValue = this.dataValue; + if (inputValue === undefined) { + return; + } + + if (Array.isArray(inputValue)) { + inputValue = inputValue[inputValue.length - 1]; + if (typeof inputValue === 'object' && inputValue[this.map.value]) { + inputValue = inputValue[this.map.value]; + } + } + + this.selected = this._findNodePath(inputValue, this.localdata); + }, + + // 加载 Cloud 数据 (单列) + async loadCloudDataList() { + if (this.loading) { + return; + } + this.loading = true; + + try { + let response = await this.getCommand(); + let responseData = response.result.data; + + this._treeData = responseData; + + this._updateBindData(); + this._updateSelected(); + + this.onDataChange(); + } catch (e) { + this.errorMessage = e; + } finally { + this.loading = false; + } + }, + + // 加载 Cloud 数据 (树形) + async loadCloudDataTree() { + if (this.loading) { + return; + } + this.loading = true; + + try { + let commandOptions = { + field: this._cloudDataPostField(), + where: this._cloudDataTreeWhere() + }; + if (this.gettree) { + commandOptions.startwith = `${this.selfField}=='${this.dataValue}'`; + } + + let response = await this.getCommand(commandOptions); + let responseData = response.result.data; + + this._treeData = responseData; + this._updateBindData(); + this._updateSelected(); + + this.onDataChange(); + } catch (e) { + this.errorMessage = e; + } finally { + this.loading = false; + } + }, + + // 加载 Cloud 数据 (节点) + async loadCloudDataNode(callback) { + if (this.loading) { + return; + } + this.loading = true; + + try { + let commandOptions = { + field: this._cloudDataPostField(), + where: this._cloudDataNodeWhere() + }; + + let response = await this.getCommand(commandOptions); + let responseData = response.result.data; + + callback(responseData); + } catch (e) { + this.errorMessage = e; + } finally { + this.loading = false; + } + }, + + // 回显 Cloud 数据 + getCloudDataValue() { + if (this.isCloudDataList) { + return this.getCloudDataListValue(); + } + + if (this.isCloudDataTree) { + return this.getCloudDataTreeValue(); + } + }, + + // 回显 Cloud 数据 (单列) + getCloudDataListValue() { + // 根据 field's as value标识匹配 where 条件 + let where = []; + let whereField = this._getForeignKeyByField(); + if (whereField) { + where.push(`${whereField} == '${this.dataValue}'`) + } + + where = where.join(' || '); + + if (this.where) { + where = `(${this.where}) && (${where})` + } + + return this.getCommand({ + field: this._cloudDataPostField(), + where + }).then((res) => { + this.selected = res.result.data; + return res.result.data; + }); + }, + + // 回显 Cloud 数据 (树形) + getCloudDataTreeValue() { + return this.getCommand({ + field: this._cloudDataPostField(), + getTreePath: { + startWith: `${this.selfField}=='${this.dataValue}'` + } + }).then((res) => { + let treePath = []; + this._extractTreePath(res.result.data, treePath); + this.selected = treePath; + return treePath; + }); + }, + + getCommand(options = {}) { + /* eslint-disable no-undef */ + let db = uniCloud.database(this.spaceInfo) + + const action = options.action || this.action + if (action) { + db = db.action(action) + } + + const collection = options.collection || this.collection + db = db.collection(collection) + + const where = options.where || this.where + if (!(!where || !Object.keys(where).length)) { + db = db.where(where) + } + + const field = options.field || this.field + if (field) { + db = db.field(field) + } + + const orderby = options.orderby || this.orderby + if (orderby) { + db = db.orderBy(orderby) + } + + const current = options.pageCurrent !== undefined ? options.pageCurrent : this.page.current + const size = options.pageSize !== undefined ? options.pageSize : this.page.size + const getCount = options.getcount !== undefined ? options.getcount : this.getcount + const getTree = options.gettree !== undefined ? options.gettree : this.gettree + + const getOptions = { + getCount, + getTree + } + if (options.getTreePath) { + getOptions.getTreePath = options.getTreePath + } + + db = db.skip(size * (current - 1)).limit(size).get(getOptions) + + return db + }, + + _cloudDataPostField() { + let fields = [this.field]; + if (this.parentField) { + fields.push(`${this.parentField} as parent_value`); + } + return fields.join(','); + }, + + _cloudDataTreeWhere() { + let result = [] + let selected = this.selected + let parentField = this.parentField + if (parentField) { + result.push(`${parentField} == null || ${parentField} == ""`) + } + if (selected.length) { + for (var i = 0; i < selected.length - 1; i++) { + result.push(`${parentField} == '${selected[i].value}'`) + } + } + + let where = [] + if (this.where) { + where.push(`(${this.where})`) + } + + if (result.length) { + where.push(`(${result.join(' || ')})`) + } + + return where.join(' && ') + }, + + _cloudDataNodeWhere() { + let where = [] + let selected = this.selected; + if (selected.length) { + where.push(`${this.parentField} == '${selected[selected.length - 1].value}'`); + } + + where = where.join(' || '); + + if (this.where) { + return `(${this.where}) && (${where})` + } + + return where + }, + + _getWhereByForeignKey() { + let result = [] + let whereField = this._getForeignKeyByField(); + if (whereField) { + result.push(`${whereField} == '${this.dataValue}'`) + } + + if (this.where) { + return `(${this.where}) && (${result.join(' || ')})` + } + + return result.join(' || ') + }, + + _getForeignKeyByField() { + let fields = this.field.split(','); + let whereField = null; + for (let i = 0; i < fields.length; i++) { + const items = fields[i].split('as'); + if (items.length < 2) { + continue; + } + if (items[1].trim() === 'value') { + whereField = items[0].trim(); + break; + } + } + return whereField; + }, + + _updateBindData(node) { + const { + dataList, + hasNodes + } = this._filterData(this._treeData, this.selected) + + let isleaf = this._stepSearh === false && !hasNodes + + if (node) { + node.isleaf = isleaf + } + + this.dataList = dataList + this.selectedIndex = dataList.length - 1 + + if (!isleaf && this.selected.length < dataList.length) { + this.selected.push({ + value: null, + text: "请选择" + }) + } + + return { + isleaf, + hasNodes + } + }, + + _updateSelected() { + let dl = this.dataList + let sl = this.selected + let textField = this.map.text + let valueField = this.map.value + for (let i = 0; i < sl.length; i++) { + let value = sl[i].value + let dl2 = dl[i] + for (let j = 0; j < dl2.length; j++) { + let item2 = dl2[j] + if (item2[valueField] === value) { + sl[i].text = item2[textField] + break + } + } + } + }, + + _filterData(data, paths) { + let dataList = [] + let hasNodes = true + + dataList.push(data.filter((item) => { + return (item.parent_value === null || item.parent_value === undefined || item.parent_value === '') + })) + for (let i = 0; i < paths.length; i++) { + let value = paths[i].value + let nodes = data.filter((item) => { + return item.parent_value === value + }) + + if (nodes.length) { + dataList.push(nodes) + } else { + hasNodes = false + } + } + + return { + dataList, + hasNodes + } + }, + + _extractTree(nodes, result, parent_value) { + let list = result || [] + let valueField = this.map.value + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + + let child = {} + for (let key in node) { + if (key !== 'children') { + child[key] = node[key] + } + } + if (parent_value !== null && parent_value !== undefined && parent_value !== '') { + child.parent_value = parent_value + } + result.push(child) + + let children = node.children + if (children) { + this._extractTree(children, result, node[valueField]) + } + } + }, + + _extractTreePath(nodes, result) { + let list = result || [] + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + + let child = {} + for (let key in node) { + if (key !== 'children') { + child[key] = node[key] + } + } + result.push(child) + + let children = node.children + if (children) { + this._extractTreePath(children, result) + } + } + }, + + _findNodePath(key, nodes, path = []) { + let textField = this.map.text + let valueField = this.map.value + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + let children = node.children + let text = node[textField] + let value = node[valueField] + + path.push({ + value, + text + }) + + if (value === key) { + return path + } + + if (children) { + const p = this._findNodePath(key, children, path) + if (p.length) { + return p + } + } + + path.pop() + } + return [] + } + } +} diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.uts b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.uts new file mode 100644 index 0000000..372795d --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.uts @@ -0,0 +1,693 @@ +export type PaginationType = { + current : number, + size : number, + count : number +} + +export type LoadMoreType = { + contentdown : string, + contentrefresh : string, + contentnomore : string +} + +export type SelectedItemType = { + name : string, + value : string, +} + +export type GetCommandOptions = { + collection ?: UTSJSONObject, + field ?: string, + orderby ?: string, + where ?: any, + pageData ?: string, + pageCurrent ?: number, + pageSize ?: number, + getCount ?: boolean, + getTree ?: any, + getTreePath ?: UTSJSONObject, + startwith ?: string, + limitlevel ?: number, + groupby ?: string, + groupField ?: string, + distinct ?: boolean, + pageIndistinct ?: boolean, + foreignKey ?: string, + loadtime ?: string, + manual ?: boolean +} + +const DefaultSelectedNode = { + text: '请选择', + value: '' +} + +export const dataPicker = defineMixin({ + props: { + localdata: { + type: Array as PropType>, + default: [] as Array + }, + collection: { + type: Object, + default: '' + }, + field: { + type: String, + default: '' + }, + orderby: { + type: String, + default: '' + }, + where: { + type: Object, + default: '' + }, + pageData: { + type: String, + default: 'add' + }, + pageCurrent: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 20 + }, + getcount: { + type: Boolean, + default: false + }, + gettree: { + type: Object, + default: '' + }, + gettreepath: { + type: Object, + default: '' + }, + startwith: { + type: String, + default: '' + }, + limitlevel: { + type: Number, + default: 10 + }, + groupby: { + type: String, + default: '' + }, + groupField: { + type: String, + default: '' + }, + distinct: { + type: Boolean, + default: false + }, + pageIndistinct: { + type: Boolean, + default: false + }, + foreignKey: { + type: String, + default: '' + }, + loadtime: { + type: String, + default: 'auto' + }, + manual: { + type: Boolean, + default: false + }, + preload: { + type: Boolean, + default: false + }, + stepSearh: { + type: Boolean, + default: true + }, + selfField: { + type: String, + default: '' + }, + parentField: { + type: String, + default: '' + }, + multiple: { + type: Boolean, + default: false + }, + value: { + type: Object, + default: '' + }, + modelValue: { + type: Object, + default: '' + }, + defaultProps: { + type: Object as PropType, + } + }, + data() { + return { + loading: false, + error: null as UniCloudError | null, + treeData: [] as Array, + selectedIndex: 0, + selectedNodes: [] as Array, + selectedPages: [] as Array[], + selectedValue: '', + selectedPaths: [] as Array, + pagination: { + current: 1, + size: 20, + count: 0 + } as PaginationType + } + }, + computed: { + mappingTextName() : string { + // TODO + return (this.defaultProps != null) ? this.defaultProps!.getString('text', 'text') : 'text' + }, + mappingValueName() : string { + // TODO + return (this.defaultProps != null) ? this.defaultProps!.getString('value', 'value') : 'value' + }, + currentDataList() : Array { + if (this.selectedIndex > this.selectedPages.length - 1) { + return [] as Array + } + return this.selectedPages[this.selectedIndex] + }, + isLocalData() : boolean { + return this.localdata.length > 0 + }, + isCloudData() : boolean { + return this._checkIsNotNull(this.collection) + }, + isCloudDataList() : boolean { + return (this.isCloudData && (this.parentField.length == 0 && this.selfField.length == 0)) + }, + isCloudDataTree() : boolean { + return (this.isCloudData && this.parentField.length > 0 && this.selfField.length > 0) + }, + dataValue() : any { + return this.hasModelValue ? this.modelValue : this.value + }, + hasCloudTreeData() : boolean { + return this.treeData.length > 0 + }, + hasModelValue() : boolean { + if (typeof this.modelValue == 'string') { + const valueString = this.modelValue as string + return (valueString.length > 0) + } else if (Array.isArray(this.modelValue)) { + const valueArray = this.modelValue as Array + return (valueArray.length > 0) + } + return false + }, + hasCloudDataValue() : boolean { + if (typeof this.dataValue == 'string') { + const valueString = this.dataValue as string + return (valueString.length > 0) + } + return false + } + }, + created() { + this.pagination.current = this.pageCurrent + this.pagination.size = this.pageSize + + this.$watch( + () : any => [ + this.pageCurrent, + this.pageSize, + this.localdata, + this.value, + this.collection, + this.field, + this.getcount, + this.orderby, + this.where, + this.groupby, + this.groupField, + this.distinct + ], + (newValue : Array, oldValue : Array) => { + this.pagination.size = this.pageSize + if (newValue[0] !== oldValue[0]) { + this.pagination.current = this.pageCurrent + } + + this.onPropsChange() + } + ) + }, + methods: { + onPropsChange() { + this.selectedIndex = 0 + this.treeData.length = 0 + this.selectedNodes.length = 0 + this.selectedPages.length = 0 + this.selectedPaths.length = 0 + + // 加载数据 + this.$nextTick(() => { + this.loadData() + }) + }, + + onTabSelect(index : number) { + this.selectedIndex = index + }, + + onNodeClick(nodeData : UTSJSONObject) { + if (nodeData.getBoolean('disable', false)) { + return + } + + const isLeaf = this._checkIsLeafNode(nodeData) + + this._trimSelectedNodes(nodeData) + + this.$emit('nodeclick', nodeData) + + if (this.isLocalData) { + if (isLeaf || !this._checkHasChildren(nodeData)) { + this.onFinish() + } + } else if (this.isCloudDataList) { + this.onFinish() + } else if (this.isCloudDataTree) { + if (isLeaf) { + this.onFinish() + } else if (!this._checkHasChildren(nodeData)) { + // 尝试请求一次,如果没有返回数据标记为叶子节点 + this.loadCloudDataNode(nodeData) + } + } + }, + + getChangeNodes(): Array { + const nodes: Array = [] + this.selectedNodes.forEach((node : UTSJSONObject) => { + const newNode: UTSJSONObject = {} + newNode[this.mappingTextName] = node.getString(this.mappingTextName) + newNode[this.mappingValueName] = node.getString(this.mappingValueName) + nodes.push(newNode) + }) + return nodes + }, + + onFinish() { }, + + // 加载数据(自动判定环境) + loadData() { + if (this.isLocalData) { + this.loadLocalData() + } else if (this.isCloudDataList) { + this.loadCloudDataList() + } else if (this.isCloudDataTree) { + this.loadCloudDataTree() + } + }, + + // 加载本地数据 + loadLocalData() { + this.treeData = this.localdata + if (Array.isArray(this.dataValue)) { + const value = this.dataValue as Array + this.selectedPaths = value.slice(0) + this._pushSelectedTreeNodes(value, this.localdata) + } else { + this._pushSelectedNodes(this.localdata) + } + }, + + // 加载 Cloud 数据 (单列) + loadCloudDataList() { + this._loadCloudData(null, (data : Array) => { + this.treeData = data + this._pushSelectedNodes(data) + }) + }, + + // 加载 Cloud 数据 (树形) + loadCloudDataTree() { + let commandOptions = { + field: this._cloudDataPostField(), + where: this._cloudDataTreeWhere(), + getTree: true + } as GetCommandOptions + if (this._checkIsNotNull(this.gettree)) { + commandOptions.startwith = `${this.selfField}=='${this.dataValue as string}'` + } + this._loadCloudData(commandOptions, (data : Array) => { + this.treeData = data + if (this.selectedPaths.length > 0) { + this._pushSelectedTreeNodes(this.selectedPaths, data) + } else { + this._pushSelectedNodes(data) + } + }) + }, + + // 加载 Cloud 数据 (节点) + loadCloudDataNode(nodeData : UTSJSONObject) { + const commandOptions = { + field: this._cloudDataPostField(), + where: this._cloudDataNodeWhere() + } as GetCommandOptions + this._loadCloudData(commandOptions, (data : Array) => { + nodeData['children'] = data + if (data.length == 0) { + nodeData['isleaf'] = true + this.onFinish() + } else { + this._pushSelectedNodes(data) + } + }) + }, + + // 回显 Cloud Tree Path + loadCloudDataPath() { + if (!this.hasCloudDataValue) { + return + } + + const command : GetCommandOptions = {} + + // 单列 + if (this.isCloudDataList) { + // 根据 field's as value标识匹配 where 条件 + let where : Array = []; + let whereField = this._getForeignKeyByField(); + if (whereField.length > 0) { + where.push(`${whereField} == '${this.dataValue as string}'`) + } + + let whereString = where.join(' || ') + if (this._checkIsNotNull(this.where)) { + whereString = `(${this.where}) && (${whereString})` + } + + command.field = this._cloudDataPostField() + command.where = whereString + } + + // 树形 + if (this.isCloudDataTree) { + command.field = this._cloudDataPostField() + command.getTreePath = { + startWith: `${this.selfField}=='${this.dataValue as string}'` + } + } + + this._loadCloudData(command, (data : Array) => { + this._extractTreePath(data, this.selectedPaths) + }) + }, + + _loadCloudData(options ?: GetCommandOptions, callback ?: ((data : Array) => void)) { + if (this.loading) { + return + } + this.loading = true + + this.error = null + + this._getCommand(options).then((response : UniCloudDBGetResult) => { + callback?.(response.data) + }).catch((err : any | null) => { + this.error = err as UniCloudError + }).finally(() => { + this.loading = false + }) + }, + + _cloudDataPostField() : string { + let fields = [this.field]; + if (this.parentField.length > 0) { + fields.push(`${this.parentField} as parent_value`) + } + return fields.join(',') + }, + + _cloudDataTreeWhere() : string { + let result : Array = [] + let selectedNodes = this.selectedNodes.length > 0 ? this.selectedNodes : this.selectedPaths + let parentField = this.parentField + if (parentField.length > 0) { + result.push(`${parentField} == null || ${parentField} == ""`) + } + if (selectedNodes.length > 0) { + for (var i = 0; i < selectedNodes.length - 1; i++) { + const parentFieldValue = selectedNodes[i].getString('value', '') + result.push(`${parentField} == '${parentFieldValue}'`) + } + } + + let where : Array = [] + if (this._checkIsNotNull(this.where)) { + where.push(`(${this.where as string})`) + } + + if (result.length > 0) { + where.push(`(${result.join(' || ')})`) + } + + return where.join(' && ') + }, + + _cloudDataNodeWhere() : string { + const where : Array = [] + if (this.selectedNodes.length > 0) { + const value = this.selectedNodes[this.selectedNodes.length - 1].getString('value', '') + where.push(`${this.parentField} == '${value}'`) + } + + let whereString = where.join(' || ') + if (this._checkIsNotNull(this.where)) { + return `(${this.where as string}) && (${whereString})` + } + + return whereString + }, + + _getWhereByForeignKey() : string { + let result : Array = [] + let whereField = this._getForeignKeyByField(); + if (whereField.length > 0) { + result.push(`${whereField} == '${this.dataValue as string}'`) + } + + if (this._checkIsNotNull(this.where)) { + return `(${this.where}) && (${result.join(' || ')})` + } + + return result.join(' || ') + }, + + _getForeignKeyByField() : string { + const fields = this.field.split(',') + let whereField = '' + for (let i = 0; i < fields.length; i++) { + const items = fields[i].split('as') + if (items.length < 2) { + continue + } + if (items[1].trim() === 'value') { + whereField = items[0].trim() + break + } + } + return whereField + }, + + _getCommand(options ?: GetCommandOptions) : Promise { + let db = uniCloud.databaseForJQL() + + let collection = Array.isArray(this.collection) ? db.collection(...(this.collection as Array)) : db.collection(this.collection) + + let filter : UniCloudDBFilter | null = null + if (this.foreignKey.length > 0) { + filter = collection.foreignKey(this.foreignKey) + } + + const where : any = options?.where ?? this.where + if (typeof where == 'string') { + const whereString = where as string + if (whereString.length > 0) { + filter = (filter != null) ? filter.where(where) : collection.where(where) + } + } else { + filter = (filter != null) ? filter.where(where) : collection.where(where) + } + + let query : UniCloudDBQuery | null = null + if (this.field.length > 0) { + query = (filter != null) ? filter.field(this.field) : collection.field(this.field) + } + if (this.groupby.length > 0) { + if (query != null) { + query = query.groupBy(this.groupby) + } else if (filter != null) { + query = filter.groupBy(this.groupby) + } + } + if (this.groupField.length > 0) { + if (query != null) { + query = query.groupField(this.groupField) + } else if (filter != null) { + query = filter.groupField(this.groupField) + } + } + if (this.distinct == true) { + if (query != null) { + query = query.distinct(this.field) + } else if (filter != null) { + query = filter.distinct(this.field) + } + } + if (this.orderby.length > 0) { + if (query != null) { + query = query.orderBy(this.orderby) + } else if (filter != null) { + query = filter.orderBy(this.orderby) + } + } + + const size = this.pagination.size + const current = this.pagination.current + if (query != null) { + query = query.skip(size * (current - 1)).limit(size) + } else if (filter != null) { + query = filter.skip(size * (current - 1)).limit(size) + } else { + query = collection.skip(size * (current - 1)).limit(size) + } + + const getOptions = {} + const treeOptions = { + limitLevel: this.limitlevel, + startWith: this.startwith + } + if (this.getcount == true) { + getOptions['getCount'] = this.getcount + } + + const getTree : any = options?.getTree ?? this.gettree + if (typeof getTree == 'string') { + const getTreeString = getTree as string + if (getTreeString.length > 0) { + getOptions['getTree'] = treeOptions + } + } else if (typeof getTree == 'object') { + getOptions['getTree'] = treeOptions + } else { + getOptions['getTree'] = getTree + } + + const getTreePath = options?.getTreePath ?? this.gettreepath + if (typeof getTreePath == 'string') { + const getTreePathString = getTreePath as string + if (getTreePathString.length > 0) { + getOptions['getTreePath'] = getTreePath + } + } else { + getOptions['getTreePath'] = getTreePath + } + + return query.get(getOptions) + }, + + _checkIsNotNull(value : any) : boolean { + if (typeof value == 'string') { + const valueString = value as string + return (valueString.length > 0) + } else if (value instanceof UTSJSONObject) { + return true + } + return false + }, + + _checkIsLeafNode(nodeData : UTSJSONObject) : boolean { + if (this.selectedIndex >= this.limitlevel) { + return true + } + + if (nodeData.getBoolean('isleaf', false)) { + return true + } + + return false + }, + + _checkHasChildren(nodeData : UTSJSONObject) : boolean { + const children = nodeData.getArray('children') ?? ([] as Array) + return children.length > 0 + }, + + _pushSelectedNodes(nodes : Array) { + this.selectedNodes.push(DefaultSelectedNode) + this.selectedPages.push(nodes) + this.selectedIndex = this.selectedPages.length - 1 + }, + + _trimSelectedNodes(nodeData : UTSJSONObject) { + this.selectedNodes.splice(this.selectedIndex) + this.selectedNodes.push(nodeData) + + if (this.selectedPages.length > 0) { + this.selectedPages.splice(this.selectedIndex + 1) + } + + const children = nodeData.getArray('children') ?? ([] as Array) + if (children.length > 0) { + this.selectedNodes.push(DefaultSelectedNode) + this.selectedPages.push(children) + } + + this.selectedIndex = this.selectedPages.length - 1 + }, + + _pushSelectedTreeNodes(paths : Array, nodes : Array) { + let children : Array = nodes + paths.forEach((node : UTSJSONObject) => { + const findNode = children.find((item : UTSJSONObject) : boolean => { + return (item.getString(this.mappingValueName) == node.getString(this.mappingValueName)) + }) + if (findNode != null) { + this.selectedPages.push(children) + this.selectedNodes.push(node) + children = findNode.getArray('children') ?? ([] as Array) + } + }) + this.selectedIndex = this.selectedPages.length - 1 + }, + + _extractTreePath(nodes : Array, result : Array) { + if (nodes.length == 0) { + return + } + + const node = nodes[0] + result.push(node) + + const children = node.getArray('children') + if (Array.isArray(children) && children!.length > 0) { + this._extractTreePath(children, result) + } + } + } +}) diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.css b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.css new file mode 100644 index 0000000..39fe1c3 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.css @@ -0,0 +1,76 @@ +.uni-data-pickerview { + position: relative; + flex-direction: column; + overflow: hidden; +} + +.loading-cover { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + align-items: center; + justify-content: center; + background-color: rgba(150, 150, 150, .1); +} + +.error { + background-color: #fff; + padding: 15px; +} + +.error-text { + color: #DD524D; +} + +.selected-node-list { + flex-direction: row; + flex-wrap: nowrap; +} + +.selected-node-item { + margin-left: 10px; + margin-right: 10px; + padding: 8px 10px 8px 10px; + border-bottom: 2px solid transparent; +} + +.selected-node-item-active { + color: #007aff; + border-bottom-color: #007aff; +} + +.list-view { + flex: 1; +} + +.list-item { + flex-direction: row; + justify-content: space-between; + padding: 12px 15px; + border-bottom: 1px solid #f0f0f0; +} + +.item-text { + color: #333333; +} + +.item-text-disabled { + opacity: .5; +} + +.item-text-overflow { + overflow: hidden; +} + +.check { + margin-right: 5px; + border: 2px solid #007aff; + border-left: 0; + border-top: 0; + height: 12px; + width: 6px; + transform-origin: center; + transform: rotate(45deg); +} diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.uvue b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.uvue new file mode 100644 index 0000000..f4780f3 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.uvue @@ -0,0 +1,69 @@ + + + + + diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue new file mode 100644 index 0000000..6ebced9 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue @@ -0,0 +1,323 @@ + + + + + diff --git a/uni_modules/uni-data-picker/package.json b/uni_modules/uni-data-picker/package.json new file mode 100644 index 0000000..ba69c67 --- /dev/null +++ b/uni_modules/uni-data-picker/package.json @@ -0,0 +1,93 @@ +{ + "id": "uni-data-picker", + "displayName": "uni-data-picker 数据驱动的picker选择器", + "version": "2.0.2", + "description": "单列、多列级联选择器,常用于省市区城市选择、公司部门选择、多级分类等场景", + "keywords": [ + "uni-ui", + "uniui", + "picker", + "级联", + "省市区", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-load-more", + "uni-icons", + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y", + "app-uvue": "y", + "app-harmony": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-data-picker/readme.md b/uni_modules/uni-data-picker/readme.md new file mode 100644 index 0000000..19dd0e8 --- /dev/null +++ b/uni_modules/uni-data-picker/readme.md @@ -0,0 +1,22 @@ +## DataPicker 级联选择 +> **组件名:uni-data-picker** +> 代码块: `uDataPicker` +> 关联组件:`uni-data-pickerview`、`uni-load-more`。 + + +`` 是一个选择类[datacom组件](https://uniapp.dcloud.net.cn/component/datacom)。 + +支持单列、和多列级联选择。列数没有限制,如果屏幕显示不全,顶部tab区域会左右滚动。 + +候选数据支持一次性加载完毕,也支持懒加载,比如示例图中,选择了“北京”后,动态加载北京的区县数据。 + +`` 组件尤其适用于地址选择、分类选择等选择类。 + +`` 支持本地数据、云端静态数据(json),uniCloud云数据库数据。 + +`` 可以通过JQL直连uniCloud云数据库,配套[DB Schema](https://uniapp.dcloud.net.cn/uniCloud/schema),可在schema2code中自动生成前端页面,还支持服务器端校验。 + +在uniCloud数据表中新建表“uni-id-address”和“opendb-city-china”,这2个表的schema自带foreignKey关联。在“uni-id-address”表的表结构页面使用schema2code生成前端页面,会自动生成地址管理的维护页面,自动从“opendb-city-china”表包含的中国所有省市区信息里选择地址。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md index 0261131..0cc65a0 100644 --- a/uni_modules/uni-icons/changelog.md +++ b/uni_modules/uni-icons/changelog.md @@ -1,5 +1,5 @@ -## 2.0.10(2024-06-07) -- 优化 uni-app x 中,size 属性的类型 +## 2.0.11(2025-08-18) +- 修复 图标点击事件返回 ## 2.0.9(2024-01-12) fix: 修复图标大小默认值错误的问题 ## 2.0.8(2023-12-14) diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue index 8740559..398678e 100644 --- a/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue @@ -1,91 +1,91 @@ diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue index 7da5356..1bd3d5e 100644 --- a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -85,8 +85,8 @@ } }, methods: { - _onClick() { - this.$emit('click') + _onClick(e) { + this.$emit('click', e) } } } @@ -107,4 +107,4 @@ text-decoration: none; text-align: center; } - + \ No newline at end of file diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json index 6b681b4..9a9052f 100644 --- a/uni_modules/uni-icons/package.json +++ b/uni_modules/uni-icons/package.json @@ -1,7 +1,7 @@ { "id": "uni-icons", "displayName": "uni-icons 图标", - "version": "2.0.10", + "version": "2.0.11", "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。", "keywords": [ "uni-ui", @@ -11,12 +11,14 @@ ], "repository": "https://github.com/dcloudio/uni-ui", "engines": { - "HBuilderX": "^3.2.14" + "HBuilderX": "^3.2.14", + "uni-app": "^4.08", + "uni-app-x": "^4.61" }, "directories": { "example": "../../temps/example_temps" }, -"dcloudext": { + "dcloudext": { "sale": { "regular": { "price": "0.00" @@ -34,56 +36,76 @@ "permissions": "无" }, "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", - "type": "component-vue" + "type": "component-vue", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" }, "uni_modules": { - "dependencies": ["uni-scss"], + "dependencies": [ + "uni-scss" + ], "encrypt": [], "platforms": { "cloud": { - "tcb": "y", - "aliyun": "y", - "alipay": "n" + "tcb": "x", + "aliyun": "x", + "alipay": "x" }, "client": { - "App": { - "app-vue": "y", - "app-nvue": "y", - "app-uvue": "y" + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": { + "extVersion": "", + "minVersion": "29" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "√", + "lark": "-" + }, + "quickapp": { + "huawei": "√", + "union": "√" + } }, - "H5-mobile": { - "Safari": "y", - "Android Browser": "y", - "微信浏览器(Android)": "y", - "QQ浏览器(Android)": "y" - }, - "H5-pc": { - "Chrome": "y", - "IE": "y", - "Edge": "y", - "Firefox": "y", - "Safari": "y" - }, - "小程序": { - "微信": "y", - "阿里": "y", - "百度": "y", - "字节跳动": "y", - "QQ": "y", - "钉钉": "y", - "快手": "y", - "飞书": "y", - "京东": "y" - }, - "快应用": { - "华为": "y", - "联盟": "y" - }, - "Vue": { - "vue2": "y", - "vue3": "y" + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "29" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } } } } } -} +} \ No newline at end of file diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md index 667abdb..c5750ac 100644 --- a/uni_modules/uni-load-more/changelog.md +++ b/uni_modules/uni-load-more/changelog.md @@ -1,9 +1,7 @@ +## 1.3.7(2025-08-20) +- 修复 微信小程序css警告问题 ## 1.3.6(2024-10-15) - 修复 微信小程序中的getSystemInfo警告 -## 1.3.5(2024-10-12) -- 修复 微信小程序中的getSystemInfo警告 -## 1.3.4(2024-10-12) -- 修复 微信小程序中的getSystemInfo警告 ## 1.3.3(2022-01-20) - 新增 showText属性 ,是否显示文本 ## 1.3.2(2022-01-19) diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue index a203417..0fa17e8 100644 --- a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue +++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue @@ -26,7 +26,7 @@ - +