HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

进销存源码下载-简单好用的进销存管理系统

源码分享

  进销存源码是一种数据管理工具,它允许查看和共享数据,以优化和自动化基本业务操作,是一种简单好用的管理系统。进销存源码可以帮助您组织、自动化和改进您的业务。定制的进销存源码解决方案可以提高效率,保持持续增长。
  
  进销存源码下载及演示站示例:x.csymzs.top
  
  由于组织结构、部门间复杂的联系等问题,可能难以收集和分析数据。进销存源码是一个可以收集、组织和解释各种业务交易数据的工具,包括:客户关系、供应链、库存、采购、人力资源、金融、销售、制造业、工程。
  
  如果不经过处理,这些信息就没有上下文和视角。除此之外,您无法看到数据不同部分之间的连接。定制的进销存源码解决方案允许提取、自动化和组织这些数据,这有助于开发智能业务行动所需的洞察力。进销存源码使组织通过基于数据的决策变得更加灵活和高效。
  

  为了更好地匹配特定公司的需求,进销存源码解决方案可以在两个层面上工作:
  
  进销存源码作为一个系统或单一的解决方案从零开始。如果您不使用任何进销存源码应用程序,并计划申请软件开发公司的服务,则此选项是可取的。业务分析师将进行一系列的访谈,以定义您的业务问题,并开发适当的软件解决方案来解决这些问题。
  
  进销存源码作为现有系统的集成模块。此选项允许改进使用的业务流程,而无需在开发和部署新软件解决方案上花费资源。相反,您可以向已经在使用的应用程序中添加新模块,并在需要时执行伴随的定制。在可能的选项中,有报告模块、客户和订单管理工具、工作量管理工具、时间跟踪系统、项目指示板等。这种解决方案可以帮助提高分析的效率,改进报告,并允许在不中断任何业务流程的情况下做出更好的业务决策。
  
  选择进销存源码时常见的错误
  
  当你在寻找一个新的进销存源码系统时,你的首要任务之一就是明确你的业务需求。你应该对你的战略和主要业务目标有一个清晰的愿景。你应该定义你的公司需要什么样的进销存源码解决方案。可能的替代方案包括从零开始开发的系统和一个单独的模块(财务、制造、人力资源、销售、CRM、项目管理)。
  
  记住,没有必要急着选择一个特定的进销存源码系统。在这么做之前,你必须花足够的时间来了解你的业务需要什么以及成本会有多高。明确进销存源码系统或模块将带来的好处是至关重要的。原因是所选择的解决方案将在您的业务前景中发挥关键作用。
  
  在选择进销存源码解决方案时,很多公司都需要非常具体的模块来实现。以从官方网站下载一些法律信息到系统的模块为例。不要试图提供未来可能需要或不需要的所有功能,而是应该专注于能够保证市场竞争优势的功能。例如,信息收集的自动化,在一次单击中生成报告,等等。
  
  使用演示版本来评估系统软件供应商将很乐意向您演示他们的进销存源码根据您的需求的解释设计的可能性。不同的公司有不同的开发方法和使用的技术。因此,比较他们的工作结果可能相当困难。
  
  一个可能的解决方案是要求一个结构化的演示,允许比较“两个苹果”。目标是为每个潜在的软件供应商提供相同的测试计划。这样的计划应该描述您想要测试的所有场景。您应该关注开发的解决方案在多大程度上满足您的需求。这个测试必须确认在进销存源码解决方案中实现的功能可以改进您的业务流程。
  
  关注成本而不是收益每个客户都希望自己的进销存源码解决方案能够在可用的预算范围内按时交付。达到这些目标通常被认为是一个成功的结果。确保软件开发和部署的成本保持在最初的预期之内是一件很自然的事情。但不幸的是,这种方法没有考虑到潜在的前景。
  
  记住,长期利益应高于最初的发展成本。与其关注某一特定的进销存源码应用程序将花费你的公司多少钱,不如试着评估长期的前景。最糟糕的事情之一就是仅仅因为成本原因而选择一个进销存源码解决方案。你应该考虑在进销存源码上多花10%或15%的钱,这些软件是根据你的业务特点设计的,最终会使你的财务收益成倍增加。
  
  自定义进销存源码的优点和实例
  

  定制的进销存源码可以为任何公司提供业务优势,因为它是按照客户制定的确切要求设计的。即用即用的解决方案有一定的优势,但这类软件并不适合所有人,因为每种业务都是独特的。一些公司在开始使用现成的解决方案后遇到了不同的麻烦,因为需要根据此类软件的具体情况相应地调整工作流。
  
  定制进销存源码解决方案的主要优势是,软件公司完全按照您的需求从头开始创建这样的应用程序。软件供应商做出足够的努力来理解您业务的每个独特方面,例如您工作的行业、您使用的数据的性质和当地立法的特殊性。这种方法可以保证最终的软件产品将实现您的业务问题的解决方案。
  
  提高系统性能和可用性
  
  通常,定制的进销存源码解决方案比其他解决方案提供更好的性能。在这种情况下,软件体系结构从头开始设计,以实现高性能和更好的应用程序可用性。定制的进销存源码是可扩展的,所以您可以重新配置它,并集成更多的模块,以适应您的业务增长。
  

  企业工作流应用程序旨在帮助员工处理与业务合作伙伴、供应商、客户和其他参与者相关的大量信息:
  
  该解决方案允许用户立即获得有关当前业务事件的最相关信息。可视化和数字报告模块以易于解释的形式表示复杂的业务数据,这有助于更快地做出重要的业务决策。此外,用户可以获得即时访问库存可用性、客户档案和订单历史记录。
  
  改进的用户界面
  
  当你处理一项需要分析大量数据的复杂任务时,最重要的是设计一个合理的用户界面。用户必须能够轻松理解屏幕上显示的数据以及所有控件的目的。由于定制的进销存源码解决方案是为满足特定公司的需求而设计的,所以可以放心,软件供应商的业务分析师和开发人员将做出必要的努力,以达到最佳的用户体验。
  
  自动化、统一的报表系统
  
  定制的进销存源码解决方案提供了您公司不同部门的操作流程的完整信息,如财务、人力资源管理、制造、营销、供应链、仓库管理等。进销存源码可以自动化从一个部门或职能到另一个部门或职能的工作流。它有助于确保该部的所有活动都由一个简化统计分析的单一报告系统进行监测。
  
  作为一个进销存源码应用程序的例子,它被设计用来管理公司在不同阶段的工作流程,你可以查看劳动力和设施管理套件:
  
  这个解决方案可以简化对公司工作流的监控,从创建合同开始,到报告结束。该应用程序允许即时访问联系人、订单、轮班计划和主要kpi。
  
  结语
  
  为中小型企业选择进销存源码解决方案可能是一个相当具有挑战性的问题。比起定制的软件,您更喜欢现成的解决方案,所以里为大家提供了进销存源码下载资源,让更多的中小型企业从中获益。

继续阅读 »

  进销存源码是一种数据管理工具,它允许查看和共享数据,以优化和自动化基本业务操作,是一种简单好用的管理系统。进销存源码可以帮助您组织、自动化和改进您的业务。定制的进销存源码解决方案可以提高效率,保持持续增长。
  
  进销存源码下载及演示站示例:x.csymzs.top
  
  由于组织结构、部门间复杂的联系等问题,可能难以收集和分析数据。进销存源码是一个可以收集、组织和解释各种业务交易数据的工具,包括:客户关系、供应链、库存、采购、人力资源、金融、销售、制造业、工程。
  
  如果不经过处理,这些信息就没有上下文和视角。除此之外,您无法看到数据不同部分之间的连接。定制的进销存源码解决方案允许提取、自动化和组织这些数据,这有助于开发智能业务行动所需的洞察力。进销存源码使组织通过基于数据的决策变得更加灵活和高效。
  

  为了更好地匹配特定公司的需求,进销存源码解决方案可以在两个层面上工作:
  
  进销存源码作为一个系统或单一的解决方案从零开始。如果您不使用任何进销存源码应用程序,并计划申请软件开发公司的服务,则此选项是可取的。业务分析师将进行一系列的访谈,以定义您的业务问题,并开发适当的软件解决方案来解决这些问题。
  
  进销存源码作为现有系统的集成模块。此选项允许改进使用的业务流程,而无需在开发和部署新软件解决方案上花费资源。相反,您可以向已经在使用的应用程序中添加新模块,并在需要时执行伴随的定制。在可能的选项中,有报告模块、客户和订单管理工具、工作量管理工具、时间跟踪系统、项目指示板等。这种解决方案可以帮助提高分析的效率,改进报告,并允许在不中断任何业务流程的情况下做出更好的业务决策。
  
  选择进销存源码时常见的错误
  
  当你在寻找一个新的进销存源码系统时,你的首要任务之一就是明确你的业务需求。你应该对你的战略和主要业务目标有一个清晰的愿景。你应该定义你的公司需要什么样的进销存源码解决方案。可能的替代方案包括从零开始开发的系统和一个单独的模块(财务、制造、人力资源、销售、CRM、项目管理)。
  
  记住,没有必要急着选择一个特定的进销存源码系统。在这么做之前,你必须花足够的时间来了解你的业务需要什么以及成本会有多高。明确进销存源码系统或模块将带来的好处是至关重要的。原因是所选择的解决方案将在您的业务前景中发挥关键作用。
  
  在选择进销存源码解决方案时,很多公司都需要非常具体的模块来实现。以从官方网站下载一些法律信息到系统的模块为例。不要试图提供未来可能需要或不需要的所有功能,而是应该专注于能够保证市场竞争优势的功能。例如,信息收集的自动化,在一次单击中生成报告,等等。
  
  使用演示版本来评估系统软件供应商将很乐意向您演示他们的进销存源码根据您的需求的解释设计的可能性。不同的公司有不同的开发方法和使用的技术。因此,比较他们的工作结果可能相当困难。
  
  一个可能的解决方案是要求一个结构化的演示,允许比较“两个苹果”。目标是为每个潜在的软件供应商提供相同的测试计划。这样的计划应该描述您想要测试的所有场景。您应该关注开发的解决方案在多大程度上满足您的需求。这个测试必须确认在进销存源码解决方案中实现的功能可以改进您的业务流程。
  
  关注成本而不是收益每个客户都希望自己的进销存源码解决方案能够在可用的预算范围内按时交付。达到这些目标通常被认为是一个成功的结果。确保软件开发和部署的成本保持在最初的预期之内是一件很自然的事情。但不幸的是,这种方法没有考虑到潜在的前景。
  
  记住,长期利益应高于最初的发展成本。与其关注某一特定的进销存源码应用程序将花费你的公司多少钱,不如试着评估长期的前景。最糟糕的事情之一就是仅仅因为成本原因而选择一个进销存源码解决方案。你应该考虑在进销存源码上多花10%或15%的钱,这些软件是根据你的业务特点设计的,最终会使你的财务收益成倍增加。
  
  自定义进销存源码的优点和实例
  

  定制的进销存源码可以为任何公司提供业务优势,因为它是按照客户制定的确切要求设计的。即用即用的解决方案有一定的优势,但这类软件并不适合所有人,因为每种业务都是独特的。一些公司在开始使用现成的解决方案后遇到了不同的麻烦,因为需要根据此类软件的具体情况相应地调整工作流。
  
  定制进销存源码解决方案的主要优势是,软件公司完全按照您的需求从头开始创建这样的应用程序。软件供应商做出足够的努力来理解您业务的每个独特方面,例如您工作的行业、您使用的数据的性质和当地立法的特殊性。这种方法可以保证最终的软件产品将实现您的业务问题的解决方案。
  
  提高系统性能和可用性
  
  通常,定制的进销存源码解决方案比其他解决方案提供更好的性能。在这种情况下,软件体系结构从头开始设计,以实现高性能和更好的应用程序可用性。定制的进销存源码是可扩展的,所以您可以重新配置它,并集成更多的模块,以适应您的业务增长。
  

  企业工作流应用程序旨在帮助员工处理与业务合作伙伴、供应商、客户和其他参与者相关的大量信息:
  
  该解决方案允许用户立即获得有关当前业务事件的最相关信息。可视化和数字报告模块以易于解释的形式表示复杂的业务数据,这有助于更快地做出重要的业务决策。此外,用户可以获得即时访问库存可用性、客户档案和订单历史记录。
  
  改进的用户界面
  
  当你处理一项需要分析大量数据的复杂任务时,最重要的是设计一个合理的用户界面。用户必须能够轻松理解屏幕上显示的数据以及所有控件的目的。由于定制的进销存源码解决方案是为满足特定公司的需求而设计的,所以可以放心,软件供应商的业务分析师和开发人员将做出必要的努力,以达到最佳的用户体验。
  
  自动化、统一的报表系统
  
  定制的进销存源码解决方案提供了您公司不同部门的操作流程的完整信息,如财务、人力资源管理、制造、营销、供应链、仓库管理等。进销存源码可以自动化从一个部门或职能到另一个部门或职能的工作流。它有助于确保该部的所有活动都由一个简化统计分析的单一报告系统进行监测。
  
  作为一个进销存源码应用程序的例子,它被设计用来管理公司在不同阶段的工作流程,你可以查看劳动力和设施管理套件:
  
  这个解决方案可以简化对公司工作流的监控,从创建合同开始,到报告结束。该应用程序允许即时访问联系人、订单、轮班计划和主要kpi。
  
  结语
  
  为中小型企业选择进销存源码解决方案可能是一个相当具有挑战性的问题。比起定制的软件,您更喜欢现成的解决方案,所以里为大家提供了进销存源码下载资源,让更多的中小型企业从中获益。

收起阅读 »

【报Bug】uni.saveVideoToPhotosAlbum()在app中下载视频到本地相册无效(解决办法)

使用uni.saveImageToPhotosAlbum方法,容量小的视频保存到了相册中, 容量大的就会保存到真机调试的文件夹下:资源管理/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc/uniapp_save
使用uni.saveVideoToPhotosAlbum方法压根到不了相册中

所以我试了一下先用uni.downloadFile,
然后用uni.saveFile,
最后用uni.saveImageToPhotosAlbum(用它是为了用它成功返回的存储路径,给用户提示用的)或者uni.saveVideoToPhotosAlbum(这个成功了只返回ok没有存放路径)就好使了

希望可以帮到大家

具体代码:

uni.downloadFile({  
                url: ‘http://vt1.doubanio.com/201910131716/ff3b54448cd1c56470bfb9ff1451922c/view/movie/M/402300311.mp4’,  
                success: res => {  
                    const { statusCode, tempFilePath } = res  
                    if (statusCode === 200) {   // saveImageToPhotosAlbum  saveVideoToPhotosAlbum  
                        uni.saveFile({  
                             tempFilePath: tempFilePath,  
                             success: data => {  
                                 uni.saveImageToPhotosAlbum({  
                                     filePath: data.savedFilePath,  
                                     success: data => {  
                                         console.log('data----------------->', data)  
                                         that.showToast('下载成功,文件已保存到' + data.path);  
                                     }  
                                 });  

                            },  
                            fail:(errMsg)=>{  
                                uni.showToast({  
                                    mask: true,  
                                    title: '保存失败'  
                                });  
                            },  
                            complete:(errMsg)=>{  

                            }  
                        });           
                    } else {  
                        that.showToast('下载失败');  
                    }  
                },  
                complete:()=>{  

                }  
            })
继续阅读 »

使用uni.saveImageToPhotosAlbum方法,容量小的视频保存到了相册中, 容量大的就会保存到真机调试的文件夹下:资源管理/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc/uniapp_save
使用uni.saveVideoToPhotosAlbum方法压根到不了相册中

所以我试了一下先用uni.downloadFile,
然后用uni.saveFile,
最后用uni.saveImageToPhotosAlbum(用它是为了用它成功返回的存储路径,给用户提示用的)或者uni.saveVideoToPhotosAlbum(这个成功了只返回ok没有存放路径)就好使了

希望可以帮到大家

具体代码:

uni.downloadFile({  
                url: ‘http://vt1.doubanio.com/201910131716/ff3b54448cd1c56470bfb9ff1451922c/view/movie/M/402300311.mp4’,  
                success: res => {  
                    const { statusCode, tempFilePath } = res  
                    if (statusCode === 200) {   // saveImageToPhotosAlbum  saveVideoToPhotosAlbum  
                        uni.saveFile({  
                             tempFilePath: tempFilePath,  
                             success: data => {  
                                 uni.saveImageToPhotosAlbum({  
                                     filePath: data.savedFilePath,  
                                     success: data => {  
                                         console.log('data----------------->', data)  
                                         that.showToast('下载成功,文件已保存到' + data.path);  
                                     }  
                                 });  

                            },  
                            fail:(errMsg)=>{  
                                uni.showToast({  
                                    mask: true,  
                                    title: '保存失败'  
                                });  
                            },  
                            complete:(errMsg)=>{  

                            }  
                        });           
                    } else {  
                        that.showToast('下载失败');  
                    }  
                },  
                complete:()=>{  

                }  
            })
收起阅读 »

uni-swipe-action虚拟机测试,真机测试可以,打包后无反应

swipe

我测试机、模拟器测试都可以,打包后滑动无反应是什么情况?组件已更新,数据正常显示。hb3.3.1,安卓10.

我测试机、模拟器测试都可以,打包后滑动无反应是什么情况?组件已更新,数据正常显示。hb3.3.1,安卓10.

云函数公共模块改叫公共云函数他不香吗?

uniCloud

起名字的时候能考虑一下吗? 能统一规则吗?

起名字的时候能考虑一下吗? 能统一规则吗?

unicloud-db在使用loadtime:manual的情况下,更改where让其立即生效的方法:使用this.$nextTick

uniCloud

如下情况,unicloud-db只显示上次where的数据

this.where = “_id==1”;  
this.$refs.udb.refresh()

如下情况,unicloud-db显示where修改后的数据

this.where = “_id=1”;  
this.$nextTick(() => {  
    this.$refs.udb.refresh()  
})
继续阅读 »

如下情况,unicloud-db只显示上次where的数据

this.where = “_id==1”;  
this.$refs.udb.refresh()

如下情况,unicloud-db显示where修改后的数据

this.where = “_id=1”;  
this.$nextTick(() => {  
    this.$refs.udb.refresh()  
})
收起阅读 »

hx不能智能记录输入过的单词,上下文联想没有,能支持吗

api提示不是那么强没关系,上下文联想才能提高效率

api提示不是那么强没关系,上下文联想才能提高效率

【踩坑】代码结尾不加分号引起的bug

因为idea格式化代码每次都会帮我去掉分号,然后就习惯不写分号了,然后就踩坑了。

如图这种写法的时候不加分号会引起报错:

Unhandled promise rejection TypeError: Cannot set property 'undefined' of undefined

继续阅读 »

因为idea格式化代码每次都会帮我去掉分号,然后就习惯不写分号了,然后就踩坑了。

如图这种写法的时候不加分号会引起报错:

Unhandled promise rejection TypeError: Cannot set property 'undefined' of undefined

收起阅读 »

vue3+ts+vite后台管理模板 支持前后端控制权限,使用uniapp+vue3+ts+elementplus+vite开发

vite vue3

vue3+ts+vite后台管理模板

支持前后端控制权限,使用uniapp+vue3+ts+elementplus+vite开发,码云地址:https://gitee.com/yongqiang0621/uni-admin

github 地址 https://github.com/yongqiang0621/uni-admin

继续阅读 »

vue3+ts+vite后台管理模板

支持前后端控制权限,使用uniapp+vue3+ts+elementplus+vite开发,码云地址:https://gitee.com/yongqiang0621/uni-admin

github 地址 https://github.com/yongqiang0621/uni-admin

收起阅读 »

朋友们:显示器,现在都在用什么样的显示器?

其实显示器一直是个头疼的问题。目前显示器在使用的时候,显示器够高,就不够长。显示器够长,就不够高。
用个40寸~50寸的显示器,尤为明显,显示器尺寸是按照对角线计算的。
因此,如果过长的显示器,发现屏幕高度还不到40厘米。而屏幕高度50厘米~60厘米的显示器,又不够长。
搞多个显示器,使用hbuilder又无法跨屏全屏放大。
爱护眼睛,又不适合把字号调整的太小
我们编程搞开发经常感觉显示器不够用,特别是代码单行比较长的情况下,又不想分行。分行意味着竖向滚动距离更长

因此想咨询和探讨一下,看看大家都在用什么样的显示器?或者有什么样的显示器推荐的?欢迎回帖探讨。

继续阅读 »

其实显示器一直是个头疼的问题。目前显示器在使用的时候,显示器够高,就不够长。显示器够长,就不够高。
用个40寸~50寸的显示器,尤为明显,显示器尺寸是按照对角线计算的。
因此,如果过长的显示器,发现屏幕高度还不到40厘米。而屏幕高度50厘米~60厘米的显示器,又不够长。
搞多个显示器,使用hbuilder又无法跨屏全屏放大。
爱护眼睛,又不适合把字号调整的太小
我们编程搞开发经常感觉显示器不够用,特别是代码单行比较长的情况下,又不想分行。分行意味着竖向滚动距离更长

因此想咨询和探讨一下,看看大家都在用什么样的显示器?或者有什么样的显示器推荐的?欢迎回帖探讨。

收起阅读 »

根据运行环境自定义环境变量

运行环境

本文使用的项目是通过hbuilderX创建的,仅讨论hbuilderX创建项目的自定义环境变量设置,使用cli创建的项目怎么样自定义环境变量,官方文档上有说明。
本文CSDN图文链接uni-app根据运行环境自定义环境变量

需求背景

随着用户使用平台的增多,WEB、H5、微信小程序、钉钉小程序、各种小程序,都需要前端来维护,uniapp一套代码多端应用解决了这个问题,但是又有一个新的问题,
大部分系统部署到生产环境之前,或多或少的要经过:本地开发、测试环境测试、预生产环境测试这几个环节。而且每一步对应的系统参数有可能是不一样的。
官方也给出了一些思路:
运行环境管理

H5或者WEB怎么区分是在测试环境还是在生产环境?
大家都会想到:可以通过process.env.NODE_ENV==='development'区分,

但是怎么区分打包部署在测试环境还是生产环境呢?
自定义环境变量呗,
还好,uniapp可以设置环境变量,我在vue.config.js里面配置个环境变量参数不就解决了。但是HBuilderX创建的项目只能在vue.config.js里添加环境变量,配置.env文件不可以。(使用cli创建的uniapp项目我还没有试过可不可以)

H5是的环境变量应该是解决了。。。但是,每次打包之前都确认和修改一下环境变量参数,是个很烦人的操作。

而且大部分开发者用uni-app,意图绝对不是在写h5页面或者web页面(如果是vue、react不香吗?)。微信小程序差不多和H5使用同样的方法解决,(其他小程序我没有试)。
然而uniapp运行app,发行app的process.env.NODE_ENV 是'product',根本没有development一说,那APP怎么区分这是在本地开发还是生产上线了呢?

解决思路

扩展平台

uniapp技术文档--扩展新的平台
那是不是也可以专门针对测试环境和生产环境扩展一个平台,然后在扩展参数里写一下我的自定义环境变量。
于是乎,我就照着官方例子,扩展了一个WEB平台,参数如下

"h5-web": {  
            "title": "WEB本地开发和测试环境打包",  
            "env": {  
                "UNI_PLATFORM": "h5",  
                "browser": "chrome",  
                "VUE_APP_TITLE": "Hbuilder环境参数配置示例-WEB" // 其他自定义环境变量  
            },  
            "define": {  
                "H5-WEB": true  
            }  
        },

运行和打包都可以使用这个扩展平台了,环境变量的问题也解决了?
但是其他自定义环境变量不生效,被知道为什么,process.env里就是没有(要是有在扩展平台自定义环境变量成功的朋友,能不能告诉我哪里写错了。)
那怎么办?我灵机一动想到了条件编译,于是就有了下面的代码

const is_development = process.env.NODE_ENV === 'development'  
export const config = {  
    CURRENT_MODE: 'dev',  
    BASE_URL: '/dev',  
    ALERT_MSG: '这是H5测试页面,所有数据和业务仅为测试使用,不会产生实际业务影响',  
    MODE_CN: '测试环境H5',  
    CONFIG_PLATFORM: 'DEV_H5',  
    // #ifdef H5-WEB  
    ALERT_MSG: '这是WEB测试页面,所有数据和业务仅为测试使用,不会产生实际业务影响',  
    MODE_CN: '测试环境WEB',  
    CONFIG_PLATFORM: 'DEV_WEB'  
    // #endif  
}

判断AppId

APP自定义环境变量得另想方法了,翻阅了以下参考文档:
基础配置
DCloud appid 用途/作用/使用说明
APP专题 HTML5PULS
HTML5+ API Reference--runtime
想到了一个方法,测试环境和生产环境的appid不能一样,而且appid是可以使用代码获取到的,那是不是可以判断appid,确定是在哪个环境,然后使用不同的环境变量。有了下面的代码

const PRO_APPID = "开发环境appid", // 开发环境appid  
    DEV_APPID = "生产环境appid", // 生产环境appid  
    HB_APPID = "HBuilder"; // HBuilder调试基座  
// puls是app才有的变量  
const APP_ID = plus.runtime.appid;  
// 测试环境的配置  
let config = {  
    BASE_URL: 'http://dev/url',  
    CURRENT_MODE: 'dev',  
    MODE_CN: '测试环境APP'  
}  

// HBuilder调试基座  
if (APP_ID === HB_APPID) {  
    config.ALERT_MSG = "您正在使用HBuilder调试基座,请切换至本系统开发环境调试基座,如有技术问题,请咨询工号124546";  
    config.CONFIG_PLATFORM= 'HBuilder_APP'  
}  
// 开发环境  
if (APP_ID === DEV_APPID) {  
    config.ALERT_MSG = "您正在使用本系统开发环境调试基座,所有数据和业务仅为测试使用,不会产生实际业务影响,如要办理实际业务,请在应用市场下载本app。"  
    config.CONFIG_PLATFORM = 'DEV_APP'  
}  
if (APP_ID === PRO_APPID) {  
    // 生产环境的配置  
    config = {  
        BASE_URL: 'https://product/url',  
        CURRENT_MODE: 'product',  
        CONFIG_PLATFORM: 'APP',  
        MODE_CN: '生产环境APP'  

    }  
}  

export const envConfig = {  
    APP_ID,  
    ...config  
}

注:自定义调试基座的appid为制作自定义调试基座的时候mainfest.json中配置的appid。
在结合
static 目录的条件编译
进行代码优化。
然后又扩展了个平台

"uni-app": {  
        "scripts": {  
            "h5-web": {  
                "title": "WEB本地开发和测试环境打包",  
                "env": {  
                    "UNI_PLATFORM": "h5",  
                    "browser": "chrome",  
                    "VUE_APP_OUTPUT_DIR": "Hbuilder环境参数配置示例-WEB"  
                },  
                "define": {  
                    "H5-WEB": true  
                }  
            },  
            "h5-webpro": {  
                "title": "WEB生产环境打包",  
                "env": {  
                    "UNI_PLATFORM": "h5",  
                    "browser": "chrome",  
                    "VUE_APP_OUTPUT_DIR": "Hbuilder环境参数配置示例-WEB"  
                },  
                "define": {  
                    "H5-WEBPRO": true  
                }  
            },  
            "h5-pro": {  
                "title": "h5生产环境打包",  
                "env": {  
                    "UNI_PLATFORM": "h5",  
                    "browser": "chrome",  
                    "VUE_APP_OUTPUT_DIR": "Hbuilder环境参数配置示例-WEB"  
                },  
                "define": {  
                    "H5-PRO": true  
                }  
            },  
            "mp-weixin-pro": {  
                "title": "微信小程序生产环境打包",  
                "env": {  
                    "UNI_PLATFORM": "mp-weixin",  
                    "VUE_APP_OUTPUT_DIR": "Hbuilder环境参数配置示例-WEB"  
                },  
                "define": {  
                    "MP-WEIXIN-PRO": true  
                }  
            }  
        }  
    }

整理以后的项目地址uniapp环境配置,有需要的可以自行下载测试。

成果检验

扩展平台

H5

本地调试H5测试环境

操作:运行到浏览器

本地调试生产环境H5

操作:运行>>h5生产环境打包

测试环境H5发行部署

操作:发行>>网站-PC WEB或手机H5(仅适用于uni-app)

生产环境H5发行部署

操作:发行>>自定义发行>>h5生产环境打包

web

本地调试测试环境web

操作:运行>>WEB本地开发和测试环境打包

本地调试生产环境web

操作:运行>>WEB生产环境打包

测试环境web发行部署

操作:发行>>自定义发行>>WEB本地开发和测试环境打包

生产环境web发行部署

操作:发行>>自定义发行>>WEB生产环境打包

微信小程序

本地调试测试环境微信小程序

操作:运行到小程序模拟器>>微信开发者工具

本地调试生产环境微信小程序

操作:运行>>微信小程序生产环境打包

测试环境微信小程序发行部署

操作:发行>>小程序微信(仅适用于uni-app)

生产环境微信小程序发行部署

操作:发行>>自定义发行>>微信小程序生产环境打包

判断APPID

APP

使用默认调试基座

操作:运行>运行到手机或模拟器>模拟器(基座选择默认调试基座)

使用自定义调试基座或者使用测试appid打包

自定义调试基座操作:运行>运行到手机或模拟器>模拟器(基座选择自定义调试基座)
测试app:打包流程和app打包流程一致,注意修改mainfest.json文件中的appid。
注:本文测试省事,测试环境和自定义调试基座使用了同一个appid。但是建议自定义调试基座,测试环境,生产环境不要使用同一个appid。

生产环境app打包安装

操作:打包流程和app打包流程一致,注意修改mainfest.json文件中的appid。

项目使用须知

1、请升级Hbuilder到最新版本,要不然可能有些条件编译的样式不生效。
2、请修改\static\app-plus\config.js不同环境的appid为自己项目的
3、运行之前cnpm install 安装一下依赖呦
4、使用cli创建的项目我还没有测试,后面会专门更新一遍cli创建的项目怎么配置环境变量,敬请期待!

继续阅读 »

本文使用的项目是通过hbuilderX创建的,仅讨论hbuilderX创建项目的自定义环境变量设置,使用cli创建的项目怎么样自定义环境变量,官方文档上有说明。
本文CSDN图文链接uni-app根据运行环境自定义环境变量

需求背景

随着用户使用平台的增多,WEB、H5、微信小程序、钉钉小程序、各种小程序,都需要前端来维护,uniapp一套代码多端应用解决了这个问题,但是又有一个新的问题,
大部分系统部署到生产环境之前,或多或少的要经过:本地开发、测试环境测试、预生产环境测试这几个环节。而且每一步对应的系统参数有可能是不一样的。
官方也给出了一些思路:
运行环境管理

H5或者WEB怎么区分是在测试环境还是在生产环境?
大家都会想到:可以通过process.env.NODE_ENV==='development'区分,

但是怎么区分打包部署在测试环境还是生产环境呢?
自定义环境变量呗,
还好,uniapp可以设置环境变量,我在vue.config.js里面配置个环境变量参数不就解决了。但是HBuilderX创建的项目只能在vue.config.js里添加环境变量,配置.env文件不可以。(使用cli创建的uniapp项目我还没有试过可不可以)

H5是的环境变量应该是解决了。。。但是,每次打包之前都确认和修改一下环境变量参数,是个很烦人的操作。

而且大部分开发者用uni-app,意图绝对不是在写h5页面或者web页面(如果是vue、react不香吗?)。微信小程序差不多和H5使用同样的方法解决,(其他小程序我没有试)。
然而uniapp运行app,发行app的process.env.NODE_ENV 是'product',根本没有development一说,那APP怎么区分这是在本地开发还是生产上线了呢?

解决思路

扩展平台

uniapp技术文档--扩展新的平台
那是不是也可以专门针对测试环境和生产环境扩展一个平台,然后在扩展参数里写一下我的自定义环境变量。
于是乎,我就照着官方例子,扩展了一个WEB平台,参数如下

"h5-web": {  
            "title": "WEB本地开发和测试环境打包",  
            "env": {  
                "UNI_PLATFORM": "h5",  
                "browser": "chrome",  
                "VUE_APP_TITLE": "Hbuilder环境参数配置示例-WEB" // 其他自定义环境变量  
            },  
            "define": {  
                "H5-WEB": true  
            }  
        },

运行和打包都可以使用这个扩展平台了,环境变量的问题也解决了?
但是其他自定义环境变量不生效,被知道为什么,process.env里就是没有(要是有在扩展平台自定义环境变量成功的朋友,能不能告诉我哪里写错了。)
那怎么办?我灵机一动想到了条件编译,于是就有了下面的代码

const is_development = process.env.NODE_ENV === 'development'  
export const config = {  
    CURRENT_MODE: 'dev',  
    BASE_URL: '/dev',  
    ALERT_MSG: '这是H5测试页面,所有数据和业务仅为测试使用,不会产生实际业务影响',  
    MODE_CN: '测试环境H5',  
    CONFIG_PLATFORM: 'DEV_H5',  
    // #ifdef H5-WEB  
    ALERT_MSG: '这是WEB测试页面,所有数据和业务仅为测试使用,不会产生实际业务影响',  
    MODE_CN: '测试环境WEB',  
    CONFIG_PLATFORM: 'DEV_WEB'  
    // #endif  
}

判断AppId

APP自定义环境变量得另想方法了,翻阅了以下参考文档:
基础配置
DCloud appid 用途/作用/使用说明
APP专题 HTML5PULS
HTML5+ API Reference--runtime
想到了一个方法,测试环境和生产环境的appid不能一样,而且appid是可以使用代码获取到的,那是不是可以判断appid,确定是在哪个环境,然后使用不同的环境变量。有了下面的代码

const PRO_APPID = "开发环境appid", // 开发环境appid  
    DEV_APPID = "生产环境appid", // 生产环境appid  
    HB_APPID = "HBuilder"; // HBuilder调试基座  
// puls是app才有的变量  
const APP_ID = plus.runtime.appid;  
// 测试环境的配置  
let config = {  
    BASE_URL: 'http://dev/url',  
    CURRENT_MODE: 'dev',  
    MODE_CN: '测试环境APP'  
}  

// HBuilder调试基座  
if (APP_ID === HB_APPID) {  
    config.ALERT_MSG = "您正在使用HBuilder调试基座,请切换至本系统开发环境调试基座,如有技术问题,请咨询工号124546";  
    config.CONFIG_PLATFORM= 'HBuilder_APP'  
}  
// 开发环境  
if (APP_ID === DEV_APPID) {  
    config.ALERT_MSG = "您正在使用本系统开发环境调试基座,所有数据和业务仅为测试使用,不会产生实际业务影响,如要办理实际业务,请在应用市场下载本app。"  
    config.CONFIG_PLATFORM = 'DEV_APP'  
}  
if (APP_ID === PRO_APPID) {  
    // 生产环境的配置  
    config = {  
        BASE_URL: 'https://product/url',  
        CURRENT_MODE: 'product',  
        CONFIG_PLATFORM: 'APP',  
        MODE_CN: '生产环境APP'  

    }  
}  

export const envConfig = {  
    APP_ID,  
    ...config  
}

注:自定义调试基座的appid为制作自定义调试基座的时候mainfest.json中配置的appid。
在结合
static 目录的条件编译
进行代码优化。
然后又扩展了个平台

"uni-app": {  
        "scripts": {  
            "h5-web": {  
                "title": "WEB本地开发和测试环境打包",  
                "env": {  
                    "UNI_PLATFORM": "h5",  
                    "browser": "chrome",  
                    "VUE_APP_OUTPUT_DIR": "Hbuilder环境参数配置示例-WEB"  
                },  
                "define": {  
                    "H5-WEB": true  
                }  
            },  
            "h5-webpro": {  
                "title": "WEB生产环境打包",  
                "env": {  
                    "UNI_PLATFORM": "h5",  
                    "browser": "chrome",  
                    "VUE_APP_OUTPUT_DIR": "Hbuilder环境参数配置示例-WEB"  
                },  
                "define": {  
                    "H5-WEBPRO": true  
                }  
            },  
            "h5-pro": {  
                "title": "h5生产环境打包",  
                "env": {  
                    "UNI_PLATFORM": "h5",  
                    "browser": "chrome",  
                    "VUE_APP_OUTPUT_DIR": "Hbuilder环境参数配置示例-WEB"  
                },  
                "define": {  
                    "H5-PRO": true  
                }  
            },  
            "mp-weixin-pro": {  
                "title": "微信小程序生产环境打包",  
                "env": {  
                    "UNI_PLATFORM": "mp-weixin",  
                    "VUE_APP_OUTPUT_DIR": "Hbuilder环境参数配置示例-WEB"  
                },  
                "define": {  
                    "MP-WEIXIN-PRO": true  
                }  
            }  
        }  
    }

整理以后的项目地址uniapp环境配置,有需要的可以自行下载测试。

成果检验

扩展平台

H5

本地调试H5测试环境

操作:运行到浏览器

本地调试生产环境H5

操作:运行>>h5生产环境打包

测试环境H5发行部署

操作:发行>>网站-PC WEB或手机H5(仅适用于uni-app)

生产环境H5发行部署

操作:发行>>自定义发行>>h5生产环境打包

web

本地调试测试环境web

操作:运行>>WEB本地开发和测试环境打包

本地调试生产环境web

操作:运行>>WEB生产环境打包

测试环境web发行部署

操作:发行>>自定义发行>>WEB本地开发和测试环境打包

生产环境web发行部署

操作:发行>>自定义发行>>WEB生产环境打包

微信小程序

本地调试测试环境微信小程序

操作:运行到小程序模拟器>>微信开发者工具

本地调试生产环境微信小程序

操作:运行>>微信小程序生产环境打包

测试环境微信小程序发行部署

操作:发行>>小程序微信(仅适用于uni-app)

生产环境微信小程序发行部署

操作:发行>>自定义发行>>微信小程序生产环境打包

判断APPID

APP

使用默认调试基座

操作:运行>运行到手机或模拟器>模拟器(基座选择默认调试基座)

使用自定义调试基座或者使用测试appid打包

自定义调试基座操作:运行>运行到手机或模拟器>模拟器(基座选择自定义调试基座)
测试app:打包流程和app打包流程一致,注意修改mainfest.json文件中的appid。
注:本文测试省事,测试环境和自定义调试基座使用了同一个appid。但是建议自定义调试基座,测试环境,生产环境不要使用同一个appid。

生产环境app打包安装

操作:打包流程和app打包流程一致,注意修改mainfest.json文件中的appid。

项目使用须知

1、请升级Hbuilder到最新版本,要不然可能有些条件编译的样式不生效。
2、请修改\static\app-plus\config.js不同环境的appid为自己项目的
3、运行之前cnpm install 安装一下依赖呦
4、使用cli创建的项目我还没有测试,后面会专门更新一遍cli创建的项目怎么配置环境变量,敬请期待!

收起阅读 »

Android 离线打包白屏可能

Android白屏

引入的时候你把所有的权限都移除了,android.permission.ACCESS_NETWORK_STATE 该权限是必须的。

引入的时候你把所有的权限都移除了,android.permission.ACCESS_NETWORK_STATE 该权限是必须的。

关于VIVO总是无法通过的问题分享如下

vivo

遇到了这个问题,大家应该都差不多,在几大平台包括IOS和华为都能正常通过的,到了VIVO就是通不过。

文档中的说明,例如,设备信息和存储权限可以通过配置设置开启应用时不申请,但并没有说明使用时会自动弹出授权。
最后还是自己试过才知道也可以正常使用,要不然一直以为启动时禁止申请权限后会不能使用。

1、所以,配置了隐私政策弹出框之后,禁止一切权限在启动时申请,进入相关功能页时再启动,这一步就能过关。
2、接下来隐私政策要弄好,诸如有些说明可能因为内容太多,审核人员并没有看见(如我明明写了关于一些隐私权限的说明,但审核人员没看到就说没有),这个是小事,下次提交的时候备注里注明一下。
3、推送消息功能,这个一定要做一个开关,能让用户主动关闭。

其它遇到的问题,大家补充即可。

继续阅读 »

遇到了这个问题,大家应该都差不多,在几大平台包括IOS和华为都能正常通过的,到了VIVO就是通不过。

文档中的说明,例如,设备信息和存储权限可以通过配置设置开启应用时不申请,但并没有说明使用时会自动弹出授权。
最后还是自己试过才知道也可以正常使用,要不然一直以为启动时禁止申请权限后会不能使用。

1、所以,配置了隐私政策弹出框之后,禁止一切权限在启动时申请,进入相关功能页时再启动,这一步就能过关。
2、接下来隐私政策要弄好,诸如有些说明可能因为内容太多,审核人员并没有看见(如我明明写了关于一些隐私权限的说明,但审核人员没看到就说没有),这个是小事,下次提交的时候备注里注明一下。
3、推送消息功能,这个一定要做一个开关,能让用户主动关闭。

其它遇到的问题,大家补充即可。

收起阅读 »