diff --git a/wuye-manager-uniapp/App.vue b/wuye-manager-uniapp/App.vue index 41e2a0f..a32f3e8 100644 --- a/wuye-manager-uniapp/App.vue +++ b/wuye-manager-uniapp/App.vue @@ -1,15 +1,26 @@ + diff --git a/wuye-manager-uniapp/uni.scss b/wuye-manager-uniapp/uni.scss index b9249e9..5dab0c6 100644 --- a/wuye-manager-uniapp/uni.scss +++ b/wuye-manager-uniapp/uni.scss @@ -1,3 +1,4 @@ +@import "@/uni_modules/uview-plus/theme.scss"; /** * 这里是uni-app内置的常用样式变量 * diff --git a/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/index.js b/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/index.js new file mode 100644 index 0000000..13153b1 --- /dev/null +++ b/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/index.js @@ -0,0 +1,14 @@ +'use strict'; +const uniPush = uniCloud.getPushManager({ + appId: "__UNI__5F224F3" +}) + +exports.main = async (event, context) => { + const res = await uniPush.sendMessage({ + push_clientid: event.cid, + title: "通知标题", + content: "通知内容", + force_notification: true + }) + return res +} diff --git a/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/package.json b/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/package.json new file mode 100644 index 0000000..152a8f7 --- /dev/null +++ b/wuye-manager-uniapp/uniCloud-aliyun/cloudfunctions/push-send-butler/package.json @@ -0,0 +1,8 @@ +{ + "name": "push-send-butler", + "dependencies": {}, + "extensions": { + "uni-cloud-jql": {}, + "uni-cloud-push": {} + } +} \ No newline at end of file diff --git a/wuye-manager-uniapp/uniCloud-aliyun/database/JQL查询.jql b/wuye-manager-uniapp/uniCloud-aliyun/database/JQL查询.jql new file mode 100644 index 0000000..35d21de --- /dev/null +++ b/wuye-manager-uniapp/uniCloud-aliyun/database/JQL查询.jql @@ -0,0 +1,12 @@ +// 本文件用于,使用JQL语法操作项目关联的uniCloud空间的数据库,方便开发调试和远程数据库管理 +// 编写clientDB的js API(也支持常规js语法,比如var),可以对云数据库进行增删改查操作。不支持uniCloud-db组件写法 +// 可以全部运行,也可以选中部分代码运行。点击工具栏上的运行按钮或者按下【F5】键运行代码 +// 如果文档中存在多条JQL语句,只有最后一条语句生效 +// 如果混写了普通js,最后一条语句需是数据库操作语句 +// 此处代码运行不受DB Schema的权限控制,移植代码到实际业务中注意在schema中配好permission +// 不支持clientDB的action +// 数据库查询有最大返回条数限制,详见:https://uniapp.dcloud.net.cn/uniCloud/cf-database.html#limit +// 详细JQL语法,请参考:https://uniapp.dcloud.net.cn/uniCloud/jql.html + +// 下面示例查询uni-id-users表的所有数据 +db.collection('uni-id-users').get(); diff --git a/wuye-manager-uniapp/uni_modules/uni-config-center/changelog.md b/wuye-manager-uniapp/uni_modules/uni-config-center/changelog.md new file mode 100644 index 0000000..57dbcb5 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uni-config-center/changelog.md @@ -0,0 +1,6 @@ +## 0.0.3(2022-11-11) +- 修复 config 方法获取根节点为数组格式配置时错误的转化为了对象的Bug +## 0.0.2(2021-04-16) +- 修改插件package信息 +## 0.0.1(2021-03-15) +- 初始化项目 diff --git a/wuye-manager-uniapp/uni_modules/uni-config-center/package.json b/wuye-manager-uniapp/uni_modules/uni-config-center/package.json new file mode 100644 index 0000000..bace866 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uni-config-center/package.json @@ -0,0 +1,81 @@ +{ + "id": "uni-config-center", + "displayName": "uni-config-center", + "version": "0.0.3", + "description": "uniCloud 配置中心", + "keywords": [ + "配置", + "配置中心" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "type": "unicloud-template-function" + }, + "directories": { + "example": "../../../scripts/dist" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "u", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "u", + "Android Browser": "u", + "微信浏览器(Android)": "u", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "u" + } + } + } + } +} diff --git a/wuye-manager-uniapp/uni_modules/uni-config-center/readme.md b/wuye-manager-uniapp/uni_modules/uni-config-center/readme.md new file mode 100644 index 0000000..03f7fc2 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uni-config-center/readme.md @@ -0,0 +1,93 @@ +# 为什么使用uni-config-center + +实际开发中很多插件需要配置文件才可以正常运行,如果每个插件都单独进行配置的话就会产生下面这样的目录结构 + +```bash +cloudfunctions +└─────common 公共模块 + ├─plugin-a // 插件A对应的目录 + │ ├─index.js + │ ├─config.json // plugin-a对应的配置文件 + │ └─other-file.cert // plugin-a依赖的其他文件 + └─plugin-b // plugin-b对应的目录 + ├─index.js + └─config.json // plugin-b对应的配置文件 +``` + +假设插件作者要发布一个项目模板,里面使用了很多需要配置的插件,无论是作者发布还是用户使用都是一个大麻烦。 + +uni-config-center就是用了统一管理这些配置文件的,使用uni-config-center后的目录结构如下 + +```bash +cloudfunctions +└─────common 公共模块 + ├─plugin-a // 插件A对应的目录 + │ └─index.js + ├─plugin-b // plugin-b对应的目录 + │ └─index.js + └─uni-config-center + ├─index.js // config-center入口文件 + ├─plugin-a + │ ├─config.json // plugin-a对应的配置文件 + │ └─other-file.cert // plugin-a依赖的其他文件 + └─plugin-b + └─config.json // plugin-b对应的配置文件 +``` + +使用uni-config-center后的优势 + +- 配置文件统一管理,分离插件主体和配置信息,更新插件更方便 +- 支持对config.json设置schema,插件使用者在HBuilderX内编写config.json文件时会有更好的提示(后续HBuilderX会提供支持) + +# 用法 + +在要使用uni-config-center的公共模块或云函数内引入uni-config-center依赖,请参考:[使用公共模块](https://uniapp.dcloud.net.cn/uniCloud/cf-common) + +```js +const createConfig = require('uni-config-center') + +const uniIdConfig = createConfig({ + pluginId: 'uni-id', // 插件id + defaultConfig: { // 默认配置 + tokenExpiresIn: 7200, + tokenExpiresThreshold: 600, + }, + customMerge: function(defaultConfig, userConfig) { // 自定义默认配置和用户配置的合并规则,不设置的情况侠会对默认配置和用户配置进行深度合并 + // defaudltConfig 默认配置 + // userConfig 用户配置 + return Object.assign(defaultConfig, userConfig) + } +}) + + +// 以如下配置为例 +// { +// "tokenExpiresIn": 7200, +// "passwordErrorLimit": 6, +// "bindTokenToDevice": false, +// "passwordErrorRetryTime": 3600, +// "app-plus": { +// "tokenExpiresIn": 2592000 +// }, +// "service": { +// "sms": { +// "codeExpiresIn": 300 +// } +// } +// } + +// 获取配置 +uniIdConfig.config() // 获取全部配置,注意:uni-config-center内不存在对应插件目录时会返回空对象 +uniIdConfig.config('tokenExpiresIn') // 指定键值获取配置,返回:7200 +uniIdConfig.config('service.sms.codeExpiresIn') // 指定键值获取配置,返回:300 +uniIdConfig.config('tokenExpiresThreshold', 600) // 指定键值获取配置,如果不存在则取传入的默认值,返回:600 + +// 获取文件绝对路径 +uniIdConfig.resolve('custom-token.js') // 获取uni-config-center/uni-id/custom-token.js文件的路径 + +// 引用文件(require) +uniIDConfig.requireFile('custom-token.js') // 使用require方式引用uni-config-center/uni-id/custom-token.js文件。文件不存在时返回undefined,文件内有其他错误导致require失败时会抛出错误。 + +// 判断是否包含某文件 +uniIDConfig.hasFile('custom-token.js') // 配置目录是否包含某文件,true: 文件存在,false: 文件不存在 +``` \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js b/wuye-manager-uniapp/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js new file mode 100644 index 0000000..00ba62f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js @@ -0,0 +1 @@ +"use strict";var t=require("fs"),r=require("path");function e(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var n=e(t),o=e(r),i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var u=function(t){var r={exports:{}};return t(r,r.exports),r.exports}((function(t,r){var e="__lodash_hash_undefined__",n=9007199254740991,o="[object Arguments]",u="[object Function]",c="[object Object]",a=/^\[object .+?Constructor\]$/,f=/^(?:0|[1-9]\d*)$/,s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s[o]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s[u]=s["[object Map]"]=s["[object Number]"]=s[c]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1;var l="object"==typeof i&&i&&i.Object===Object&&i,h="object"==typeof self&&self&&self.Object===Object&&self,p=l||h||Function("return this")(),_=r&&!r.nodeType&&r,v=_&&t&&!t.nodeType&&t,d=v&&v.exports===_,y=d&&l.process,g=function(){try{var t=v&&v.require&&v.require("util").types;return t||y&&y.binding&&y.binding("util")}catch(t){}}(),b=g&&g.isTypedArray;function j(t,r,e){switch(e.length){case 0:return t.call(r);case 1:return t.call(r,e[0]);case 2:return t.call(r,e[0],e[1]);case 3:return t.call(r,e[0],e[1],e[2])}return t.apply(r,e)}var w,O,m,A=Array.prototype,z=Function.prototype,M=Object.prototype,x=p["__core-js_shared__"],C=z.toString,F=M.hasOwnProperty,U=(w=/[^.]+$/.exec(x&&x.keys&&x.keys.IE_PROTO||""))?"Symbol(src)_1."+w:"",S=M.toString,I=C.call(Object),P=RegExp("^"+C.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),T=d?p.Buffer:void 0,q=p.Symbol,E=p.Uint8Array,$=T?T.allocUnsafe:void 0,D=(O=Object.getPrototypeOf,m=Object,function(t){return O(m(t))}),k=Object.create,B=M.propertyIsEnumerable,N=A.splice,L=q?q.toStringTag:void 0,R=function(){try{var t=vt(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),G=T?T.isBuffer:void 0,V=Math.max,W=Date.now,H=vt(p,"Map"),J=vt(Object,"create"),K=function(){function t(){}return function(r){if(!xt(r))return{};if(k)return k(r);t.prototype=r;var e=new t;return t.prototype=void 0,e}}();function Q(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1},X.prototype.set=function(t,r){var e=this.__data__,n=nt(e,t);return n<0?(++this.size,e.push([t,r])):e[n][1]=r,this},Y.prototype.clear=function(){this.size=0,this.__data__={hash:new Q,map:new(H||X),string:new Q}},Y.prototype.delete=function(t){var r=_t(this,t).delete(t);return this.size-=r?1:0,r},Y.prototype.get=function(t){return _t(this,t).get(t)},Y.prototype.has=function(t){return _t(this,t).has(t)},Y.prototype.set=function(t,r){var e=_t(this,t),n=e.size;return e.set(t,r),this.size+=e.size==n?0:1,this},Z.prototype.clear=function(){this.__data__=new X,this.size=0},Z.prototype.delete=function(t){var r=this.__data__,e=r.delete(t);return this.size=r.size,e},Z.prototype.get=function(t){return this.__data__.get(t)},Z.prototype.has=function(t){return this.__data__.has(t)},Z.prototype.set=function(t,r){var e=this.__data__;if(e instanceof X){var n=e.__data__;if(!H||n.length<199)return n.push([t,r]),this.size=++e.size,this;e=this.__data__=new Y(n)}return e.set(t,r),this.size=e.size,this};var it,ut=function(t,r,e){for(var n=-1,o=Object(t),i=e(t),u=i.length;u--;){var c=i[it?u:++n];if(!1===r(o[c],c,o))break}return t};function ct(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":L&&L in Object(t)?function(t){var r=F.call(t,L),e=t[L];try{t[L]=void 0;var n=!0}catch(t){}var o=S.call(t);n&&(r?t[L]=e:delete t[L]);return o}(t):function(t){return S.call(t)}(t)}function at(t){return Ct(t)&&ct(t)==o}function ft(t){return!(!xt(t)||function(t){return!!U&&U in t}(t))&&(zt(t)?P:a).test(function(t){if(null!=t){try{return C.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t))}function st(t){if(!xt(t))return function(t){var r=[];if(null!=t)for(var e in Object(t))r.push(e);return r}(t);var r=yt(t),e=[];for(var n in t)("constructor"!=n||!r&&F.call(t,n))&&e.push(n);return e}function lt(t,r,e,n,o){t!==r&&ut(r,(function(i,u){if(o||(o=new Z),xt(i))!function(t,r,e,n,o,i,u){var a=gt(t,e),f=gt(r,e),s=u.get(f);if(s)return void rt(t,e,s);var l=i?i(a,f,e+"",t,r,u):void 0,h=void 0===l;if(h){var p=Ot(f),_=!p&&At(f),v=!p&&!_&&Ft(f);l=f,p||_||v?Ot(a)?l=a:Ct(j=a)&&mt(j)?l=function(t,r){var e=-1,n=t.length;r||(r=Array(n));for(;++e-1&&t%1==0&&t0){if(++r>=800)return arguments[0]}else r=0;return t.apply(void 0,arguments)}}(pt);function jt(t,r){return t===r||t!=t&&r!=r}var wt=at(function(){return arguments}())?at:function(t){return Ct(t)&&F.call(t,"callee")&&!B.call(t,"callee")},Ot=Array.isArray;function mt(t){return null!=t&&Mt(t.length)&&!zt(t)}var At=G||function(){return!1};function zt(t){if(!xt(t))return!1;var r=ct(t);return r==u||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r}function Mt(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=n}function xt(t){var r=typeof t;return null!=t&&("object"==r||"function"==r)}function Ct(t){return null!=t&&"object"==typeof t}var Ft=b?function(t){return function(r){return t(r)}}(b):function(t){return Ct(t)&&Mt(t.length)&&!!s[ct(t)]};function Ut(t){return mt(t)?tt(t,!0):st(t)}var St,It=(St=function(t,r,e){lt(t,r,e)},ht((function(t,r){var e=-1,n=r.length,o=n>1?r[n-1]:void 0,i=n>2?r[2]:void 0;for(o=St.length>3&&"function"==typeof o?(n--,o):void 0,i&&function(t,r,e){if(!xt(e))return!1;var n=typeof r;return!!("number"==n?mt(e)&&dt(r,e.length):"string"==n&&r in e)&&jt(e[r],t)}(r[0],r[1],i)&&(o=n<3?void 0:o,n=1),t=Object(t);++ec.call(t,r);class f{constructor({pluginId:t,defaultConfig:r={},customMerge:e,root:n}){this.pluginId=t,this.defaultConfig=r,this.pluginConfigPath=o.default.resolve(n||__dirname,t),this.customMerge=e,this._config=void 0}resolve(t){return o.default.resolve(this.pluginConfigPath,t)}hasFile(t){return n.default.existsSync(this.resolve(t))}requireFile(t){try{return require(this.resolve(t))}catch(t){if("MODULE_NOT_FOUND"===t.code)return;throw t}}_getUserConfig(){return this.requireFile("config.json")}config(t,r){if(!this._config){const t=this._getUserConfig();this._config=Array.isArray(t)?t:(this.customMerge||u)(this.defaultConfig,t)}let e=this._config;return t?function(t,r,e){if("number"==typeof r)return t[r];if("symbol"==typeof r)return a(t,r)?t[r]:e;const n="string"!=typeof(o=r)?o:o.split(".").reduce(((t,r)=>(r.split(/\[([^}]+)\]/g).forEach((r=>r&&t.push(r))),t)),[]);var o;let i=t;for(let t=0;tparseInt(e)):void 0}function o(e,n){const i=r(e),t=r(n);return i?t?function(e,n){const i=Math.max(e.length,n.length);for(let t=0;tr)return 1;if(i=e)throw new Error("Config error, tokenExpiresThreshold should be less than tokenExpiresIn");n>e/2&&console.warn(`Please check whether the tokenExpiresThreshold configuration is set too large, tokenExpiresThreshold: ${n}, tokenExpiresIn: ${e}`)}get customToken(){return this.uniId.interceptorMap.get("customToken")}isTokenInDb(e){return o(e,"1.0.10")>=0}async getUserRecord(){if(this.userRecord)return this.userRecord;const e=await C.doc(this.uid).get();if(this.userRecord=e.data[0],!this.userRecord)throw{errCode:i.ACCOUNT_NOT_EXISTS};switch(this.userRecord.status){case void 0:case 0:break;case 1:throw{errCode:i.ACCOUNT_BANNED};case 2:throw{errCode:i.ACCOUNT_AUDITING};case 3:throw{errCode:i.ACCOUNT_AUDIT_FAILED};case 4:throw{errCode:i.ACCOUNT_CLOSED}}if(this.oldTokenPayload){if(this.isTokenInDb(this.oldTokenPayload.uniIdVersion)){if(-1===(this.userRecord.token||[]).indexOf(this.oldToken))throw{errCode:i.CHECK_TOKEN_FAILED}}if(this.userRecord.valid_token_date&&this.userRecord.valid_token_date>1e3*this.oldTokenPayload.iat)throw{errCode:i.TOKEN_EXPIRED}}return this.userRecord}async updateUserRecord(e){await C.doc(this.uid).update(e)}async getUserPermission(){if(this.userPermission)return this.userPermission;const e=(await this.getUserRecord()).role||[];if(0===e.length)return this.userPermission={role:[],permission:[]},this.userPermission;if(e.includes("admin"))return this.userPermission={role:e,permission:[]},this.userPermission;const n=await T.where({role_id:I.in(e)}).get(),i=(t=n.data.reduce((e,n)=>(n.permission&&e.push(...n.permission),e),[]),Array.from(new Set(t)));var t;return this.userPermission={role:e,permission:i},this.userPermission}async _createToken({uid:e,role:n,permission:t}={}){if(!n||!t){const e=await this.getUserPermission();n=e.role,t=e.permission}let r={uid:e,role:n,permission:t};if(this.uniId.interceptorMap.has("customToken")){const i=this.uniId.interceptorMap.get("customToken");if("function"!=typeof i)throw new Error("Invalid custom token file");r=await i({uid:e,role:n,permission:t})}const o=Date.now(),{tokenSecret:s,tokenExpiresIn:c,maxTokenLength:a=10}=this.config,u=g({...r,uniIdVersion:"1.0.19"},s,{expiresIn:c}),d=await this.getUserRecord(),l=(d.token||[]).filter(e=>{try{const n=this._checkToken(e);if(d.valid_token_date&&d.valid_token_date>1e3*n.iat)return!1}catch(e){if(e.errCode===i.TOKEN_EXPIRED)return!1}return!0});return l.push(u),l.length>a&&l.splice(0,l.length-a),await this.updateUserRecord({last_login_ip:this.clientInfo.clientIP,last_login_date:o,token:l}),{token:u,tokenExpired:o+1e3*c}}async createToken({uid:e,role:n,permission:t}={}){if(!e)throw{errCode:i.PARAM_REQUIRED,errMsgValue:{param:"uid"}};this.uid=e;const{token:r,tokenExpired:o}=await this._createToken({uid:e,role:n,permission:t});return{errCode:0,token:r,tokenExpired:o}}async refreshToken({token:e}={}){if(!e)throw{errCode:i.PARAM_REQUIRED,errMsgValue:{param:"token"}};this.oldToken=e;const n=this._checkToken(e);this.uid=n.uid,this.oldTokenPayload=n;const{uid:t}=n,{role:r,permission:o}=await this.getUserPermission(),{token:s,tokenExpired:c}=await this._createToken({uid:t,role:r,permission:o});return{errCode:0,token:s,tokenExpired:c}}_checkToken(e){const{tokenSecret:n}=this.config;let t;try{t=k(e,n)}catch(e){if("TokenExpiredError"===e.name)throw{errCode:i.TOKEN_EXPIRED};throw{errCode:i.CHECK_TOKEN_FAILED}}return t}async checkToken(e,{autoRefresh:n=!0}={}){if(!e)throw{errCode:i.CHECK_TOKEN_FAILED};this.oldToken=e;const t=this._checkToken(e);this.uid=t.uid,this.oldTokenPayload=t;const{tokenExpiresThreshold:r}=this.config,{uid:o,role:s,permission:c}=t,a={role:s,permission:c};if(!s&&!c){const{role:e,permission:n}=await this.getUserPermission();a.role=e,a.permission=n}if(!r||!n){const e={code:0,errCode:0,...t,...a};return delete e.uniIdVersion,e}const u=Date.now();let d={};1e3*t.exp-u<1e3*r&&(d=await this._createToken({uid:o}));const l={code:0,errCode:0,...t,...a,...d};return delete l.uniIdVersion,l}}var E=Object.freeze({__proto__:null,checkToken:async function(e,{autoRefresh:n=!0}={}){return new m({uniId:this}).checkToken(e,{autoRefresh:n})},createToken:async function({uid:e,role:n,permission:i}={}){return new m({uniId:this}).createToken({uid:e,role:n,permission:i})},refreshToken:async function({token:e}={}){return new m({uniId:this}).refreshToken({token:e})}});const w=require("uni-config-center")({pluginId:"uni-id"});class x{constructor({context:e,clientInfo:n,config:i}={}){this._clientInfo=e?function(e){return{appId:e.APPID,platform:e.PLATFORM,locale:e.LOCALE,clientIP:e.CLIENTIP,deviceId:e.DEVICEID}}(e):n,this._config=i,this.config=this._getOriginConfig(),this.interceptorMap=new Map,w.hasFile("custom-token.js")&&this.setInterceptor("customToken",require(w.resolve("custom-token.js")));this._i18n=uniCloud.initI18n({locale:this._clientInfo.locale,fallbackLocale:"zh-Hans",messages:JSON.parse(JSON.stringify(d))}),d[this._i18n.locale]||this._i18n.setLocale("zh-Hans")}setInterceptor(e,n){this.interceptorMap.set(e,n)}_t(...e){return this._i18n.t(...e)}_parseOriginConfig(e){return Array.isArray(e)?e:e[0]?Object.values(e):e}_getOriginConfig(){if(this._config)return this._config;if(w.hasFile("config.json")){let e;try{e=w.config()}catch(e){throw new Error("Invalid uni-id config file\n"+e.message)}return this._parseOriginConfig(e)}try{return this._parseOriginConfig(require("uni-id/config.json"))}catch(e){throw new Error("Invalid uni-id config file")}}_getAppConfig(){const e=this._getOriginConfig();return Array.isArray(e)?e.find(e=>e.dcloudAppid===this._clientInfo.appId)||e.find(e=>e.isDefaultConfig):e}_getPlatformConfig(){const e=this._getAppConfig();if(!e)throw new Error(`Config for current app (${this._clientInfo.appId}) was not found, please check your config file or client appId`);let n;switch(["app-plus","app-android","app-ios"].indexOf(this._clientInfo.platform)>-1&&(this._clientInfo.platform="app"),"h5"===this._clientInfo.platform&&(this._clientInfo.platform="web"),this._clientInfo.platform){case"web":n="h5";break;case"app":n="app-plus"}const i=[{tokenExpiresIn:7200,tokenExpiresThreshold:1200,passwordErrorLimit:6,passwordErrorRetryTime:3600},e];n&&e[n]&&i.push(e[n]),i.push(e[this._clientInfo.platform]);const t=Object.assign(...i);return["tokenSecret","tokenExpiresIn"].forEach(e=>{if(!t||!t[e])throw new Error(`Config parameter missing, ${e} is required, please check your config file uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json`)}),t}_getConfig(){return this._getPlatformConfig()}}for(const e in E)x.prototype[e]=E[e];function y(e){const n=new x(e);return new Proxy(n,{get(e,n){if(n in e&&0!==n.indexOf("_")){if("function"==typeof e[n])return(i=e[n],function(){let e;try{e=i.apply(this,arguments)}catch(e){if(a(e))return c.call(this,e),e;throw e}return t(e)?e.then(e=>(a(e)&&c.call(this,e),e),e=>{if(a(e))return c.call(this,e),e;throw e}):(a(e)&&c.call(this,e),e)}).bind(e);if("context"!==n&&"config"!==n)return e[n]}var i}})}x.prototype.createInstance=y;const O={createInstance:y};module.exports=O; diff --git a/wuye-manager-uniapp/uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/package.json b/wuye-manager-uniapp/uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/package.json new file mode 100644 index 0000000..37b425a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uni-id-common/uniCloud/cloudfunctions/common/uni-id-common/package.json @@ -0,0 +1,20 @@ +{ + "name": "uni-id-common", + "version": "1.0.19", + "description": "uni-id token生成、校验、刷新", + "main": "index.js", + "homepage": "https:\/\/uniapp.dcloud.io\/uniCloud\/uni-id-common.html", + "repository": { + "type": "git", + "url": "git+https:\/\/gitee.com\/dcloud\/uni-id-common.git" + }, + "author": "DCloud", + "license": "Apache-2.0", + "dependencies": { + "uni-config-center": "file:..\/..\/..\/..\/..\/uni-config-center\/uniCloud\/cloudfunctions\/common\/uni-config-center" + }, + "origin-plugin-dev-name": "uni-id-common", + "origin-plugin-version": "1.0.19", + "plugin-dev-name": "uni-id-common", + "plugin-version": "1.0.19" +} \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/LICENSE b/wuye-manager-uniapp/uni_modules/uview-plus/LICENSE new file mode 100644 index 0000000..c0ffd3e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 https://uiadmin.net/uview-plus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/README.md b/wuye-manager-uniapp/uni_modules/uview-plus/README.md new file mode 100644 index 0000000..3594d52 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/README.md @@ -0,0 +1,90 @@ +

+ logo +

+

uview-plus 3.0

+

多平台快速开发的UI框架

+ +[![stars](https://img.shields.io/github/stars/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus) +[![forks](https://img.shields.io/github/forks/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus) +[![issues](https://img.shields.io/github/issues/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus/issues) +[![release](https://img.shields.io/github/v/release/ijry/uview-plus?style=flat-square)](https://gitee.com/jry/uview-plus/releases) +[![license](https://img.shields.io/github/license/ijry/uview-plus?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License) + +## 说明 + +【文档有广告,不喜勿入谢谢】 + +uview-plus,是uni-app全面兼容vue3/nvue/鸿蒙/uni-app-x(已经发布https://ext.dcloud.net.cn/plugin?name=uview-ultra)的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水。uview-plus是基于uView2.x移植的支持vue3的版本,感谢uView。 + +## 版本 + +### uview-plus v3 (uni-app版本) +1. 保持选项式API,尽可能兼容原有uview2各种API,比如mixins,方便大家升级更容易; +2. 新手友好,保持原汁原味js,二次开发方便,未使用typescript重写,但带有独立的类型申明包; + +### uview-ultra v4 (uni-app-x版本) +1. 尽可能保持原有组件的API一致,方便大家升级; +2. 使用uts + 组合式API架构级全新重构,但仍然保持源码的简易,不封装过于复杂,便于修改。 + +## 可视化设计 + +uview-plus现已推出免费可视化设计,可以方便的进行页面可视化设计,导出源码即可使用。极大提高前端页面开发效率;如产品经理设计师直接使用更可作为高保真高可用原型制作工具,让设计稿即代码,无需传统的设计稿开发还原步骤。 + + + + + +## 文档 +[官方文档:https://uview-plus.jiangruyi.com](https://uview-plus.jiangruyi.com) +[备用文档:https://uiadmin.net/uview-plus](https://uiadmin.net/uview-plus) + + +## 预览 + +您可以通过**微信**扫码,查看最佳的演示效果。 +
+
+ +| H5 | 微信小程序 | 安卓 | 鸿蒙Next(已上架) | +| --- | --- | --- | --- | +| | | | | +
+ + + +## 链接 + +- [官方文档](https://uview-plus.jiangruyi.com) +- [更新日志](https://uview-plus.jiangruyi.com/components/changelog.html) +- [升级指南](https://uview-plus.jiangruyi.com/components/changeGuide.html) +- [关于我们](https://uview-plus.jiangruyi.com/cooperation/about.html) + + +## 关于PR + +> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uview-plus是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。 +> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢! + +## 安装 + +#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?name=uview-plus](https://ext.dcloud.net.cn/plugin?name=uview-plus) + +请通过[官网安装文档](https://uview-plus.jiangruyi.com/components/install.html)了解更详细的内容 + +## 快速上手 + +请通过[快速上手](https://uview-plus.jiangruyi.com/components/quickstart.html)了解更详细的内容 + +## 使用方法 +配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。 + +```html + +``` + +## 版权信息 +uview-plus遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uview-plus应用到您的产品中。 + +Root 组件基于上游项目 `uni-ku/root` 二次开发,已按 MIT 要求保留其原始授权文件:`libs/root/LICENSE`。 diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/changelog.md b/wuye-manager-uniapp/uni_modules/uview-plus/changelog.md new file mode 100644 index 0000000..5aaebf7 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/changelog.md @@ -0,0 +1,2251 @@ +## 3.8.58(2026-06-23) +feat: forward markdown parse link events + +## 3.8.57(2026-06-21) +fix: 修复 table2 超出隐藏失效并补齐表格属性行为 + +为 table2 单元格内容增加稳定宽度约束和默认文本截断包装,兼容 H5、小程序及 nvue 下 showOverflowTooltip 的单行省略表现。 +同时补齐 rowStyle、defaultExpandAll、lazy/load、排序配置和 context 透传等表格属性的实际行为。 + +## 3.8.56(2026-06-16) +fix 修复 table2 超出隐藏失效问题 + +## 3.8.55(2026-06-12) +fix: 完善日历今天按钮的区间模式表现及修复小程序多输入框切换时 blur 格式化视图不刷新 + +- 问题出现在小程序真机多个输入框切换场景中,A 输入框在 blur 回调里完成格式化后,点击 B 输入框会导致数据已更新但 A 的显示值未及时同步。本次修改在 u-input 内部记录 blur 时的原始值,并在 modelValue 回流阶段识别 blur 后的外部格式化结果,允许该结果覆盖 innerValue,避免被 changeFromInner 保护逻辑拦截。这样在点击其他输入框触发 blur 时,格式化结果也能正确更新到视图。 +- 避免日期区间模式点击今天时清空已有选中范围,同时提供今天日期的独立高亮能力。新增 todayColor 配置、组件透传与类型声明,并调整 range 模式下今天按钮仅定位不选中。single 模式保持点击今天直接选中,range 模式保留原区间并定位到今天。 + +## 3.8.54(2026-06-11) +fix(calendar): 修复今天按钮点击后未选中日期的问题 + +今天按钮在跳转到今天所在月份后,会复用日历原有日期点击逻辑选中今天,并按 showConfirm 配置保持确认行为一致。 + +## 3.8.53(2026-06-11) +feat(calendar): 日历顶部增加时分秒选择能力 + +新增 enableTime、timePrecision、defaultTime 配置,支持单选与区间首尾模式在顶部点击时间区域后弹出居中 picker 进行时间编辑。 +确认返回仍为字符串数组:单选与区间首尾模式返回日期时间字符串;区间 all 模式按约定不展示时间选择并保持原日期数组返回;同日区间增加结束时间不能早于开始时间的校验。 + +## 3.8.52(2026-06-10) +fix(table2): 修复微信小程序中重复 slot name="cell" 导致的报错 (#839) + +在固定列浮动视图(u-table-fixed-shadow)的 MP-WEIXIN 条件编译块中, +将 改为直接内联渲染,消除同组件内同名 slot 的冲突。 +微信小程序不允许单个组件实例中出现多个同名 slot,而主表体已占用 "cell", +固定列视图区仅用于视觉叠加,直接渲染 item.row[col.key] 即可满足需求。 + +## 3.8.51(2026-06-09) +fix(picker): 修复异步columns加载时defaultIndex位置不更新的问题 (#841) + +问题:当columns从接口动态返回时(初始为空数组,延迟后赋值), +defaultIndex已提前设置好innerIndex,columns变化时innerIndex值未改变, +picker-view的:value绑定不触发重新渲染,导致滚动位置停留在第0项。 + +修复:在setColumns中检测是否有列从空变为有数据,若是则先清空innerIndex, +再在$nextTick中恢复目标值,强制picker-view重新滚动到defaultIndex指定位置。 + +## 3.8.50(2026-06-08) +fix: 修复 pageInline 日历隐藏挂载时首日偏移异常 + +问题原因:u-calendar 在隐藏容器中挂载时可能获取到 width=0,导致首日 margin-left 计算为 0。 +改动内容: +1) 非 APP-NVUE 场景首日偏移改为百分比计算,避免依赖运行时宽度。 +2) 宽度获取增加 windowWidth 兜底,降低隐藏挂载导致的布局异常风险。 +影响范围:仅调整 u-calendar/month.vue 的首日偏移与宽度兜底逻辑,不改变选择交互行为。 + +## 3.8.49(2026-06-05) +fix(datetime-picker): 修复hasInput模式下点击遮罩无法关闭弹窗的问题 + +- 在close()方法中补充将showByClickInput置为false的逻辑, +- 与cancel()和confirm()的处理保持一致,修复issue #759 + +## 3.8.48(2026-06-04) +feat(calendar): 新增区间模式返回值格式配置 + +- 新增 rangeResultMode 配置项,支持 range 模式在 confirm 时返回全部区间日期或仅返回起止日期。 +- 本次改动覆盖默认配置、组件 props、确认回调返回逻辑与 TypeScript 类型声明,默认值为 all 以保持现有行为兼容。 + +## 3.8.47(2026-06-03) +扩展 u-datetime-picker 支持小时与秒级时间选择 + +- 新增 datehour、timesecond、datetimesecond 三种模式,覆盖年月日时与秒级场景\n- 增加 minSecond/maxSecond 配置,并同步列生成、边界计算、回显与变更事件处理\n- 更新 TypeScript 类型定义,确保新模式和秒级属性在项目中可被正确约束 + +## 3.8.46(2026-06-02) +fix: 修复DatetimePicker在pageInline模式下无法滚动到默认值问题 #941 + +pageInline模式下picker-view原生组件常驻显示,Android/HarmonyOS端 +原生组件尚未完成初始化时已渲染为索引0位置,后续更新无法可靠触发滚动。 + +- updateColumnValue改用$nextTick+条件延时:pageInline时等待100ms +- mounted新增pageInline兜底:200ms后再次设置索引确保原生组件就绪 + +## 3.8.45(2026-06-01) +fix: 修复NumberBox最小值限制导致无法输入新值问题 #914 + +## 3.8.44(2026-05-31) +fix: 修复up-tooltip未暴露open/close方法及manual模式失效问题 #1021 + +- 新增 show prop,支持 triggerMode="manual" 时通过 :show 控制显示 +- 新增 open() / close() 方法并对外暴露 +- 监听 show prop 变化,manual 模式下自动调用 open/close +- 新增 open / close emit 事件,u-popover 的 @open @close 监听可正常工作 +- 统一内部显示/隐藏逻辑均走 open()/close() 方法 + +## 3.8.43(2026-05-30) +fix: 修复小程序中 tabbar midButton 模式图标不显示问题 + +- 使用 :deep() 选择器替代普通后代选择器,解决 virtualHost:true 导致 +- 父组件 scoped 样式无法传播到子组件根元素的问题。 + +## 3.8.42(2026-05-29) +feat: 新增单行日历组件并支持下拉展开完整月历及修复签名组件 clear 方法实现 + +-新增 up-calendar-strip 组件,支持单行横向滚动日期、前后切月、选中态与今天高亮,并受 minDate/maxDate 约束。 +-完整模式复用内嵌 up-calendar(pageInline + monthSwitch),支持下拉展开、上拉收起与完整月历选中回写,降低重复代码与维护复杂度。 +-同步接入全局默认 props 与 TypeScript 类型声明,并在 calendar 示例页增加可直接验证的演示入口。 +- 修复 Signature 组件对外 clear 方法缺失导致 ref 调用报错的问题。 +- 在 u-signature 中新增 clear 公共方法,统一重置路径与绘制状态并清空画布,同时触发 clear 事件,保持工具栏清空与外部调用行为一致。 + +## 3.8.41(2026-05-29) +feat: tabs新增多形态模式并优化示例页吸顶展示 + +- 新增shapeMode能力,支持capsule/card/pill-arrow/tag四种模式,并补齐props默认配置与类型声明。 +- 完善各模式样式细节与尺寸,优化圆角矩形箭头视觉表现,卡片模式使用轻量阴影增强层次。 + +## 3.8.40(2026-05-28) +feat: 新增 up-guide 首屏全屏引导组件,支持开箱即用的一次性引导能力。 + +## 3.8.39(2026-05-27) +feat: 新增 tabbar 风格体系与动态图标表现 + +- 为 tabbar 增加多种内置风格、轻量选中动画与双态图标支持。 +- 扩展示例页覆盖普通场景、NVUE 场景及中间按钮组合用法。 + +## 3.8.38(2026-05-25) +add: uni-ku/root上游组建的协议原文 + +## 3.8.37(2026-05-22) +feat: 日历组件新增今天按钮并支持快速回到当月 + +在日历头部增加今天按钮与禁用态,点击后可跳转到今天所在月份;为今天日期增加独立高亮样式且不覆盖用户当前已选日期。同时补充 showToday 配置、类型声明与多语言文案键,保证不同语言和模式下行为一致。 + +## 3.8.36(2026-05-20) +fix: 修复 u-parse 链接点击在 iOS 端可能闪退的问题 + +- 在 u-parse 的两个链接点击入口统一增加 href 规范化与外链判断,避免空值或非法值传入 plus.runtime.openWeb/openURL。 +- 同时将原生外链打开封装为受保护调用并添加异常兜底,降低 APP-PLUS 与 APP-HARMONY 下点击链接导致崩溃的风险。 + +## 3.8.35(2026-05-19) +fix: 修复up-input在confirm阶段可能丢失扫码内容 + +- 问题背景:issue #1011 反馈外接扫码枪场景下,up-input 的 confirm 回调偶发丢码,连续0更明显。 +- 原因分析:组件 onConfirm 直接返回 innerValue,当扫码输入与回车触发节奏接近时,confirm 可能早于最后一次 input 同步,导致取到旧值。 +- 改动说明:onConfirm 优先使用 event.detail.value,若平台未提供该字段再回退到 innerValue,兼容原有行为并降低扫码场景丢码风险。 +## 3.8.34(2026-05-18) +fix: 仅在 TabBar 页面同步 TabBar 样式 + +- 在 libs/theme/runtime.js 新增 isTabBarPage 与 trySetTabBarStyle,统一封装 TabBar 页面判断与安全调用。 +- 在 runtime/theme/common mixin 的原生主题同步路径中,全部改为调用 trySetTabBarStyle,不再直接调用 uni.setTabBarStyle。 + +## 3.8.33(2026-05-17) +fix: 修复主题变量桥接与 nvue 按钮取色问题 + +- 调整主题 bridge 的导出位置,避免 legacy light 变量在样式注入后覆盖用户自定义 CSS 变量。 +- 修复 up-button 在 nvue 下的主题取色与 info/plain 样式问题,补充运行时取色兜底,避免按钮颜色错误或主题方法缺失时报错。 +- 同步更新示例接入、版本号与变更记录,保持主题改造后的行为与文档一致。 + +## 3.8.32(2026-05-14) +feat: 新增二维码静区配置 + +- 为 up-qrcode 增加 quietZone 属性,默认值调整为 0。 +- 同步更新二维码绘制逻辑与类型声明,支持按静区宽度控制外层留白。 + +## 3.8.31(2026-05-14) +fix: 修复toast组件overlay设置为false时不显示toast的问题 (#1016) + + +## 3.8.30(2026-05-14) +fix(tooltip): 修复tooltip组件字体大小(size)属性未生效的问题 + +## 3.8.29(2026-05-13) +style: 将 Toast 组件硬编码颜色替换为主题变量 + +- 替换 primary、success、error、warning 类型的背景与边框硬编码颜色 +- 统一接入 $u-{type}-light 与 $u-{type}-disabled 主题变量 +- 增强组件在不同主题下的样式一致性与可维护性 + +## 3.8.28(2026-05-12) +style: 优化 up-textarea 组件主题变量与边框样式 + +- 字数统计区域新增文本颜色主题变量支持 +- 输入框区域重构样式计算,补充背景色、文本色与光标色主题变量 +- 移除原有边框 CSS 类名依赖,改为通过计算属性动态注入边框样式 +- 新增边框颜色计算逻辑,根据亮暗色模式自动适配主题色 +- 修复 H5 端 uni-app 默认包装器样式冲突,统一背景、边框与占位符颜色 + +## 3.8.27(2026-05-11) +feat: 新增 nativeThemeSync 配置控制原生UI主题同步 + +- 在 config 中新增 nativeThemeSync 选项,默认值为 false +- 在 theme.js 与 runtime.js 的 applyNativeThemeUI 中增加配置拦截,未开启时跳过原生导航栏、页面背景及 tabBar 的样式同步 +- 补充 TypeScript 类型定义,明确默认关闭以避免升级覆盖项目已有的 pages.json 或 theme.json 全局样式 +- 更新验证脚本,增加对该配置开关行为的断言测试 +## 3.8.26(2026-05-11) +fix: 修复海报组件多行文本截断与省略号渲染问题 + +- 提取省略号宽度计算与截断逻辑为独立辅助函数,提升代码可维护性 +- 修正达到最大行数时的截断流程,确保末行正确计算宽度并添加省略号 +- 调整换行后当前行字符的赋值时机,避免首字符丢失或渲染状态错乱 +- 补充文件末尾缺失的换行符以符合代码规范 + +## 3.8.25(2026-05-10) +fix: 修复H5安装时写入页面背景 + +- 移除主题初始化时对html、body和#app背景色的内联写入,避免use(uviewPlus)覆盖业务页面背景。 +- 补充运行时主题回归断言,确保H5仍同步data-up-theme但不再改写宿主页面背景样式。 + +## 3.8.24(2026-05-09) +fix: 合并 up-slider 组件重复的 mounted 生命周期钩子 + +- 将原本分散的两个 mounted 钩子合并为单个 async mounted +- 确保高度/尺寸赋值与滑块 DOM 尺寸获取逻辑在同一钩子内顺序执行 +- 移除底部重复的生命周期代码块,修复因 Vue 钩子执行顺序不确定导致的 init 初始化异常 + +## 3.8.23(2026-05-09) +style: 弹窗组件支持主题变量动态设置指示器与关闭图标颜色 + +- 将底部横条指示器背景色替换为 --up-light-color 主题变量 +- 将关闭图标颜色替换为 --up-content-color 主题变量 +- 新增 indicatorStyle 与 closeIconColor 计算属性实现动态绑定 +- 同步更新 CSS 与内联样式,移除硬编码颜色值以提升多主题适配能力 + +## 3.8.22(2026-05-08) +style: 优化 up-input 组件边框样式与主题变量适配 + +- 移除原有的 u-border 和 u-border-bottom 工具类,改为通过内联样式动态控制边框 +- 新增 inputBorderColor 计算属性,支持通过 --up-input-border-color 主题变量自定义边框颜色 +- 适配深色模式,默认边框颜色根据主题状态自动切换为半透明白色或浅色边框 +- 统一将边框宽度设置为 0.5px,提升多端显示的一致性 + +## 3.8.21(2026-05-07) +fix: 修正索引锚点默认背景色识别逻辑 + +- 扩展默认背景色判断条件,兼容 #f1f1f1 与 #dedede +- 更新主题变量回退默认值为 #f1f1f1 以匹配新版设计 + +## 3.8.20(2026-05-06) +feat: 表单标签颜色支持主题变量动态适配 + +- 新增 labelDynamicStyle 计算属性,动态读取 --up-main-color 主题变量 +- 将动态样式注入标签元素,实现表单标签颜色随主题配置自动切换 + +## 3.8.19(2026-04-30) +feat: 为日期时间选择器遮罩层添加暗色模式自适应样式 + +- 新增 resolvedMaskStyle 计算属性,优先返回外部传入的 maskStyle +- 未传入自定义样式且处于暗色主题时,自动注入渐变背景以适配深色模式 +- 替换模板中的遮罩样式绑定,避免硬编码并提升主题切换兼容性 + +## 3.8.18(2026-04-29) +fix: 规避 H5 主题切换时的导航栏 page not found 报错 + +为主题系统中的 setNavigationBarColor 调用增加活动页面判断,并对调用失败做静默兜底,避免 H5 启动或路由切换早期抛出 page not found。背景色与 tabBar 同步逻辑保持不变。 +## 3.8.17(2026-04-29) +refactor: 将 Cell 组件颜色引用替换为主题变量 + +- up-cell-group 标题文本颜色改用 upThemeVar 动态获取 +- up-cell 禁用态、标题、描述及值颜色统一替换为主题变量 +- 点击态背景色 SCSS 变量改为依赖 CSS 变量 --up-hover-bg-color +- 移除对 $u.color 的直接依赖,提升主题切换兼容性 + +## 3.8.16(2026-04-28) +style: 统一下拉刷新组件与示例页的文本及图标颜色 + +- 为示例页列表项、提示文本及表情图标补充对应样式类名 +- 组件下拉与释放状态的箭头图标显式指定内容色 CSS 变量 +- 将组件提示文本颜色由内容色变量调整为主色变量以统一视觉 + +## 3.8.15(2026-04-28) +style: 统一协议组件文本颜色为主题变量 + +- 为协议页面标题、自定义内容及正文应用主色变量 +- 将协议内联链接颜色替换为主题主色变量 +- 为 up-agreement 组件容器设置默认文本主色 + +## 3.8.14(2026-04-27) +refactor: up-action-sheet 组件样式适配主题变量 + +- 模板中硬编码颜色替换为动态计算属性,统一通过 upThemeVar 获取主题色 +- 新增标题、描述、关闭图标、分割线及取消按钮区域的颜色动态样式绑定 +- 修复 SCSS 变量 description-color 误赋值为字号的缺陷 +- 样式层全面迁移至 CSS 变量,确保组件在暗黑模式与自定义主题下正确渲染 + +## 3.8.13(2026-04-26) +feat: 重构 up-tree 组件并新增手风琴、高亮及复选框控制 + +- 移除独立子组件,采用扁平化 visibleNodes 计算属性重构渲染逻辑 +- 新增手风琴模式、当前节点高亮及自定义缩进/展开图标配置 +- 完善复选框联动机制,支持半选状态、父子级联与严格模式切换 +- 暴露 setCheckedKeys、getCheckedKeys 等实例方法支持编程式控制 +- 补充 node-expand、current-change 等事件以增强交互反馈 +- 同步更新示例页,覆盖基础展示、自定义插槽、复选框及手风琴场景 + +## 3.8.12(2026-04-24) +style: 添加骨架屏演示区块标题样式 + +## 3.8.11(2026-04-24) +refactor: 新增日历组件单月模式演示并重构示例页主题逻辑 + +- 统一示例页主题适配逻辑,移除旧版事件监听,改用 upThemeIsDark 与 upThemeVar 动态计算样式 +- 组件列表页增加 page-meta 导航栏配置,实现状态栏与导航栏颜色随主题自动切换 +- 日历组件示例新增单月切换模式,覆盖单选、日期区间及多选三种场景 +- 加载页示例补充 color 属性配置,完善自定义加载动画演示 +- 个人中心页增加 applyNativeThemeUI 方法存在性校验,提升原生主题调用安全性 + +## 3.8.10(2026-04-24) +refactor: 重构主题系统并扩展深浅色模式变量 + +- 统一主题状态管理,引入版本号机制与运行时同步函数,优化组件主题切换响应 +- 扩展 CSS 变量体系,新增 hover、表格、骨架屏等组件专属背景色及主色深浅变体 +- 优化 NVUE 平台兼容性,分离样式导入逻辑并动态计算页面最小高度 +- 重构全局 Mixin 与页面导航组件,抽离主题计算逻辑至独立运行时模块 +- 完善原生 UI 主题适配,支持 TabBar 与导航栏随深浅色模式自动切换 + +## 3.8.9(2026-04-23) +feat: 新增 nvue 运行时主题支持与全局主题 API + +- 新增 runtime.js 模块,提供主题变量动态解析、本地存储同步及原生 UI 样式应用逻辑 +- 重构 Vite 插件转换逻辑,为 nvue 页面自动注入主题根组件及响应式 Mixin/Composables +- 在 Vue 全局属性中注册 upThemeIsDark、upThemeVar 等辅助方法,简化组件内主题调用 +- 优化主题构建逻辑,新增导航栏背景色变量支持及 TabBar 样式动态适配 +- 新增 nvue-root.vue 根组件,统一处理 nvue 页面主题刷新与系统主题变更事件监听 + +## 3.8.8(2026-04-23) +fix: 修复nvue下白屏报错URL is not defined和 Cannot set property 'getRect' of undefined + +## 3.8.7(2026-04-22) +feat: 日历组件新增单月切换模式并适配主题变量 + +- 新增 monthSwitch 属性,支持非滚动的单月切换展示模式 +- 头部新增上/下一月及上/下一年切换按钮,并实现越界禁用逻辑 +- 重构组件样式,将硬编码颜色替换为 CSS 变量以完善主题适配 +- 优化单月模式下的月份索引计算与容器高度动态调整逻辑 +- 调整日期范围选中背景色透明度,提升暗黑模式下的视觉对比度 + +## 3.8.6(2026-04-22) +fix: 修复商品SKU未完全选择时仍可购买的问题 + +- 修改 canBuy 计算属性中已选SKU数量的统计逻辑 +- 过滤值为空字符串的SKU选项,仅统计实际已选择的规格 +- 避免初始化空值导致购买按钮状态判断错误 + +## 3.8.5(2026-04-21) +fix: 修复 up-choose 组件 modelValue 更新不同步问题 + +- 移除 created 生命周期中的初始赋值逻辑 +- 新增 watch 监听 modelValue 并设置 immediate: true +- 确保外部传入的 modelValue 变化时能实时同步至 currentIndex +- 补充文件末尾换行符以符合规范 + +## 3.8.4(2026-04-20) +fix(u-rate): 增强数值校验与边界处理,修复计算异常 + +- 新增 normalizeActiveIndex 等辅助方法,统一处理评分值的类型转换与 minCount/count 边界限制 +- 对 DOM 节点获取的 left 和 width 增加 Number.isFinite 校验,避免 NaN 导致布局计算崩溃 +- 优化 emitEvent 逻辑,在触发 change 及双向绑定更新前进行值归一化,防止无效值传播 +- 在触摸与点击事件处理前调用 ensureRateMetrics,确保尺寸数据有效后再执行坐标计算 +- 移除直接读取 prop 的硬编码逻辑,提升组件在异常传参或异步渲染场景下的稳定性 + +## 3.8.3(2026-04-19) +fix: 修复日期时间选择器快速滚动越界与空值异常 + +- 新增 safeColumnValue 与 toInt 辅助方法,安全读取滚动列数据并统一类型转换 +- 优化 change 事件处理逻辑,使用 range 严格限制年月日时分在合法区间内,防止越界 +- 增强 intercept 方法容错性,处理 undefined/null 输入并转为字符串匹配,避免正则报错 +- 补充列数据生成兜底逻辑,快速滚动导致日列范围异常时自动回退至当月天数或默认 31 天 +- 完善 show 监听与 close 方法,在含输入框模式下关闭选择器时同步重置 showByClickInput 状态 + +## 3.8.2(2026-04-17) +fix: 修复级联选择器仅回显未改动时确认返回空数组的问题 + +- 提取 getSelectedValues 方法统一处理选中值获取逻辑,消除重复代码 +- 初始化时若 modelValue 为空则显式清空 confirmValues,避免状态残留 +- 数据回显后同步更新 confirmValues,确保未手动修改直接确认时能正确返回默认值 +- 优化 handleConfirm 逻辑,优先使用已同步的确认值,提升事件触发准确性 + +## 3.8.1(2026-04-16) +feat(select): 增强下拉框样式能力并补充 100% 宽度示例 + +- 新增 up-select 的边框样式能力与下拉面板宽度配置,便于构建接近 PC Select 的交互样式。 +- 新增 border 属性:支持为触发区显示边框、圆角和内边距(默认关闭,保持兼容) +- 新增 optionsWidth 属性:支持 String/Number,允许 px/rpx/% 等宽度控制 +- 优化下拉面板定位逻辑,保留溢出时左右对齐修正行为 +- 更新 select 示例页:新增“边框与下拉宽度”示例,并改为 100% 宽度展示 + +## 3.8.0(2026-04-16) +feat: 新增暗黑模式支持完成全链路适配与主题能力统一 + +【架构设计】 +1. 建立主题变量分层:新增核心令牌层 theme-vars-core(统一定义亮/暗主题语义变量),并通过 theme-vars 进行聚合输出。 +2. 建立组件主题扩展层:为 navbar/notice-bar/subsection/switch/tag 等组件新增独立 theme-vars 文件,按组件边界管理主题差异,降低跨组件耦合。 +3. 建立运行时主题层:新增 libs/theme/theme.js,结合全局 mixin 与入口注入实现主题状态读取、切换与分发,形成“变量定义 -> 运行时注入 -> 组件消费”的闭环。 + +【关键改动范围】 +1. 基础设施:App.up.vue、common/mixin.js、pages.json、manifest.json、theme.json 及全局样式入口同步调整。 +2. 组件库:大规模修复表单、导航、反馈、布局、展示类组件在暗黑模式下的背景、文字、边框、占位符、选中态对比度问题。 +3. 示例页与模板页:对示例与业务模板页进行暗黑联调,减少页面级重复 pageStyle 覆盖,统一回归到主题变量驱动。 + +【兼容性与收益】 +1. 保持组件 API 行为不变,主要为样式与主题渲染层升级。 +2. 统一暗黑适配策略,减少页面散落样式补丁,后续新增组件可按统一主题规范快速接入。 +3. 提升微信小程序/H5 场景下暗色模式的一致性与可维护性。 + +## 3.7.38(2026-04-16) +feat(root): 支持全局Toast/Notify注入与调用及新增 root 模块构建缓存兼容垫片 + +- Root 注入宿主统一承载 up-toast 与 up-notify,并注册 upGlobalToastRef/upGlobalNotifyRef +- 新增 uni..rootNotify / setRootNotifyRef,并完善 rootToast 全局调用链路 +- Root 模板注入改为 -root-toast-host,避免 easycom 干扰 +- 补充 TypeScript 声明与 App.up.vue 全局调用示例 +- 提供透传函数 createGlobalUpRoot 以兼容旧版缓存引用 +- 防止增量构建缓存残留导致模块加载异常 +- 明确新架构已不再依赖该文件,仅作为过渡期保留 + +## 3.7.37(2026-04-16) +feat:新增全局root-view组件接入全局根容器注入并完善页面匹配 + + - 新增 App.up 根容器与 libs/root 插件链路,自动注册 global-up-root 并包裹页面模板。 + - 支持 pages.json 页面按真实文件扩展名匹配(.vue/.nvue/.uvue),避免 nvue 页面漏注入。 + - 修复模板起始偏移为 0 时的注入边界判断,确保首行 template 也能正确注入。 + - 在 vite.config.ts 接入 UniUpRoot 插件默认配置。 + +## 3.7.36(2026-04-15) +fix: stepsItem.d.ts ts插槽name更新 #940 + +## 3.7.35(2026-04-14) +fix: timeFormat方法支持多种ISO格式 + +## 3.7.34(2026-04-14) +fix: up-waterfall组件告警void app logic that relies on enumerating keys on a component instance #993 + +## 3.7.33(2026-04-14) +fix: up-waterfall组件告警void app logic that relies on enumerating keys on a component instance #993 + +## 3.7.32(2026-04-12) +fix: up-picker添加默认背景色 防止其他使用该组件的没有配置背景色导致奇怪的样式 + +## 3.7.31(2026-04-10) +fix: up-cascader垂直头部点击节点切换 + + +## 3.7.30(2026-03-31) +fix: pagination分页组件小程序上展示问题 + +## 3.7.29(2026-03-23) +fix: 修复 popup 弹出层背景色修改后,在小程序端默认背景色还存在 + +## 3.7.28(2026-03-21) +feat: 添加 up-switch 组件的圆点颜色属性 + +## 3.7.27(2026-03-12) +improvment: 优化up-form的错误提示message字段类型 + +## 3.7.26(2026-03-09) +add: up-select增加禁用功能 + +## 3.7.25(2026-03-07) +fix: 优化up-coupon规范化scss + +## 3.7.24(2026-03-06) +fix: 修复up-table2 组件在小程序不显示单元格内容的问题 + +## 3.7.23(2026-03-06) +fix: up-cascader在开启auto-close时最后层级选择后未触发confirm + +## 3.7.22(2026-03-05) +improvment: floatButton组件示例改为组合式API + +## 3.7.21(2026-03-05) +feat: 新增禁用 iOS Safari 下拉刷新工具类、移除 H5 端图标复制限制、优化 u-copy 组件注释 + +## 3.7.20(2026-02-26) +improvement:box组件示例改为组合式API + +## 3.7.19(2026-02-25) +improvement:agreement组件示例改为组合式API + +## 3.7.18(2026-02-24) +improvement:barcode组件示例改为组合式API + +## 3.7.17(2026-02-11) +fix: 修复steps组件current失效 + +## 3.7.16(2026-02-09) +improvment: choose组件示例改为组合式API + +## 3.7.14(2026-02-08) +refactor: up-signature组件改用up-canvas组件 + +## 3.7.13(2026-02-07) +add: 新增up-canvas组件 + +## 3.7.12(2026-02-07) +improvment: 优化签名组件兼容性修复微信小程序支持 + +## 3.7.11(2026-02-06) +add: action-sheet组件新增nameKey和subnameKey属性 + +## 3.7.10(2026-02-06) +add: checkbox-group组件的change事件增加第二个返回参数为当前触发变化的checkbox组件name信息等 + +## 3.7.9(2026-02-06) +fix: 修复align-self属性值缺少d导致样式不生效的问题 + +## 3.7.8(2026-02-05) +improvment: 优化card组件示例 + +## 3.7.7(2026-02-05) +add: select组件新增closeSelect方法用于自定义控制关闭 + + +## 3.7.6(2026-02-04) +add: picker组件示例onLoad后加载数据 + +## 3.7.5(2026-02-03) +add: up-slider组件新增垂直模式 + +## 3.7.4(2026-02-03) +add: box组件props优化及新增leftIcon/leftTitle/rightTopIcon/rightTopTitle/rightBottomIcon/rightBottomTitle参数 + +## 3.7.3(2026-02-03) +improvment: city-locate组件示例改为组合式API + +## 3.7.2(2026-02-02) +improvment: color-picker组件示例改为组合式API + +## 3.7.1(2026-02-02) +fix:修复qrcode缺失的preview定义emit + +## 3.7.0(2026-02-01) +fix: 修复up-qrcode二维码在微信小程序报错 + +## 3.6.134(2026-01-30) +chore: dragsort可通过参数控制是否可震动 + +## 3.6.132(2026-01-30) +feat: dragsort支持自定义拖动句柄 + +## 3.6.131(2026-01-29) +fix: 优化dragdort组件 + +## 3.6.130(2026-01-28) +improvment: cropper组件示例改为组合式API + +## 3.6.129(2026-01-28) +improvment: drag组件示例改为组合式API + +## 3.6.128(2026-01-27) +improvment: tooltip组件示例改为组合式API + +## 3.6.127(2026-01-27) +improvment: textarea组件示例改为组合式API + +## 3.6.126(2026-01-27) +improvment: text组件示例改为组合式API + +## 3.6.125(2026-01-27) +fix: 修复Cascader级联选择器设置默认值显示问题 + +修复在传入默认值时多列只会显示第一列bug + +## 3.6.124(2026-01-27) +improvment: tabs组件示例改为组合式API + +## 3.6.123(2026-01-27) +improvment: swiper组件示例改为组合式API + +## 3.6.122(2026-01-26) +fix: 🐛 修复u-input在change事件里无法获取value的异常情况 #950 + +## 3.6.120(2026-01-26) +improvment: 增加Cascader级联选择器的取消事件 + +## 3.6.119(2026-01-26) +improvment: skeleton组件示例改为组合式API + +## 3.6.118(2026-01-26) +improvment: steps组件示例改为组合式API + +## 3.6.117(2026-01-24) +improvment: subsection组就示例改为组合式API + +## 3.6.116(2026-01-24) +improvment: 优化Cascader级联选择器右上角关闭图标的显示控制 + +如果在级联文本过长或者类目过多时关闭图标会与类目文字重合,现在增加控制关闭图标的控制可以控制是否需要显示关闭图标,底部有取消按钮,关闭图标不是必须的 + +## 3.6.115(2026-01-23) +improvment: scroll-list组就示例改为组合式API + +## 3.6.114(2026-01-23) +improvment: readmore组就示例改为组合式API + +## 3.6.113(2026-01-23) +improvment: popover组就示例改为组合式API + +## 3.6.112(2026-01-23) +improvment: picker组件示例改为组合式API + +## 3.6.111(2026-01-23) +improvment: no-network组件示例改为组合式API + +## 3.6.110(2026-01-22) +improvment: navbar组件示例改为组合式API + +## 3.6.109(2026-01-22) +improvment: modal组件示例改为组合式API + +## 3.6.108(2026-01-22) +improvment: loadmore组件示例改为组合式API + +## 3.6.107(2026-01-21) +improvment: list组件示例改为组合式API + +## 3.6.106(2026-01-21) +improvment: index-list2组件示例改为组合式API + +## 3.6.105(2026-01-21) +improvment: index-list组件示例改为组合式API + +## 3.6.104(2026-01-21) +improvment: layout组件示例改为组合式API + +## 3.6.103(2026-01-21) +improvment: input组件示例改为组合式API + +## 3.6.102(2026-01-20) +fix: 修复cascader缺少emits申明 + +## 3.6.101(2026-01-20) +improvment: form组件示例改为组合式API + +## 3.6.100(2026-01-20) +improvment: datetimepicker组件示例改为组合式API + +## 3.6.99(2026-01-20) +fix: 修复cate-tab组件设置默认current不生效 + +## 3.6.98(2026-01-20) +improvment: code-input组件示例改为组合式API + +## 3.6.97(2026-01-20) +improvment: calendar组件示例改为组合式API + +## 3.6.96(2026-01-20) +improvment: avatar组件示例改为组合式API + +## 3.6.95(2026-01-20) +improvment: album组件示例改为组合式API + +## 3.6.94(2026-01-19) +improvment: waterfall组件示例改为组合式API + +## 3.6.93(2026-01-19) +improvment: upload组件示例改为组合式API + +## 3.6.92(2026-01-17) +improvment: toast组件示例改为组合式API + +## 3.6.91(2026-01-16) +improvment: tag组件示例改为组合式API + +## 3.6.90(2026-01-16) +improvment: table2组件示例改为组合式API + +## 3.6.89(2026-01-16) +add: 增加鸿蒙Next已上架二维码 + +## 3.6.88(2026-01-16) +improvment: table组件示例改为组合式API + +## 3.6.87(2026-01-15) +tabbar2组件示例改为组合式API +## 3.6.86(2026-01-15) +improvment: tabbar组件示例改为组合式API +## 3.6.85(2026-01-15) +improvment: switch组件示例改为组合式API + +## 3.6.84(2026-01-15) +improvment: slider组件示例改为组合式API + +## 3.6.83(2026-01-15) +improvment: search组件示例改为组合式API + +## 3.6.82(2026-01-15) +improvment: progress组件示例改为组合式API + +## 3.6.81(2026-01-15) +improvment: parse组件示例改为组合式API + + +## 3.6.80(2026-01-15) +improvment: number-box组件示例改为组合式API + +## 3.6.78(2026-01-15) +improvment: notify组件示例改为组合式API + +## 3.6.77(2026-01-15) +improvment: notice-bar组件示例改为组合式API + +## 3.6.76(2026-01-15) + improvment: keyborad组件示例改为组合式API + +## 3.6.75(2026-01-15) +improvment: dropdown组件示例改为组合式API + +## 3.6.74(2026-01-15) +fix: 修复parse组件props缺少) + +## 3.6.73(2026-01-15) +improvment: count-to组件示例改为组合式API + +## 3.6.72(2026-01-15) +improvment: count-down组件示例改为组合式API + +## 3.6.71(2026-01-14) +improvment: collapse组件示例改为组合式API + +## 3.6.70(2026-01-14) +improvment: code组件示例改为组合式API + +## 3.6.69(2026-01-14) +improvment: card组件示例改为组合式API + +## 3.6.68(2026-01-13) +fix: 修复list组件在支付宝小程序下scrolltolower无法触发 #422 +## 3.6.67(2026-01-13) +fix: 删除经典下拉框的打印 + +## 3.6.66(2026-01-12) +fix: 修正 RadioSlots 类型定义 + +## 3.6.65(2026-01-12) +fix: 修复u-picker在hasInput下回显异常和vue报错 + +## 3.6.64(2026-01-12) +fix: 解决cropper在ios小程序中底部操作栏被遮挡的问题 + +## 3.6.63(2026-01-10) +improvment: badge组建示例改为组合式API + +## 3.6.62(2026-01-10) +improvment: alert组件示例改为组合式API + +## 3.6.61(2026-01-09) +improvment: action-sheet组件示例改为组合式API + +## 3.6.60(2026-01-09) +improvment: transition组件示例改为组合式API + +## 3.6.59(2026-01-09) +improvment: swipe-action组件示例改为组合式API + +## 3.6.58(2026-01-09) +improvment: sticky组件示例改为组合式API + +## 3.6.57(2026-01-08) +improvment: 优化完善no-nerwork组件细节 + +## 3.6.56(2026-01-08) +fix: 修复signature的t方法 + +## 3.6.55(2026-01-08) +perf:补充多处TS声明提示信息 #953 + +## 3.6.54(2026-01-08) +fix: 修复slider示例页面变量重复 +## 3.6.53(2026-01-08) +fix: 修复qrcode组件鸿蒙兼容 + +## 3.6.52(2026-01-08) +fix: nvue下采用webview支持二维码显示logo(因为gcanvas不支持图片渲染) + +## 3.6.51(2026-01-08) +fix: 修复qrcode组件在App不显示logo + +improvment: qrcode逻辑优化封装 + +## 3.6.50(2026-01-06) +improvment: rate组件示例改为组合式API + +## 3.6.49(2026-01-06) +improvment: radio组件示例改为组合式API + +## 3.6.48(2026-01-06) +improvment: popup组件示例改为组合式API + +## 3.6.47(2026-01-06) +improvment: overlay示例改为组合式API + +## 3.6.46(2026-01-05) +improvment: loading-page组建示例改为组合式API + +## 3.6.45(2026-01-05) +improvment: loading-icon组件示例改为组合式API + +## 3.6.44(2026-01-05) +improvment: link组件示例改为组合式API + +## 3.6.43(2026-01-05) +improvment: line组件示例改为组合式API + +## 3.6.42(2026-01-04) +improvment: layzload组件示例改为组合式API + +## 3.6.41(2026-01-04) +fix: 修复select组件缺少mixin + +## 3.6.40(2026-01-04) +improvment: 去除ReadmeQQ群链接 + +## 3.6.39(2026-01-04) +improvment: image组件示例改为组合式API + +## 3.6.38(2026-01-03) +improvment: icon示例改为组合式API + +## 3.6.37(2025-12-31) +improvment: 静态资源修复 + +## 3.6.36(2025-12-30) +improvment: grid示例改为组合式API + +## 3.6.35(2025-12-25) +fix: 修复grid布局由于内容溢出导致形变 + +## 3.6.34(2025-12-24) +fix: modal组件asyncCloseTip多语言key未对应 + +## 3.6.33(2025-12-23) +fix: 提升$parent方法兼容性修复表单验证失效 + +## 3.6.32(2025-12-21) +improvment: 优化slider、search、steps等组件细节 + +## 3.6.31(2025-12-19) +improvment: 优化search组件等 + +## 3.6.30(2025-12-19) +improvment: 优化完善部分文件注释 + +## 3.6.29(2025-12-18) +fix: 修复语法错 +## 3.6.28(2025-12-18) +fix: 优化$parent方法兼容性 + +## 3.6.27(2025-12-17) +add: datetimepicker增加maskClass和maskStyle属性 + +## 3.6.26(2025-12-16) +add: picker增加maskClass/maskStyle属性 + +## 3.6.25(2025-12-15) +fix: 修复cascader对列表数据层级差异的兼容问题 + +## 3.6.24(2025-12-14) +fix: 修复将empty组件的mode设置为wifi后图标不能显示的问题 #928 + +## 3.6.23(2025-12-13) +fix: 修复cascader已选中三级菜单后再选择二级菜单时tabs报错问题 + +## 3.6.22(2025-12-12) +fix: dragsort组件拖动抖动的问题 + +## 3.6.21(2025-12-09) + fix: form-item初始化时机优化 + +## 3.6.20(2025-12-08) +improvment: 优化form组件语法普适性 + +## 3.6.19(2025-12-01) +fix: 修复商品SKU组件i18n + +fix: Choose组件会有width警告提示 #915 + +## 3.6.18(2025-11-30) +feature: upload组件file模式支持微信小程序chooseMessageFile的extension属性 #913 + +## 3.6.17(2025-11-18) +add: picker-data支持表单验证 + +## 3.6.16(2025-11-18) +improvment: 优化下拉菜单示例 + +## 3.6.15(2025-11-10) +fix: 修复tabs添加activeStyle切换后滑块无法居中 + +## 3.6.14(2025-11-07) +fix: 修复引用拼写 + +## 3.6.13(2025-11-06) +improvment: 组合式API升级之gap示例改造 + +## 3.6.12(2025-11-05) +improvment: empty示例改为组合式API + +## 3.6.11(2025-11-05) +improvment: divider示例改为组合式API + +## 3.6.10(2025-11-04) +improvment: checkbox示例改为组合式API + +## 3.6.9(2025-10-21) +improvment: cell示例改为组合式API + +## 3.6.8(2025-10-20) +imporvment: button示例改为组合式API + +## 3.6.7(2025-10-17) +fix: 优化picker当前列判断 + +## 3.6.6(2025-10-13) +fix: 修复getWindowInfo微信小程序下报警告 + +## 3.6.5(2025-10-11) +🐛fix: 修复picker双向绑定 #753 + +## 3.6.4(2025-10-09) +🐛fix: import rpx2px function and add to exports in index.js + +## 3.6.3(2025-10-09) +fix: 修复getWindowInfo微信小程序下报警告 + +## 3.6.2(2025-10-05) +fix: 修复picker双向绑定 #753 + +## 3.6.1(2025-10-01) +fix: 修复poster海报组件微信小程序图片绘制失败 + +## 3.6.0(2025-09-30) +fix: 修复parse事件报错及统一事件名称小写 + +## 3.5.57(2025-09-30) +improvment: 更换部分资源域名提升访问速度 + +## 3.5.56(2025-09-29) +fix: 修复picker和datetime-picker在部分原生渲染时hasInput触发键盘弹起 + +## 3.5.55(2025-09-29) +feat: waterfall新增after-add-one和after-add-all事件 + +## 3.5.54(2025-09-25) +🐞 fix: 解决索引列表初始化时获取不到高度导致的字母列表异常 + +## 3.5.53(2025-09-19) +improvment: back-top示例组合式API改造 + +## 3.5.52(2025-09-19) +fix: 优化tabbar的borderColor优先级 + +## 3.5.51(2025-09-19) +fix: 微信小程序下u-transition包裹的内容因为没有默认flex column而出现布局错误 + +## 3.5.50(2025-09-18) +fix: 修复tabbar组件borderColor类型 + +## 3.5.49(2025-09-18) +fix: 修复action-sheet列表中第一个item的hover style + +## 3.5.48(2025-09-17) +fix: 修复table2的fixedHeader参数生效 + +## 3.5.47(2025-09-16) +fix: 修复modelValue类型 + +## 3.5.46(2025-09-15) +feat: table2新增支持span-method合并单元格 + +## 3.5.45(2025-09-13) +fix: 修复数据分配时未等待获取元素后再执行下一次循环导致数据插入错误,addTime属性未使用修改。 + +## 3.5.44(2025-09-12) +fix: 单选快捷组件作为受控组件,当modelValue清除选择时,组件状态未被清除。 + +## 3.5.43(2025-09-10) +fix: 增加subsection兼容性索引转为数字 + +## 3.5.42(2025-09-09) +feat: index-list增加下边距高度 + +## 3.5.41(2025-09-08) +fix: 修复cascader方法引用位置 + +## 3.5.40(2025-09-08) +feat: goods-sku组件支持多语言 + +## 3.5.39(2025-09-07) +fix: 修复cascader多语言问题 + +## 3.5.38(2025-09-07) +improvment: 完善演示图标 + +## 3.5.37(2025-09-05) +feat: cascader支持多语言 + +## 3.5.36(2025-09-04) +improvment: 补充图标 + +## 3.5.35(2025-09-04) +feat: cascader级联组件增加垂直头部与单列选项支持 + +## 3.5.34(2025-09-03) +improvement: 优化steps-item + +## 3.5.33(2025-09-02) +升级uni-app至最新版 +## 3.5.32(2025-09-01) +feat: cate-tab支持非联动跟随的单一切换模式 + +feat: choose组件示例使用cate-tab的单一切换模式 + + +## 3.5.31(2025-09-01) +feat: 新增choose通用选项选择器组件 + +## 3.5.30(2025-08-31) +fix: 修复缺失cascader级联选择器 + +## 3.5.29(2025-08-30) +feat: 新增cascader级联选择器 + +## 3.5.28(2025-08-29) +feat: 多语言增加泰语 + +## 3.5.27(2025-08-29) +feat: 新增基于tooltip的popover组件 + +## 3.5.26(2025-08-29) +improvment: 增强多语言兼容性 + +## 3.5.25(2025-08-28) +fix: 修复左侧与右侧弹出时页面打开闪现问题 + +## 3.5.24(2025-08-28) +feat: 优化tooltip弹窗定位 + +feat: tooltip组件新增forcePosition支持强制精确定位 + +## 3.5.23(2025-08-28) +improvment: 调整pdf阅读器默认高度 + +## 3.5.22(2025-08-28) +feat: 新增goods-sku商品SKU选购组件 + +## 3.5.21(2025-08-27) +fix: 修复popup组件手势控制参数注释 + +## 3.5.20(2025-08-27) +improvement: 提升checkbox条件编译兼容性 + +## 3.5.19(2025-08-27) +feat: popup新增iOS风格手势控制上下高度及下滑关闭 + +## 3.5.18(2025-08-26) +feat: 新增coupon优惠券组件 + +## 3.5.17(2025-08-26) +fix: 分支合并冲突修复 + +feat: picker-data组件新增cancel/close/confirm事件支持 + +## 3.5.16(2025-08-26) +feat: tabbar新增支持中间凸起按钮 + +## 3.5.15(2025-08-25) +feat: 之前的color-picker颜色选择器按计划上线 + +## 3.5.14(2025-08-25) +feat: 新增PDF阅读器组件 + +## 3.5.13(2025-08-24) +fix: 修复短视频示例https + +## 3.5.12(2025-08-23) +feat: short-video短视频组件增加视频播放示例 + +## 3.5.11(2025-08-23) +feat: 新增short-video短视频切换组件 + +feat: tabbar支持backgroundColor和borderColor属性 + +feat: slider支持innerStyle样式属性 + +## 3.5.10(2025-08-22) +feat: 新增poster海报生成组件 + + +## 3.5.9(2025-08-22) +feat: 优化qrcode组件支持toTempFilePath方法 + +## 3.5.8(2025-08-22) +fix: 优化rpx下calendar高度计算强制px + +## 3.5.7(2025-08-22) +feat: input和search新增onlyClearableOnFocused参数支持控制是否仅聚焦时显示清除按钮 + +## 3.5.6(2025-08-21) +feat: picker弹窗及datetime-picker组件支持页面内模式 + +## 3.5.5(2025-08-21) +feat: popup弹窗及canlendar组件支持页面内插入无弹窗模式 + +## 3.5.4(2025-08-21) +feat: popup弹窗及canlendar组件支持页面内插入无弹窗模式 + +## 3.5.3(2025-08-21) +fix: 修复下拉刷新多语言key + +## 3.5.2(2025-08-20) +fix: 修复非cli模式下引入的三方库报An error occurred while trying to read the map file错误 + +fix: 去除i18n多语言多余console + +## 3.5.1(2025-08-20) +feat: calendar组件月份标题自动适配多语言 + +## 3.5.0(2025-08-20) +feat: 组件库新增多语言支持且无侵入无依赖内置八种语言 + +## 3.4.107(2025-08-20) +feat: input组件支持密码显示切换 + +## 3.4.106(2025-08-20) +feat: tooltip组件支持左右方向弹窗 + +## 3.4.105(2025-08-19) +feat: 增加markdown解析器组件AI对话流式响应示例 + +## 3.4.104(2025-08-19) +feat: tooltip支持自定义触发器 + +feat: tooltip支持插槽自定义内容 + +feat: tooltip支持单击触发 + +feat: tooltip支持设置弹窗背景色 + +## 3.4.103(2025-08-19) +feat: 内置一份dayjs库 + +fix: 删除个别组件多余重复方法 + +fix: 修复marked库App打包时报错 + +## 3.4.102(2025-08-19) +fix: 小程序下cate-tab动态加载数据后尺寸获取及联动异常 + +## 3.4.101(2025-08-18) +improvment: 增加一些涉及触摸组件PC端需要仿真模式提示 + +## 3.4.100(2025-08-18) +feat: 新增markdown解析器组件 + +## 3.4.99(2025-08-18) +fix: 修复parse富文本组件可能导致无限循环的问题 + +## 3.4.98(2025-08-17) +feat: alert组件新增transitionMode/icon/duration/modelValue等参数 + +improvment: 完善alert组件注释 + +## 3.4.97(2025-08-16) +improvment: 完善album组件注释 + +## 3.4.96(2025-08-16) +improvment: 完善action-sheet注释 + +## 3.4.95(2025-08-16) +del: 去除不再需要的重复组件 + +## 3.4.94(2025-08-15) +improvment: 组件库内部icon前缀统一 + +## 3.4.93(2025-08-15) +fix: 修复dropdown组件在打开下拉菜单时content高度为NANpx的问题 + +## 3.4.92(2025-08-14) +fix: 修复多余空格导致cropper编译出错 #830 + +## 3.4.91(2025-08-14) +feat: 新增agreement弹窗协议组件 + +## 3.4.90(2025-08-13) +feat: datetimepicker新增datehour类型 + +## 3.4.89(2025-08-13) +fix: 修复u-form-item组件缺少对labelPosition的判断 + +## 3.4.88(2025-08-13) +fix: subsection组件的disabled属性应为Boolean类型 + +## 3.4.87(2025-08-12) +improvment: 签名组件示例前缀改为up + +## 3.4.86(2025-08-12) +feat: 新增signature签名签字组件 + +## 3.4.85(2025-08-11) +feat: 完善图片裁剪功能支持props及JS两种方式 + +fix: 修复H5下裁剪后图片黑屏 + +## 3.4.84(2025-08-11) +feat: 新增cropper图片裁剪组件 + +## 3.4.83(2025-08-11) +feat: 新增barcode无三方依赖条码组 + +## 3.4.82(2025-08-11) +improvment: 优化table2递归组件逻辑 + +feat: 支持树状列表复选框 + +## 3.4.81(2025-08-10) +feat: table2新增树状结构递归支持 + +## 3.4.80(2025-08-10) +feat: 新增table2固定列对树状支持 + +## 3.4.79(2025-08-09) +feat: table2组件支持左侧固定列功能 + +## 3.4.78(2025-08-09) +fix: 修复table2在popup弹窗中无法横向滚动 + +## 3.4.77(2025-08-08) +feat: 优化waterfall瀑布流组件逻辑 + +feat: waterfall瀑布流组件支持多列 + +feat: waterfall瀑布流组件支持响应式列数 + +## 3.4.76(2025-08-08) +feat: 取消props中tabs组件默认颜色影响主题色生效 + +fix: 修复parse富文本组件报错$options + +feat: timeFormat时间格式化方法支持UTC格式时间 #596 + +## 3.4.75(2025-08-07) +feat: 新增loadFontOnce参数控制是否全局只加载一次字体图标 + +## 3.4.74(2025-08-07) +feat: input组件新增cursorColor属性 + +## 3.4.73(2025-08-05) +improvment: 优化下拉刷新默认图标 + +## 3.4.72(2025-08-05) +improvment: 优化virtual-list虚拟列表样式 + +feat: 新增virtual-list虚拟列表演示 + +## 3.4.71(2025-08-05) +feat: 新增virtual-list虚拟列表组件 + +feat: 新增pull-refresh下拉刷新结合虚拟列表使用 + +## 3.4.70(2025-08-05) +fix: 修复qrcode组件长按事件传入错误cid导致的报错 + +fix: 修复index-list组件key为undefined导致的索引报错消失 + +## 3.4.69(2025-08-04) +feat: pull-refresh下拉刷新新增上拉加载特性 + +## 3.4.68(2025-08-03) +feat: 新增pull-refresh下拉刷新组件 + +## 3.4.67(2025-08-02) +feat: number-box支持disabledBgColor参数 + +## 3.4.66(2025-08-01) +improvment: 增加组件图标 + +feat: table2组件新增列排序插槽 + +fix: 分段器组件onWindowResize使用条件编译 + +fix: 修复u-line-1单行省略样式 + +## 3.4.65(2025-07-26) +fix: 修复部分环境下字体图标全局加载问题 + +## 3.4.64(2025-07-25) +feat: 新增dragsort拖动排序组件 + +## 3.4.63(2025-07-24) +feat: count-down支持slot传递时间参数 + +## 3.4.62(2025-07-24) +feat: divider支持默认插槽 + +## 3.4.61(2025-07-24) +feat: divider支持默认插槽 + +## 3.4.60(2025-07-23) +fix: 修复use阶段全局加载图标引起App端不明$page报错 + +## 3.4.59(2025-07-23) +fix: 修复album组件和CateTab组件watch和emits重复 + +fix: 修复样式优先级导致form表单labelPosition属性top失效 + +## 3.4.58(2025-07-22) +fix: 修复样式优先级影响grid宫格组件布局 + +## 3.4.57(2025-07-22) +feat: 新增title标题组件 + +## 3.4.56(2025-07-21) +fix: 去除多余hotCity参数 + +## 3.4.55(2025-07-21) +feat: 新增city-locate城市定位选择组件 + +feat: 优化index-list组件索引 + +## 3.4.54(2025-07-18) +feat: dropdown组件的highlight方法支持同时高亮多个菜单项 + +feat: 支持一次性全局加载icon字体 + +## 3.4.53(2025-07-18) +feat: dropdown组件的highlight方法支持同时高亮多个菜单项 感谢@keeplearning66 + +## 3.4.52(2025-07-16) +fix: 修复底部安全区域组件兼容性 + +## 3.4.51(2025-07-14) +fix: 修复u-slider在click后没有触发change事件 + +## 3.4.50(2025-07-13) +feat: subsection分段器添加禁用参数 + +## 3.4.49(2025-07-11) +feat: picker支持bgColor、round、duration和overlayOpacity属性 + +## 3.4.48(2025-07-10) +fix: 官方文档Card示例组件多行显示省略号样式异常 + +feat: album组件支持自定义preview事件 + +## 3.4.47(2025-07-09) +fix: 修复datetime-picker打开时,数值可能出现对不上的问题 + +feat: Subsection 分段器添加支持从 list中读取激活文字颜色和未激活文字颜色 + +fix: 修复modal定义confirmButton + +fix: safe-bottom底部安全距离在小程序优先用JS计算 + +feat: 新增tree树形组件 + +## 3.4.46(2025-07-08) +feat: 上传组件预览视频支持videoPreviewObjectFit参数 + +feat: td增加多个样式props + +fix: 修复noticeBar字号增大时文字遮挡 + +feat: 项目工程增加pinia + +## 3.4.45(2025-07-01) +fix: 修复picker-data组件缺少name + +fix: 优化picker高度单位 + +## 3.4.44(2025-06-30) +fix: 修复indexList中stikcy属性写死的问题(always true) + +feat: 搜索框添加新的右侧插槽 + +fix: 修复indexList中丢失的select event + +fix: 解决因为层级问题导致点击picker选择器无法正常弹出 + +## 3.4.43(2025-06-16) +feat: table2支持header插槽 + +## 3.4.42(2025-06-12) +fix: 修复qrcode中默认id问题及canvas2时App无法绘制二维码 感谢@jiaruiyan + +## 3.4.41(2025-06-11) +feat: qrcode支持 新参数useRootHeightAndWidth 是否使用根节点的宽高 感谢@YJR + +feat: toast支持设置zIndex层级 + + + +## 3.4.40(2025-06-06) +fix: 升级二维码 canvas -> canvas2 感谢@yjr + +## 3.4.39(2025-05-31) +fix: 修改步骤条微信小程序下的布局 感谢@jiaruiyan + +fix: u-tabs在屏幕尺寸发生变化时滑块位置没有发生变化 感谢@aqzhft + +fix: 鸿蒙平台不支持plus.runtime.openWeb 感谢@aqzhft + +## 3.4.38(2025-05-30) +fix: 修复picker-data快捷组件缺少index + +fix: 修复picker组件双向绑定初始化及取消后复原再次打开后的当前项目 + +## 3.4.37(2025-05-29) +feat: modal支持设置动画时间 + +fix: DatetimePicker v-model 绑定异步设置无效 (#803) + +## 3.4.36(2025-05-28) +fix: lazy-load图片为空时显示错误 + +## 3.4.35(2025-05-28) +feat: 进度条支持从右往左加载 + +## 3.4.34(2025-05-28) +feat: table2支持自定义标题和单元格样式 + +## 3.4.33(2025-05-27) +fix: 修复小程序cate-tab第一次切换时没反应 感谢@jiaruiyan + +fix: 修复datetimepicker传入空字符串时导致组件崩溃 感谢@jiaruiyan + +fix: 修复album带单位的字符串参与计算导致的计算数据错误 感谢@jiaruiyan + +## 3.4.32(2025-05-26) +feat: 增加状态栏独立颜色配置支持支付宝小程序状态栏对背景色识别的不友好的情况 + +fix: 抖音二维码兼容修复 + +feat: cate-tab组件增加rightTop插槽 #715 + +fix: 修改 test.promise(res) 预期结果不一致 + +## 3.4.31(2025-05-17) +fix: 修复parse富文本组件导致鸿蒙运行白屏 + +fix: 去除演示项目中uni.$u用法便于兼容鸿蒙 + +feat: modal新增popupBottom插槽适用类似关闭按钮与内容区域分离的场景 + +## 3.4.30(2025-05-16) +feat: 新增pagination分页器组件 + +feat: popup新增bottom插槽适用类似关闭按钮与内容区域分离的场景 + +## 3.4.29(2025-05-15) +fix: 修复table2横向滚动样式 + +fix: 修复table2组件宽度兼容 + +fix: 修复image显示png图片时默认背景色问题 + +feat: cate-tab新增height参数便于设置组件高度 + +feat: 在index.js种导出digit.js便于使用 + +fix: 修复tag组件缺失iconColor属性 + +fix: 优化index-list的setValueForTouch方法逻辑 #708 + +feat: number-box支持change事件返回变动是点击了增加还是减少按钮 + +fix: 修复table2在小程序下部分情形不显示表格 + +## 3.4.28(2025-05-12) +feat: 新增table表格组件 + +feat: 新增element-plus风格的table2组件 + +## 3.4.27(2025-05-06) +fix: 修复card组件props + +## 3.4.26(2025-05-06) +fix: 修复test工具引入 + +feat: card组件支持全局设置props默认值 + +fix: 修复image在加载错误情况下高度和宽度不正确问题 + +fix: 修复picker-data快捷组件默认picker选中 + +fix: 修复日历month子组件缺失emits定义 + +## 3.4.25(2025-04-27) +fix: up-form编译在微信小程序里样式缺失 #640 + +fix: number-box输入为空时自动设为最小值 + +feat: picker与datetimepicke组件hasInput模式支持inputProps属性 + +## 3.4.24(2025-04-25) +fix: 修复upload上传逻辑(感谢@semdy) + +## 3.4.23(2025-04-24) +chore: 补全chooseFile TS类型(感谢@semdy) + +feat: u-search组件的图标支持显示在右边(感谢@semdy) + +chore: 修正chooseFile返回的数据TS类型(感谢@semdy) + +fix: PR导致缺失name影响uplad自动上传扩展名 + + +## 3.4.22(2025-04-22) +fix: 修复自动上传偶发的success被覆盖为uploading + +fix: float-button缺少key #677 + +fix: upload组件完善优化(感谢@semdy) + +fix: toolbar组件confirmColor属性默认改为空,以便默认使用主题色、标题字体加粗(感谢@semdy) + +## 3.4.21(2025-04-21) +feat: subsection分段器支持双向绑定current + +feat: select组件支持maxHeight属性 + +feat: datetime-picker支持inputBorder属性 + +## 3.4.20(2025-04-17) +fix: 修复navbar-mini提示border不存在 + +feat: status-bar支持对外暴露状态栏高度值 + +feat: upload支持自定义自动上传后处理逻辑便于对接不同规范后端 + +feat: 优化tag组件插槽 + + +## 3.4.19(2025-04-14) +fix: 修复model组件增加contentStyle带来的语法问题 + +## 3.4.18(2025-04-14) +fix: upload组件支持所有文件类型的onClickPreview事件 + +## 3.4.17(2025-04-11) +feat: select组件text插槽增加scope传递currentLabel + +## 3.4.16(2025-04-10) +fix: 修复安卓新加载字体方式导致Cannot read property '$page' of undefined + +## 3.4.15(2025-04-10) +improvment: 优化移步加载数据时swiper组件displayMultipleItems报错 + +feat: modal增加contentStyle属性 + +fix: 修复下拉菜单收起动画缺失 + +fix: 修复sticky的offset属性值为响应式数据时失效 #237 + + +## 3.4.14(2025-04-09) +feat: 支持自托管内置图标及扩展自定义图标 + +## 3.4.13(2025-04-08) +fix: tabs点击当前tab触发change事件 + +## 3.4.12(2025-04-02) +fix: dropdown关闭后遮挡页面内容 #653 + +fix u-sticky.vue Uncaught TypeError: e.querySelector is not a function at uni-app-view.umd.js + +## 3.4.11(2025-03-31) +fix: 优化upload组件预览视频的弹窗占位 + +## 3.4.10(2025-03-28) +feat: select组件新增多个props属性及优化 + +fix: 修复cate-tab报错index is not defined #661 + + +## 3.4.9(2025-03-27) +fix: 修复upload组件split报错 + +fix: 修复float-button缺少flex样式 + +## 3.4.8(2025-03-27) +fix: 修复upload组件split报错 + +fix: 移除mapState + +## 3.4.7(2025-03-26) +fix: 修复action-sheet-data和picker-data数据回显 + +fix: 优化upload组件视频封面兼容 + +## 3.4.6(2025-03-25) +feat: checkbox触发change时携带name参数 + +feat: upload组件支持服务器本机和阿里云OSS自动上传功能及上传进度条 + +feat: upload组件支持视频预览及oss上传时获取视频封面图 + +feat: 新增up-action-sheet-data快捷组件 + +feat: 新增up-picker-data快捷组件 + +## 3.4.5(2025-03-24) +feat: tag组件新增textSize/height/padding/borderRadius属性 + +feat: 新增genLightColor自动计算浅色方法及tag组件支持autoBgColor自动计算背景色 + +## 3.4.4(2025-03-13) +feat: modal增加异步操作进行中点击取消弹出提示特性防止操作被中断 + +fix: 修复toast组件show方法类型声明 + +## 3.4.3(2025-03-12) +fix: 修复textarea自动增高时在输入时高度异常 + +## 3.4.2(2025-03-11) +feat: step组件增加title插槽及增加辅助class便于自定义样式 + +## 3.4.1(2025-03-11) +feat: 新机制确保setConfig与http在nvue等环境下生效 + +## 3.3.74(2025-03-06) +fix: CateTab语法问题 + +## 3.3.73(2025-03-06) +feat: CateTab新增v-model:current属性 + +## 3.3.72(2025-02-28) +feat: tabs组件支持icon图标及插槽 + +## 3.3.71(2025-02-27) +feat: 折叠面板collapse增加titileStyle/iconStyle/rightIconStyle属性 + +feat: 折叠面板组件新增cellCustomStyle/cellCustomClass属性 + +fix: select组件盒模型 + +## 3.3.70(2025-02-24) +fix: 修改u-checkbox-group组件changes事件发生位置 + +## 3.3.69(2025-02-19) +picker允许传递禁用颜色props + +slider组件isRange状态下增加min max插槽分开显示内容 + +feat: 新增经典下拉框组件up-select + +## 3.3.68(2025-02-12) +fix: 修复weekText类型 + +feat: 日历增加单选与多选指定禁止选中的日期功能 + +fix: NumberBox删除数字时取值有误 #613 + +## 3.3.67(2025-02-11) +feat: navbar支持返回全局拦截器配置 + +feat: 表单-校验-支持无提示-得到校验结果 + +feat: picker传递hasInput属性时候,可以禁用输入框点击 + +## 3.3.66(2025-02-09) +feat: steps-item增加content插槽 + +## 3.3.65(2025-02-05) +feat: number-box组件新增按钮圆角/按钮宽度/数据框背景色/迷你模式 +## 3.3.64(2025-01-18) +feat: 日历组件支持自定义星期文案 + +## 3.3.63(2025-01-13) +fix: cate-tab支持支付宝小程序 + +fix: textarea 修复 placeholder-style + +fix: 修复在图片加载及加载失败时容器宽度 + +fix: waterfall组件报错Maximum recursive updates + +## 3.3.62(2025-01-10) +feat: sleder滑动选择器双滑块增加外层触发值的变动功能 + +fix: picker支持hasInput优化 + +## 3.3.61(2024-12-31) +fix: 修复微信getSystemInfoSync接口废弃警告 + +fix: 'u-status-bar' symbol missing + +## 3.3.60(2024-12-30) +feat: 日期组件支持禁用 + +fix: ts定义修复 #600 + +feat: Tabs组件选中时增加一个active的class #595 + +## 3.3.59(2024-12-30) +fix: Property "isH5" was accessed during render + +## 3.3.58(2024-12-26) +fix: slider组件change事件传参 + +## 3.3.57(2024-12-23) +fix: slider组件change事件传参 + +feat: 更新u-picker组件增加当前选中class类名 + +## 3.3.56(2024-12-18) +feat: 在u-alert组件中添加关闭事件 + +## 3.3.55(2024-12-17) +add: swiper增加双向绑定 + +## 3.3.54(2024-12-11) +add: qrcode支持props控制是否开启点击预览 + +add: 新增cate-tab垂直分类组件 + +## 3.3.53(2024-12-10) +fix: 修复popup居中模式点击内容区域触发关闭 + +## 3.3.52(2024-12-09) +add: notice-bar支持justifyContent属性 + +## 3.3.51(2024-12-09) +add: radio增加label插槽 + +## 3.3.50(2024-12-05) +fix: 优化popup等对禁止背景滚动机制 + +add: slider在弹窗使用示例 + +fix: card组件类名问题 + +## 3.3.49(2024-12-02) +fix: 去除album多余的$u引用 + +fix: 优化图片组件兼容性 + +add: picker组件增加zIndex属性 + +add: text增加是否占满剩余空间属性 + +add: input颜色示例 + +## 3.3.48(2024-11-29) +add: 文本行数限制样式提高到10行 + +del: 去除不跨端的inputmode +## 3.3.47(2024-11-28) +fix: 时间选择器在hasInput模式下部分机型键盘弹出 + +## 3.3.46(2024-11-26) +fix: 修复text传递事件参数 + +## 3.3.45(2024-11-24) +add: navbar组件支持配置标题颜色 + +fix: 边框按钮警告类型下颜色变量使用错误 + +## 3.3.43(2024-11-18) +fix: 支持瀑布流组件v-model置为[] + +add: 新增字符串路径访问工具方法getValueByPath + +add: 新增float-button悬浮按钮组件 + +## 3.3.42(2024-11-15) +add: button组件支持stop参数阻止冒泡 + +## 3.3.41(2024-11-13) +fix: u-radio-group invalid import + +improvement: 优化图片组件宽高及修复事件event传递 + +## 3.3.40(2024-11-11) +add: 组件radioGroup增加gap属性用于设置item间隔 + +fix: 修复H5全局导入 + +## 3.3.39(2024-11-04) +fix: 修复相册组件 + +## 3.3.38(2024-11-04) +fix: 修复视频预览报错 #510 + +add: album组件增加stop参数支持阻止事件冒泡 + +## 3.3.37(2024-10-21) +fix: 修复因为修改组件名称前缀,导致h5打包后$parent方法内找不到父组件的问题 + +fix: 修复datetime-picker选择2000年以前日期出错 + +## 3.3.36(2024-10-09) +fix: toast 自动关闭 + +feat: 增加微信小程序用户昵称审核完毕回调及修改 ts 定义文件 + +## 3.3.35(2024-10-08) +feat: modal和picker支持v-model:show双向绑定 + +feat: 支持checkbox使用slot自定义label后自带点击事件 #522 + +feat: swipe-action支持自动关闭特性及初始化打开状态 + +## 3.3.34(2024-09-23) +feat: 支持toast设置duration值为-1时不自动关闭 + +## 3.3.33(2024-09-18) +fix: 修复test.date('008')等验证结果不准确 + +## 3.3.32(2024-09-09) +fix: u-keyboard名称冲突warning + +## 3.3.31(2024-08-31) +feat: qrcode初步支持nvue + +## 3.3.30(2024-08-30) +fix: slider兼容step为字符串类型 + +## 3.3.29(2024-08-30) +fix: 修复tabs组件current参数为字符串处理逻辑 + +## 3.3.28(2024-08-26) +fix: list组件滑动偏移量不一样取绝对值导致iOS下拉偏移量计算错误 + +## 3.3.27(2024-08-22) +fix: 修复up-datetime-picker组件toolbarRightSlot定义缺失 + +fix: 修复FormItem的rules更新错误的问题 + +## 3.3.26(2024-08-22) +fix: 批量注册全局组件优化 + +## 3.3.25(2024-08-21) +fix: 修复slider在app-vue下样式问题 + +## 3.3.24(2024-08-19) +fix: 修复时间选择器hasInput模式小程序不生效 + +feat: 支持H5导入所有组件 + +## 3.3.23(2024-08-17) +feat: swipe-action增加closeAll方法 + +fix: 兼容tabs在某些场景下index小于0时自动设置为0 + +add: 通用mixin新增navTo页面跳转方法 + +## 3.3.21(2024-08-15) +improvement: 优化二维码组件loading及支持预览与长按事件 #351 + +fix: 修复swipe-action自动关闭其它功能及组件卸载自动关闭 + +## 3.3.20(2024-08-15) +refactor: props默认值文件移至组件文件夹内便于查找 +## 3.3.19(2024-08-14) +fix: 修复2被rpx兼容处理只在数字值生效 + +add: 增加swiper自定义插槽示例 + +## 3.3.18(2024-08-13) +feat: 新增支持datetime-picker工具栏插槽及picker插槽支持修复 +## 3.3.17(2024-08-12) +feat: swiper组件增加默认slot便于自定义 + +feat: grid新增间隔参数 + +feat: picker新增toolbar-right和toolbar-bottom插槽 + +## 3.3.16(2024-08-12) +fix: 解决swiper中title换行后多余的内容未被遮挡问题 + +fix: 修复迷你导航适配异形屏 + +## 3.3.15(2024-08-09) +fix: 修复默认单位设置为rpx时一些组件高度间距异常 + +fix: 修复日历在rpx单位下布局异常 + +feat: code-input支持App端展示输入光标 + +## 3.3.14(2024-08-09) +add: 增加box组件 + +add: 增加card卡片组件 + + +## 3.3.13(2024-08-08) +feat: input支持调用原生组件的focus和blur方法 + +improvement: grid-item条件编译优化 + +add: 新增迷你导航组件 + +## 3.3.12(2024-08-06) +improvement: $u挂载时机调整便于打包分离chunk + +fix: steps新增itemStyle属性名称冲突 + +## 3.3.11(2024-08-05) +feat: 新增支持upload组件的deletable/maxCount/accept变更监听 #333 + +feat: 新增支持tabs在swiper中使用 + +feat: 新增FormItem支持独立设置验证规则rules + +fix: 修复index-list未设置$slots.header时索引高亮失效 + +## 3.3.10(2024-08-02) +fix: 修复index-list偶发的滑动最后一个索引报错top不存在 + +fix: 修复gird在QQ、抖音小程序下布局 + +feat: 优化step支持自定义样式prop + +feat: action-sheet组件支持v-model:show双向绑定 + +fix: 小程序下steps和grid都统一采用grid布局 + +fix: 修复支付宝小程序下input类型为数字时双向绑定失效 + +feat : form 表单 validate 校验不通过后 error增加字段prop信息 #304 + +fix: form组件异步校异常验问题 #393 + +## 3.3.9(2024-08-01) +fix: 优化获取nvue元素 + +feat: modal新增contentTextAlign设置文案对齐方式 + +fix: 修复NVUE下tabbar文字不显示 #458 + +feat: loading-page增加zIndex属性 + +fix: 相册在宽度较小时换行问题 + +feat: album相册增加自适应自动换行模式 + +feat: album相册增加图片尺寸单位prop + +fix: 修复calendar日历月份居中 + +## 3.3.8(2024-07-31) +feat: slider支持进度条任意位置触发按钮拖动 + +fix: 修复app-vue下modal标题不居中 + +fix: #459 TS setConfig 声明异常 + +feat: tabs组件增加longPress长按事件 + +feat: 新增showRight属性控制collapse右侧图标显隐 + +fix: 优化nvue下css警告 + +## 3.3.7(2024-07-29) +feat: 支持IndexList组件支持在弹窗等场景下使用及联动优化 + +feat: popup组件支持v-model:show双向绑定 + +feat: 优化tabs的current双向绑定 + +fix: checkbox独立使用时checked赋初始值可以,但是手动切换时值没有做双向绑定! #455 + +feat: slider组件支持区间双滑块 + +fix: toast 支持自定义图标?可传入了决对路径的 icon也没有用 #409 + +feat: form-item校验失败时 增加class方便自定义显示错误的展示方式 #394 + +fix: up-cell的required配置不生效 #395 + +fix: 横向滚动组件,微信小程序编译后会有警告 #415 + +fix: u-picker内部对默认值defaultIndex的监听 #425 + +feat: toast 组件支持遮掩层穿透 #417 + +fix: 兼容vue的slot编译bug #423 + +fix: upload 微信小程序 点击预览视频报错 #424 + +fix: u-number-box 组件修改【integer, decimalLength, min, max 】props时没有触发绑定值更新 #429 + +feat: Tabs组件能否支持自定义插槽 #439 + +feat: ActionSheet 可以配置最大高度吗, 我当做select使用了。 #445 + +fix: cursor-pointer优化 + +feat: 新版slider组件兼容NVUE改造 + +feat: 新增slider组件手动实现以支持样式自定义 + +perf:补充TS声明提示信息 + +修复:ActionSheet 操作菜单cancelText属性为空DOM节点还存在并且可以点击问题 + +fix: 去除预留的beforeDestroy兼容容易在某些sdk下不识别条件编译 + +## 3.3.6(2024-07-23) +feat: u-album组件添加radius,shape参数,定义参考当前u-image参数 + +fix: 修复了calendar组件title和日期title未垂直居中的问题 + +fix: update:modelValue缺失emit定义 + +## 3.3.5(2024-07-10) +picker组件支持hasInput模式 + +## 3.3.4(2024-07-07) +fix: input组件双向绑定问题 #419 + +lazy-load完善emit + +优化通用小程序分享 + +## 3.3.2(2024-06-27) +fix: 在Nvue环境中编译,出现大量警告 #406 +## 3.3.1(2024-06-27) +u-button组件报错,找不到button mixins #407 +## 3.3.0(2024-06-27) +feat: checkbox支持label设置slot + +feat: modal增加customClass + +feat: navbar、popup、tabs、text支持customClass + +fix: cell组建缺少flex布局 + +fix: 修复微信小程序真机调试时快速输入出现文本回退问题 + +feat: tag增加默认slot + +公共mixin改造为按需导入语法 + +refactor: 组件props混入mixin改造为按需导入语法 + +fix: u-tabbar 安卓手机点击按钮变蓝问题 #396 + +feat: upload组建增加extension属性 + +fix: upload组件参数mode添加left + +fix: 修复阴影在非nvue时白色背景色不显示 + +## 3.2.24(2024-06-11) +fix: 修复时间选择器confirm事件触发时机导致2次才会触发v-model更新 +## 3.2.23(2024-05-30) +fix: #378 H5 u-input 在表单中初始值为空也会触发一次 formValidate(this,"change")事件导致进入页面直接校验了一次 + +fix: #373 搜索组件up-search的@clear事件无效 + +fix: #372 ActionSheet 组件的取消按钮触发区域太小 + +## 3.2.22(2024-05-13) +上传组件支持微信小程序预览视频 + +修复折叠面板右侧箭头不显示 + +修复uxp2px + +## 3.2.21(2024-05-10) +fix: loading-icon修复flex布局 +## 3.2.20(2024-05-10) +修复瀑布流大小写#355 +## 3.2.19(2024-05-10) +去除意外的文件引入 +## 3.2.18(2024-05-09) +fix: 349 popup 组件设置 zIndex 属性后,组件渲染异常# +feat: 搜索框增加adjustPosition属性 +fix: #331增加u-action-sheet__cancel +优化mixin兼容性 +feat: #326 up-list增加下拉刷新功能 +fix: #319 优化up-tabs参数与定义匹配 +fix: index-list组件微信小程序端使用自定义导航栏异常 +fix: #285 pickerimmediateChange 写死为true +fix: #111 u-scroll-list组件,隐藏指示器后报错, 提示找不到ref +list增加微信小程序防抖配置 + +## 3.2.17(2024-05-08) +fix: 支付宝小程序二维码渲染 +## 3.2.16(2024-05-06) +修复tabs中,当前激活样式的undefined bug + +fix: #341u-code 倒计时没结束前退出,再次进入结束后退出界面,再次进入重新开始倒计时bug + +受到uni-app内置text样式影响修复 + +## 3.2.15(2024-04-28) +优化时间选择器hasInput模式初始化值 +## 3.2.14(2024-04-24) +去除pleaseSetTranspileDependencies + +http采用useStore + +## 3.2.13(2024-04-22) +修复modal标题样式 + +优化日期选择器hasInput模式宽度 + +## 3.2.12(2024-04-22) +修复color应用 +## 3.2.11(2024-04-18) +修复import化带来的问题 +## 3.2.10(2024-04-17) +完善input清空事件App端失效的兼容性 + +修复日历组件二次打开后当前月份显示不正确 + +## 3.2.9(2024-04-16) +组件内uni.$u用法改为import引入 + +规范化及兼容性增强 + +## 3.2.8(2024-04-15) +修复up-tag语法错 +## 3.2.7(2024-04-15) +修复下拉菜单背景色在支付宝小程序无效 + +setConfig改为浅拷贝解决无法用import导入代替uni.$u.props设置 + +## 3.2.6(2024-04-14) +修复某些情况下滑动单元格默认右侧按钮是展开的问题 +## 3.2.5(2024-04-13) +调整分段器尺寸及修复窗口大小改变时重新计算尺寸 + +多个组件支持cursor-pointer增强PC端体验 + +## 3.2.4(2024-04-12) +初步支持typescript +## 3.2.3(2024-04-12) +fix: 修复square属性在小程序下无效问题 + +fix:修复lastIndex异常导致的column异常问题 + +fix: alipayapp picker style + +feat(button): 添加用户同意隐私协议事件回调 + +fix: input switch password + +fix: 修复u-code组件keepRuning失效问题 + +feat: form-item添加labelPosition属性 + +新增dropdown组件 + +分段器支持内部current值 + +优化cell和action-sheet视觉大小 + +修复tabs文字换行 + +## 3.2.2(2024-04-11) +修复换行符问题 +## 3.2.1(2024-04-11) +修复演示H5二维码 + +fix: #270 ReadMore 展开阅读更多内容变化兼容 + +fix: #238Calendar组件maxDate修改为不能小于minDate + +checkbox支持独立使用 + +修复popup中在微信小程序中真机调试滚动失效 + +## 3.2.0(2024-04-10) +修复轮播图在nvue显示 +修复疑似u-slider名称被占用导致slider在App下不显示 +解决微信小程序提示 Some selectors are not allowed in component wxss +示例中u-前缀统一为up- +增加瀑布流与图片懒加载组件 +fix: #308修复tag组件缺失iconColor参数 +fix: #297使用grid布局解决目前编译为抖音小程序无法开启virtualHost +## 3.1.52(2024-04-07) +工具类方法调用import化改造 +新增up-copy复制组件 +## 3.1.51(2024-04-07) +优化时间选择器自带输入框格式化显示 +防止按钮文字换行 +修复订单列表模板滑动 +增加u-qrcode二维码组件 +## 3.1.49(2024-03-27) +日期时间组件支持自带输入框 +fix: popup弹窗滚动穿透问题 +fix: 修复小程序numberbox bug +## 3.1.48(2024-03-18) +fix:[plugin:uni:pre-css] Unbalanced delimiter found in string +## 3.1.47(2024-03-18) +fix: setConfig设置组件默认参数无效问题 +fix: 修复自定义图标无效问题 +feat: 增加u-form-item单独设置规则变量 +fix:#293小程序是自定义导航栏的时候即传了customNavHeight的时候会出现跳转偏移的情况 + +## 3.1.46(2024-01-29) +beforeUnmount +## 3.1.45(2024-01-24) +fix: #262ext组件为超链接的情况下size属性不生效 +fix: #263最新版本3.1.42中微信小程序u-swipe-action-item报错 +fix: #224最新版本3.1.42中微信小程序u-swipe-action-item报错 +fix: #263支持支付宝小程序 +fix: #261u-input在直接修改v-model的绑定值时,每隔一次会无法出发change事件 +优化折叠面板兼容微信小程序 +## 3.1.42(2024-01-15) +修复u-number-box默认值0时在小程序不显示值 +优化u-code的timer判断 +优化支付宝小程序下textarea字数统计兼容 +优化u-calendar +## 3.1.41(2023-11-18) +#215优化u-cell图标容器间距问题 +## 3.1.40(2023-11-16) +修复u-slider双向绑定 +## 3.1.39(2023-11-10) +修复头条小程序不支持env(safe-area-inset-bottom) +优化#201u-grid 指定列数导致闪烁 +#193IndexList 索引列表 高度错误 +其他优化 +## 3.1.38(2023-10-08) +修复u-slider +## 3.1.37(2023-09-13) +完善emits定义及修复code-input双向数据绑定 +## 3.1.36(2023-08-08) +修复富文本事件名称大小写 +## 3.1.35(2023-08-02) +修复编译到支付宝小程序u-form报错 +## 3.1.34(2023-07-27) +修复App打包uni.$u.mpMixin方式sdk暂时不支持导致报错 +## 3.1.33(2023-07-13) +修复弹窗进入动画、模板页面样式等 +## 3.1.31(2023-07-11) +修复dayjs引用 +## 3.0.8(2022-07-12) +修复u-tag默认宽度撑满容器 +## 3.0.7(2022-07-12) +修复u-navbar自定义插槽演示示例 +## 3.0.6(2022-07-11) +修复u-image缺少emits申明 +## 3.0.5(2022-07-11) +修复u-upload缺少emits申明 +## 3.0.4(2022-07-10) +修复u-textarea/u-input/u-datetime-picker/u-number-box/u-radio-group/u-switch/u-rate在vue3下数据绑定 +## 3.0.3(2022-07-09) +启用自建演示二维码 +## 3.0.2(2022-07-09) +修复dayjs/clipboard等导致打包报错 +## 3.0.1(2022-07-09) +增加插件市场地址 +## 3.0.0(2022-07-09) +# uview-plus(vue3)初步发布 +## 3.8.39 + +- feat: tabbar 新增多种风格预设、动态图标切换与轻量选中动画 +- improvment: tabbar 补充高颜值本地图标示例并优化发布型底栏视觉 diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet-data/u-action-sheet-data.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet-data/u-action-sheet-data.vue new file mode 100644 index 0000000..234d5cf --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet-data/u-action-sheet-data.vue @@ -0,0 +1,109 @@ + + + + + \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js new file mode 100644 index 0000000..bc27648 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js @@ -0,0 +1,28 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-08-16 10:52:35 + * @FilePath : /uview-plus/libs/config/props/actionSheet.js + */ +export default { + // action-sheet组件 + actionSheet: { + show: false, + title: '', + description: '', + actions: [], + nameKey: 'name', + subnameKey: 'subnameKey', + index: '', + cancelText: '', + closeOnClickAction: true, + safeAreaInsetBottom: true, + openType: '', + closeOnClickOverlay: true, + round: 0, + wrapMaxHeight: '600px' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/props.js new file mode 100644 index 0000000..e08c9af --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/props.js @@ -0,0 +1,80 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @LastAuthor : jry + * @lastTime : 2025-08-16 10:52:35 + * @FilePath : /uview-plus/libs/config/props/props.js + */ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 操作菜单是否展示 (默认false) + show: { + type: Boolean, + default: () => defProps.actionSheet.show + }, + // 标题 + title: { + type: String, + default: () => defProps.actionSheet.title + }, + // 选项上方的描述信息 + description: { + type: String, + default: () => defProps.actionSheet.description + }, + // 数据 + actions: { + type: Array, + default: () => defProps.actionSheet.actions + }, + // 选项名称key + nameKey: { + type: String, + default: () => defProps.actionSheet.nameKey + }, + // 选项子名称key + subnameKey: { + type: String, + default: () => defProps.actionSheet.subnameKey + }, + // 取消按钮的文字,不为空时显示按钮 + cancelText: { + type: String, + default: () => defProps.actionSheet.cancelText + }, + // 点击某个菜单项时是否关闭弹窗 + closeOnClickAction: { + type: Boolean, + default: () => defProps.actionSheet.closeOnClickAction + }, + // 处理底部安全区(默认true) + safeAreaInsetBottom: { + type: Boolean, + default: () => defProps.actionSheet.safeAreaInsetBottom + }, + // 小程序的打开方式 + openType: { + type: String, + default: () => defProps.actionSheet.openType + }, + // 点击遮罩是否允许关闭 (默认true) + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.actionSheet.closeOnClickOverlay + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: () => defProps.actionSheet.round + }, + // 选项区域最大高度 + wrapMaxHeight: { + type: [String], + default: () => defProps.actionSheet.wrapMaxHeight + }, + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue new file mode 100644 index 0000000..44ffb28 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue @@ -0,0 +1,340 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-agreement/u-agreement.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-agreement/u-agreement.vue new file mode 100644 index 0000000..51efca1 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-agreement/u-agreement.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/album.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/album.js new file mode 100644 index 0000000..e7568bf --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/album.js @@ -0,0 +1,28 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-08-16 16:32:24 + * @FilePath : /uview-plus/libs/config/props/album.js + */ +export default { + // album 组件 + album: { + urls: [], + keyName: '', + singleSize: 180, + multipleSize: 70, + space: 6, + singleMode: 'scaleToFill', + multipleMode: 'aspectFill', + maxCount: 9, + previewFullImage: true, + rowCount: 3, + showMore: true, + autoWrap: false, + unit: 'px', + stop: true, + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/props.js new file mode 100644 index 0000000..a8d5474 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/props.js @@ -0,0 +1,95 @@ +/* + * @Author : jry + * @Description : + * @version : 3.0 + * @LastAuthor : jry + * @lastTime : 2025-08-16 16:35:24 + * @FilePath : /uview-plus/components/u-album/props.js + */ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 图片地址,Array|Array形式 + urls: { + type: Array, + default: () => defProps.album.urls + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: () => defProps.album.keyName + }, + // 单图时,图片长边的长度 + singleSize: { + type: [String, Number], + default: () => defProps.album.singleSize + }, + // 多图时,图片边长 + multipleSize: { + type: [String, Number], + default: () => defProps.album.multipleSize + }, + // 多图时,图片水平和垂直之间的间隔 + space: { + type: [String, Number], + default: () => defProps.album.space + }, + // 单图时,图片缩放裁剪的模式 + singleMode: { + type: String, + default: () => defProps.album.singleMode + }, + // 多图时,图片缩放裁剪的模式 + multipleMode: { + type: String, + default: () => defProps.album.multipleMode + }, + // 最多展示的图片数量,超出时最后一个位置将会显示剩余图片数量 + maxCount: { + type: [String, Number], + default: () => defProps.album.maxCount + }, + // 是否可以预览图片 + previewFullImage: { + type: Boolean, + default: () => defProps.album.previewFullImage + }, + // 每行展示图片数量,如设置,singleSize和multipleSize将会无效 + rowCount: { + type: [String, Number], + default: () => defProps.album.rowCount + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: () => defProps.album.showMore + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.image.shape + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: () => defProps.image.radius + }, + // 自适应换行 + autoWrap: { + type: Boolean, + default: () => defProps.album.autoWrap + }, + // 单位 + unit: { + type: [String], + default: () => defProps.album.unit + }, + // 阻止点击冒泡 + stop: { + type: Boolean, + default: () => defProps.album.stop + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/u-album.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/u-album.vue new file mode 100644 index 0000000..fb6b58d --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-album/u-album.vue @@ -0,0 +1,344 @@ + + + + + \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/alert.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/alert.js new file mode 100644 index 0000000..fb543c0 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/alert.js @@ -0,0 +1,26 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-08-17 17:23:53 + * @FilePath : /uview-plus/libs/config/props/alert.js + */ +export default { + // alert警告组件 + alert: { + title: '', + type: 'warning', + description: '', + closable: false, + showIcon: false, + effect: 'light', + center: false, + fontSize: 14, + transitionMode: 'fade', + duration: 0, + icon: '', + value: true + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/props.js new file mode 100644 index 0000000..88fb972 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/props.js @@ -0,0 +1,75 @@ +/* + * @Author : jry + * @Description : + * @version : 3.0 + * @LastAuthor : jry + * @lastTime : 2025-08-17 17:23:53 + * @FilePath : /uview-plus/libs/config/props/props.js + */ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 显示文字 + title: { + type: String, + default: () => defProps.alert.title + }, + // 主题,success/warning/info/error + type: { + type: String, + default: () => defProps.alert.type + }, + // 辅助性文字 + description: { + type: String, + default: () => defProps.alert.description + }, + // 是否可关闭 + closable: { + type: Boolean, + default: () => defProps.alert.closable + }, + // 是否显示图标 + showIcon: { + type: Boolean, + default: () => defProps.alert.showIcon + }, + // 浅或深色调,light-浅色,dark-深色 + effect: { + type: String, + default: () => defProps.alert.effect + }, + // 文字是否居中 + center: { + type: Boolean, + default: () => defProps.alert.center + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.alert.fontSize + }, + // 动画类型 + transitionMode: { + type: [String], + default: () => defProps.alert.transitionMode + }, + // 自动定时关闭毫秒 + duration: { + type: [Number], + default: () => defProps.alert.duration + }, + // 自定义图标 + icon: { + type: [String], + default: () => defProps.alert.icon + }, + // 是否显示 + modelValue: { + type: [Boolean], + default: () => defProps.alert.value + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/u-alert.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/u-alert.vue new file mode 100644 index 0000000..012fbf3 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-alert/u-alert.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/avatarGroup.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/avatarGroup.js new file mode 100644 index 0000000..6e81ba3 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/avatarGroup.js @@ -0,0 +1,23 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/avatarGroup.js + */ +export default { + // avatarGroup 组件 + avatarGroup: { + urls: [], + maxCount: 5, + shape: 'circle', + mode: 'scaleToFill', + showMore: true, + size: 40, + keyName: '', + gap: 0.5, + extraValue: 0 + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/props.js new file mode 100644 index 0000000..96ed871 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/props.js @@ -0,0 +1,54 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 头像图片组 + urls: { + type: Array, + default: () => defProps.avatarGroup.urls + }, + // 最多展示的头像数量 + maxCount: { + type: [String, Number], + default: () => defProps.avatarGroup.maxCount + }, + // 头像形状 + shape: { + type: String, + default: () => defProps.avatarGroup.shape + }, + // 图片裁剪模式 + mode: { + type: String, + default: () => defProps.avatarGroup.mode + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: () => defProps.avatarGroup.showMore + }, + // 头像大小 + size: { + type: [String, Number], + default: () => defProps.avatarGroup.size + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: () => defProps.avatarGroup.keyName + }, + // 头像之间的遮挡比例 + gap: { + type: [String, Number], + validator(value) { + return value >= 0 && value <= 1 + }, + default: () => defProps.avatarGroup.gap + }, + // 需额外显示的值 + extraValue: { + type: [Number, String], + default: () => defProps.avatarGroup.extraValue + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/u-avatar-group.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/u-avatar-group.vue new file mode 100644 index 0000000..6635014 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar-group/u-avatar-group.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/avatar.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/avatar.js new file mode 100644 index 0000000..b469247 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/avatar.js @@ -0,0 +1,28 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/avatar.js + */ +export default { + // avatar 组件 + avatar: { + src: '', + shape: 'circle', + size: 40, + mode: 'scaleToFill', + text: '', + bgColor: '#c0c4cc', + color: '#ffffff', + fontSize: 18, + icon: '', + mpAvatar: false, + randomBgColor: false, + defaultUrl: '', + colorIndex: '', + name: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/props.js new file mode 100644 index 0000000..8fa15ac --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/props.js @@ -0,0 +1,81 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +import test from '../../libs/function/test'; +export const props = defineMixin({ + props: { + // 头像图片路径(不能为相对路径) + src: { + type: String, + default: () => defProps.avatar.src + }, + // 头像形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.avatar.shape + }, + // 头像尺寸 + size: { + type: [String, Number], + default: () => defProps.avatar.size + }, + // 裁剪模式 + mode: { + type: String, + default: () => defProps.avatar.mode + }, + // 显示的文字 + text: { + type: String, + default: () => defProps.avatar.text + }, + // 背景色 + bgColor: { + type: String, + default: () => defProps.avatar.bgColor + }, + // 文字颜色 + color: { + type: String, + default: () => defProps.avatar.color + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: () => defProps.avatar.fontSize + }, + // 显示的图标 + icon: { + type: String, + default: () => defProps.avatar.icon + }, + // 显示小程序头像,只对百度,微信,QQ小程序有效 + mpAvatar: { + type: Boolean, + default: () => defProps.avatar.mpAvatar + }, + // 是否使用随机背景色 + randomBgColor: { + type: Boolean, + default: () => defProps.avatar.randomBgColor + }, + // 加载失败的默认头像(组件有内置默认图片) + defaultUrl: { + type: String, + default: () => defProps.avatar.defaultUrl + }, + // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 + colorIndex: { + type: [String, Number], + // 校验参数规则,索引在0-19之间 + validator(n) { + return test.range(n, [0, 19]) || n === '' + }, + default: () => defProps.avatar.colorIndex + }, + // 组件标识符 + name: { + type: String, + default: () => defProps.avatar.name + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/u-avatar.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/u-avatar.vue new file mode 100644 index 0000000..864323e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-avatar/u-avatar.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/backtop.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/backtop.js new file mode 100644 index 0000000..11918bc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/backtop.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/backtop.js + */ +export default { + // backtop组件 + backtop: { + mode: 'circle', + icon: 'arrow-upward', + text: '', + duration: 100, + scrollTop: 0, + top: 400, + bottom: 100, + right: 20, + zIndex: 9, + iconStyle: { + color: '#909399', + fontSize: '19px' + } + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/props.js new file mode 100644 index 0000000..b714641 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/props.js @@ -0,0 +1,56 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 返回顶部的形状,circle-圆形,square-方形 + mode: { + type: String, + default: () => defProps.backtop.mode + }, + // 自定义图标 + icon: { + type: String, + default: () => defProps.backtop.icon + }, + // 提示文字 + text: { + type: String, + default: () => defProps.backtop.text + }, + // 返回顶部滚动时间 + duration: { + type: [String, Number], + default: () => defProps.backtop.duration + }, + // 滚动距离 + scrollTop: { + type: [String, Number], + default: () => defProps.backtop.scrollTop + }, + // 距离顶部多少距离显示,单位px + top: { + type: [String, Number], + default: () => defProps.backtop.top + }, + // 返回顶部按钮到底部的距离,单位px + bottom: { + type: [String, Number], + default: () => defProps.backtop.bottom + }, + // 返回顶部按钮到右边的距离,单位px + right: { + type: [String, Number], + default: () => defProps.backtop.right + }, + // 层级 + zIndex: { + type: [String, Number], + default: () => defProps.backtop.zIndex + }, + // 图标的样式,对象形式 + iconStyle: { + type: Object, + default: () => defProps.backtop.iconStyle + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/u-back-top.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/u-back-top.vue new file mode 100644 index 0000000..d9d8b52 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-back-top/u-back-top.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/badge.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/badge.js new file mode 100644 index 0000000..c5f37ee --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/badge.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/badge.js + */ +export default { + // 徽标数组件 + badge: { + isDot: false, + value: '', + show: true, + max: 999, + type: 'error', + showZero: false, + bgColor: null, + color: null, + shape: 'circle', + numberType: 'overflow', + offset: [], + inverted: false, + absolute: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/props.js new file mode 100644 index 0000000..5ed924b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/props.js @@ -0,0 +1,79 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否显示圆点 + isDot: { + type: Boolean, + default: () => defProps.badge.isDot + }, + // 显示的内容 + value: { + type: [Number, String], + default: () => defProps.badge.value + }, + // 显示的内容 + modelValue: { + type: [Number, String], + default: () => defProps.badge.modelValue + }, + // 是否显示 + show: { + type: Boolean, + default: () => defProps.badge.show + }, + // 最大值,超过最大值会显示 '{max}+' + max: { + type: [Number, String], + default: () => defProps.badge.max + }, + // 主题类型,error|warning|success|primary + type: { + type: String, + default: () => defProps.badge.type + }, + // 当数值为 0 时,是否展示 Badge + showZero: { + type: Boolean, + default: () => defProps.badge.showZero + }, + // 背景颜色,优先级比type高,如设置,type参数会失效 + bgColor: { + type: [String, null], + default: () => defProps.badge.bgColor + }, + // 字体颜色 + color: { + type: [String, null], + default: () => defProps.badge.color + }, + // 徽标形状,circle-四角均为圆角,horn-左下角为直角 + shape: { + type: String, + default: () => defProps.badge.shape + }, + // 设置数字的显示方式,overflow|ellipsis|limit + // overflow会根据max字段判断,超出显示`${max}+` + // ellipsis会根据max判断,超出显示`${max}...` + // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数 + numberType: { + type: String, + default: () => defProps.badge.numberType + }, + // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效 + offset: { + type: Array, + default: () => defProps.badge.offset + }, + // 是否反转背景和字体颜色 + inverted: { + type: Boolean, + default: () => defProps.badge.inverted + }, + // 是否绝对定位 + absolute: { + type: Boolean, + default: () => defProps.badge.absolute + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/u-badge.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/u-badge.vue new file mode 100644 index 0000000..6e03954 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-badge/u-badge.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-barcode/u-barcode.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-barcode/u-barcode.vue new file mode 100644 index 0000000..9512c43 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-barcode/u-barcode.vue @@ -0,0 +1,1000 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/box.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/box.js new file mode 100644 index 0000000..bdef30d --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/box.js @@ -0,0 +1,24 @@ +/* + * @Author : ly + * @Description : + * @version : 4.0 + * @Date : 2026-02-02 23:54:58 + * @LastAuthor : ly + * @lastTime : 2026-02-02 23:54:58 + * @FilePath : /uview-ultra/components/up-box/box.js + */ +export default { + // box 组件 + box: { + bgColors: ['#EEFCFF', '#FCF8FF', '#FDF8F2'], + height: '160px', + borderRadius: '6px', + gap: '15px', + leftIcon: '', + leftTitle: '左', + rightTopIcon: '', + rightTopTitle: '右上', + rightBottomIcon: '', + rightBottomTitle: '右下' + } +} \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/props.js new file mode 100644 index 0000000..d6ddf46 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/props.js @@ -0,0 +1,57 @@ +import { defineMixin } from '../../libs/vue.js' +import defProps from './box.js' + +export const propsBox = defineMixin({ + props: { + // 背景色 + bgColors: { + type: [Array], + default: () => defProps.box.bgColors + }, + // 高度 + height: { + type: [String], + default: () => defProps.box.height + }, + // 圆角 + borderRadius: { + type: [String], + default: () => defProps.box.borderRadius + }, + // 间隔 + gap: { + type: [String], + default: () => defProps.box.gap + }, + // 左侧图标 + leftIcon: { + type: [String], + default: () => defProps.box.leftIcon + }, + // 左侧文案 + leftTitle: { + type: [String], + default: () => defProps.box.leftTitle + }, + // 右上图标 + rightTopIcon: { + type: [String], + default: () => defProps.box.rightTopIcon + }, + // 右上文案 + rightTopTitle: { + type: [String], + default: () => defProps.box.rightTopTitle + }, + // 右下图标 + rightBottomIcon: { + type: [String], + default: () => defProps.box.rightBottomIcon + }, + // 右下文案 + rightBottomTitle: { + type: [String], + default: () => defProps.box.rightBottomTitle + }, + } +}) \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/u-box.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/u-box.vue new file mode 100644 index 0000000..759047e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-box/u-box.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/button.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/button.js new file mode 100644 index 0000000..a38e88f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/button.js @@ -0,0 +1,43 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/button.js + */ +export default { + // button组件 + button: { + hairline: false, + type: 'info', + size: 'normal', + shape: 'square', + plain: false, + disabled: false, + loading: false, + loadingText: '', + loadingMode: 'spinner', + loadingSize: 15, + openType: '', + formType: '', + appParameter: '', + hoverStopPropagation: true, + lang: 'en', + sessionFrom: '', + sendMessageTitle: '', + sendMessagePath: '', + sendMessageImg: '', + showMessageCard: false, + dataName: '', + throttleTime: 0, + hoverStartTime: 0, + hoverStayTime: 200, + text: '', + icon: '', + iconColor: '', + color: '', + stop: true, + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/nvue.scss b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/nvue.scss new file mode 100644 index 0000000..490db7d --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/nvue.scss @@ -0,0 +1,46 @@ +$u-button-active-opacity:0.75 !default; +$u-button-loading-text-margin-left:4px !default; +$u-button-text-color: #FFFFFF !default; +$u-button-text-plain-error-color:$u-error !default; +$u-button-text-plain-warning-color:$u-warning !default; +$u-button-text-plain-success-color:$u-success !default; +$u-button-text-plain-info-color:$u-info !default; +$u-button-text-plain-primary-color:$u-primary !default; +.u-button { + &--active { + opacity: $u-button-active-opacity; + } + + &--active--plain { + background-color: rgb(217, 217, 217); + } + + &__loading-text { + margin-left:$u-button-loading-text-margin-left; + } + + &__text, + &__loading-text { + color:$u-button-text-color; + } + + &__text--plain--error { + color:$u-button-text-plain-error-color; + } + + &__text--plain--warning { + color:$u-button-text-plain-warning-color; + } + + &__text--plain--success{ + color:$u-button-text-plain-success-color; + } + + &__text--plain--info { + color:$u-button-text-plain-info-color; + } + + &__text--plain--primary { + color:$u-button-text-plain-primary-color; + } +} \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/props.js new file mode 100644 index 0000000..c42d019 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/props.js @@ -0,0 +1,159 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否细边框 + hairline: { + type: Boolean, + default: () => defProps.button.hairline + }, + // 按钮的预置样式,info,primary,error,warning,success + type: { + type: String, + default: () => defProps.button.type + }, + // 按钮尺寸,large,normal,small,mini + size: { + type: String, + default: () => defProps.button.size + }, + // 按钮形状,circle(两边为半圆),square(带圆角) + shape: { + type: String, + default: () => defProps.button.shape + }, + // 按钮是否镂空 + plain: { + type: Boolean, + default: () => defProps.button.plain + }, + // 是否禁止状态 + disabled: { + type: Boolean, + default: () => defProps.button.disabled + }, + // 是否加载中 + loading: { + type: Boolean, + default: () => defProps.button.loading + }, + // 加载中提示文字 + loadingText: { + type: [String, Number], + default: () => defProps.button.loadingText + }, + // 加载状态图标类型 + loadingMode: { + type: String, + default: () => defProps.button.loadingMode + }, + // 加载图标大小 + loadingSize: { + type: [String, Number], + default: () => defProps.button.loadingSize + }, + // 开放能力,具体请看uniapp稳定关于button组件部分说明 + // https://uniapp.dcloud.io/component/button + openType: { + type: String, + default: () => defProps.button.openType + }, + // 用于
组件,点击分别会触发 组件的 submit/reset 事件 + // 取值为submit(提交表单),reset(重置表单) + formType: { + type: String, + default: () => defProps.button.formType + }, + // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 + // 只微信小程序、QQ小程序有效 + appParameter: { + type: String, + default: () => defProps.button.appParameter + }, + // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 + hoverStopPropagation: { + type: Boolean, + default: () => defProps.button.hoverStopPropagation + }, + // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 + lang: { + type: String, + default: () => defProps.button.lang + }, + // 会话来源,open-type="contact"时有效。只微信小程序有效 + sessionFrom: { + type: String, + default: () => defProps.button.sessionFrom + }, + // 会话内消息卡片标题,open-type="contact"时有效 + // 默认当前标题,只微信小程序有效 + sendMessageTitle: { + type: String, + default: () => defProps.button.sendMessageTitle + }, + // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 + // 默认当前分享路径,只微信小程序有效 + sendMessagePath: { + type: String, + default: () => defProps.button.sendMessagePath + }, + // 会话内消息卡片图片,open-type="contact"时有效 + // 默认当前页面截图,只微信小程序有效 + sendMessageImg: { + type: String, + default: () => defProps.button.sendMessageImg + }, + // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示, + // 用户点击后可以快速发送小程序消息,open-type="contact"时有效 + showMessageCard: { + type: Boolean, + default: () => defProps.button.showMessageCard + }, + // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 + dataName: { + type: String, + default: () => defProps.button.dataName + }, + // 节流,一定时间内只能触发一次 + throttleTime: { + type: [String, Number], + default: () => defProps.button.throttleTime + }, + // 按住后多久出现点击态,单位毫秒 + hoverStartTime: { + type: [String, Number], + default: () => defProps.button.hoverStartTime + }, + // 手指松开后点击态保留时间,单位毫秒 + hoverStayTime: { + type: [String, Number], + default: () => defProps.button.hoverStayTime + }, + // 按钮文字,之所以通过props传入,是因为slot传入的话 + // nvue中无法控制文字的样式 + text: { + type: [String, Number], + default: () => defProps.button.text + }, + // 按钮图标 + icon: { + type: String, + default: () => defProps.button.icon + }, + // 按钮图标 + iconColor: { + type: String, + default: () => defProps.button.icon + }, + // 按钮颜色,支持传入linear-gradient渐变色 + color: { + type: String, + default: () => defProps.button.color + }, + // 停止冒泡 + stop: { + type: Boolean, + default: () => defProps.button.stop + }, + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/u-button.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/u-button.vue new file mode 100644 index 0000000..99b4833 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/u-button.vue @@ -0,0 +1,577 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/vue.scss b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/vue.scss new file mode 100644 index 0000000..35fe999 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-button/vue.scss @@ -0,0 +1,81 @@ +// nvue下hover-class无效 +$u-button-before-top:50% !default; +$u-button-before-left:50% !default; +$u-button-before-width:100% !default; +$u-button-before-height:100% !default; +$u-button-before-transform:translate(-50%, -50%) !default; +$u-button-before-opacity:0 !default; +$u-button-before-background-color:#000 !default; +$u-button-before-border-color:#000 !default; +$u-button-active-before-opacity:.15 !default; +$u-button-icon-margin-left:4px !default; +$u-button-plain-u-button-info-color:$u-info; +$u-button-plain-u-button-success-color:$u-success; +$u-button-plain-u-button-error-color:$u-error; +$u-button-plain-u-button-warning-color:$u-warning; + +.u-button { + width: 100%; + white-space: nowrap; + + &__text { + white-space: nowrap; + line-height: 1; + } + + &:before { + position: absolute; + top:$u-button-before-top; + left:$u-button-before-left; + width:$u-button-before-width; + height:$u-button-before-height; + border: inherit; + border-radius: inherit; + transform:$u-button-before-transform; + opacity:$u-button-before-opacity; + content: " "; + background-color:$u-button-before-background-color; + border-color:$u-button-before-border-color; + } + + &--active { + &:before { + opacity: .15 + } + } + + &__icon+&__text:not(:empty), + &__loading-text { + margin-left:$u-button-icon-margin-left; + } + + &--plain { + &.u-button--primary { + color: $u-primary; + } + } + + &--plain { + &.u-button--info { + color:$u-button-plain-u-button-info-color; + } + } + + &--plain { + &.u-button--success { + color:$u-button-plain-u-button-success-color; + } + } + + &--plain { + &.u-button--error { + color:$u-button-plain-u-button-error-color; + } + } + + &--plain { + &.u-button--warning { + color:$u-button-plain-u-button-warning-color; + } + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/calendarStrip.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/calendarStrip.js new file mode 100644 index 0000000..5e06896 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/calendarStrip.js @@ -0,0 +1,36 @@ +/* + * @Author : uview-plus + * @Description : calendarStrip default props + * @version : 3.0 + * @Date : 2026-05-29 14:40:00 + */ +import { t } from '../../libs/i18n' + +export default { + calendarStrip: { + modelValue: null, + minDate: 0, + maxDate: 0, + color: '#3c9cff', + weekText: [ + t('up.week.one'), + t('up.week.two'), + t('up.week.three'), + t('up.week.four'), + t('up.week.five'), + t('up.week.six'), + t('up.week.seven') + ], + fullCalendar: true, + fullCalendarProps: {}, + fullMonthNum: 24, + pullDownThreshold: 40, + collapseAfterSelect: true, + readonly: false, + showToday: true, + monthFormat: '', + expandHint: '下拉展开月历', + collapseHint: '上拉收起月历' + } +} + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/props.js new file mode 100644 index 0000000..85ee4f1 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/props.js @@ -0,0 +1,68 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + modelValue: { + type: [String, Number, Date, null], + default: () => defProps.calendarStrip.modelValue + }, + minDate: { + type: [String, Number], + default: () => defProps.calendarStrip.minDate + }, + maxDate: { + type: [String, Number], + default: () => defProps.calendarStrip.maxDate + }, + color: { + type: String, + default: () => defProps.calendarStrip.color + }, + weekText: { + type: Array, + default: () => defProps.calendarStrip.weekText + }, + fullCalendar: { + type: Boolean, + default: () => defProps.calendarStrip.fullCalendar + }, + fullCalendarProps: { + type: Object, + default: () => defProps.calendarStrip.fullCalendarProps + }, + fullMonthNum: { + type: [String, Number], + default: () => defProps.calendarStrip.fullMonthNum + }, + pullDownThreshold: { + type: [String, Number], + default: () => defProps.calendarStrip.pullDownThreshold + }, + collapseAfterSelect: { + type: Boolean, + default: () => defProps.calendarStrip.collapseAfterSelect + }, + readonly: { + type: Boolean, + default: () => defProps.calendarStrip.readonly + }, + showToday: { + type: Boolean, + default: () => defProps.calendarStrip.showToday + }, + monthFormat: { + type: String, + default: () => defProps.calendarStrip.monthFormat + }, + expandHint: { + type: String, + default: () => defProps.calendarStrip.expandHint + }, + collapseHint: { + type: String, + default: () => defProps.calendarStrip.collapseHint + } + } +}) + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/u-calendar-strip.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/u-calendar-strip.vue new file mode 100644 index 0000000..30fbbe3 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar-strip/u-calendar-strip.vue @@ -0,0 +1,507 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/calendar.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/calendar.js new file mode 100644 index 0000000..60ff9a4 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/calendar.js @@ -0,0 +1,55 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/calendar.js + */ +import { t } from '../../libs/i18n' +export default { + // calendar 组件 + calendar: { + title: t("up.calendar.chooseDates"), + showTitle: true, + showSubtitle: true, + mode: 'single', + startText: t("up.common.start"), + endText: t("up.common.end"), + customList: [], + color: '#3c9cff', + minDate: 0, + maxDate: 0, + defaultDate: null, + maxCount: Number.MAX_SAFE_INTEGER, // Infinity + rowHeight: 56, + formatter: null, + showLunar: false, + showMark: true, + confirmText: t("up.common.confirm"), + confirmDisabledText: t("up.common.confirm"), + show: false, + closeOnClickOverlay: false, + readonly: false, + showConfirm: true, + maxRange: Number.MAX_SAFE_INTEGER, // Infinity + rangePrompt: '', + showRangePrompt: true, + allowSameDay: false, + rangeResultMode: 'all', + enableTime: false, + timePrecision: 'minute', + defaultTime: '', + round: 0, + monthNum: 3, + monthSwitch: false, + showToday: true, + todayColor: '', + weekText: [t("up.week.one"), t("up.week.two"), t("up.week.three"), t("up.week.four"), t("up.week.five"), t("up.week.six"), t("up.week.seven")], + forbidDays: [], + forbidDaysToast: t("up.calendar.disabled"), + monthFormat: '', + pageInline: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/header.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/header.vue new file mode 100644 index 0000000..7911734 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/header.vue @@ -0,0 +1,240 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/month.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/month.vue new file mode 100644 index 0000000..695826c --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/month.vue @@ -0,0 +1,663 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/props.js new file mode 100644 index 0000000..8cd4812 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/props.js @@ -0,0 +1,204 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 日历顶部标题 + title: { + type: String, + default: () => defProps.calendar.title + }, + // 是否显示标题 + showTitle: { + type: Boolean, + default: () => defProps.calendar.showTitle + }, + // 是否显示副标题 + showSubtitle: { + type: Boolean, + default: () => defProps.calendar.showSubtitle + }, + // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 + mode: { + type: String, + default: () => defProps.calendar.mode + }, + // mode=range时,第一个日期底部的提示文字 + startText: { + type: String, + default: () => defProps.calendar.startText + }, + // mode=range时,最后一个日期底部的提示文字 + endText: { + type: String, + default: () => defProps.calendar.endText + }, + // 自定义列表 + customList: { + type: Array, + default: () => defProps.calendar.customList + }, + // 主题色,对底部按钮和选中日期有效 + color: { + type: String, + default: () => defProps.calendar.color + }, + // 最小的可选日期 + minDate: { + type: [String, Number], + default: () => defProps.calendar.minDate + }, + // 最大可选日期 + maxDate: { + type: [String, Number], + default: () => defProps.calendar.maxDate + }, + // 默认选中的日期,mode为multiple或range是必须为数组格式 + defaultDate: { + type: [Array, String, Date, null], + default: () => defProps.calendar.defaultDate + }, + // mode=multiple时,最多可选多少个日期 + maxCount: { + type: [String, Number], + default: () => defProps.calendar.maxCount + }, + // 日期行高 + rowHeight: { + type: [String, Number], + default: () => defProps.calendar.rowHeight + }, + // 日期格式化函数 + formatter: { + type: [Function, null], + default: () => defProps.calendar.formatter + }, + // 是否显示农历 + showLunar: { + type: Boolean, + default: () => defProps.calendar.showLunar + }, + // 是否显示月份背景色 + showMark: { + type: Boolean, + default: () => defProps.calendar.showMark + }, + // 确定按钮的文字 + confirmText: { + type: String, + default: () => defProps.calendar.confirmText + }, + // 确认按钮处于禁用状态时的文字 + confirmDisabledText: { + type: String, + default: () => defProps.calendar.confirmDisabledText + }, + // 是否显示日历弹窗 + show: { + type: Boolean, + default: () => defProps.calendar.show + }, + // 是否允许点击遮罩关闭日历 + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.calendar.closeOnClickOverlay + }, + // 是否为只读状态,只读状态下禁止选择日期 + readonly: { + type: Boolean, + default: () => defProps.calendar.readonly + }, + // 是否展示确认按钮 + showConfirm: { + type: Boolean, + default: () => defProps.calendar.showConfirm + }, + // 日期区间最多可选天数,默认无限制,mode = range时有效 + maxRange: { + type: [Number, String], + default: () => defProps.calendar.maxRange + }, + // 范围选择超过最多可选天数时的提示文案,mode = range时有效 + rangePrompt: { + type: String, + default: () => defProps.calendar.rangePrompt + }, + // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 + showRangePrompt: { + type: Boolean, + default: () => defProps.calendar.showRangePrompt + }, + // 是否允许日期范围的起止时间为同一天,mode = range时有效 + allowSameDay: { + type: Boolean, + default: () => defProps.calendar.allowSameDay + }, + // 区间模式下确认返回值格式,all-返回区间内所有日期,boundary-仅返回起止日期 + rangeResultMode: { + type: String, + default: () => defProps.calendar.rangeResultMode + }, + // 是否开启时分秒选择 + enableTime: { + type: Boolean, + default: () => defProps.calendar.enableTime + }, + // 时间精度:hour-仅时,minute-时分,second-时分秒 + timePrecision: { + type: String, + default: () => defProps.calendar.timePrecision + }, + // 默认时间,格式支持 HH / HH:mm / HH:mm:ss + defaultTime: { + type: String, + default: () => defProps.calendar.defaultTime + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: () => defProps.calendar.round + }, + // 最多展示月份数量 + monthNum: { + type: [Number, String], + default: 3 + }, + // 是否启用非滚动的单月切换模式 + monthSwitch: { + type: Boolean, + default: () => defProps.calendar.monthSwitch + }, + // 是否显示今天按钮 + showToday: { + type: Boolean, + default: () => defProps.calendar.showToday + }, + // 今天日期的独立高亮颜色,默认跟随主题色 + todayColor: { + type: String, + default: () => defProps.calendar.todayColor + }, + // 星期文案 + weekText: { + type: Array, + default: defProps.calendar.weekText + }, + forbidDays: { + type: Array, + default: defProps.calendar.forbidDays + }, + forbidDaysToast:{ + type: String, + default: defProps.calendar.forbidDaysToast + }, + monthFormat:{ + type: String, + default: defProps.calendar.monthFormat + }, + // 是否页面内展示 + pageInline:{ + type: Boolean, + default: defProps.calendar.pageInline + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/u-calendar.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/u-calendar.vue new file mode 100644 index 0000000..7bf4043 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/u-calendar.vue @@ -0,0 +1,879 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/util.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/util.js new file mode 100644 index 0000000..4483937 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-calendar/util.js @@ -0,0 +1,86 @@ +import dayjs from '../u-datetime-picker/dayjs.esm.min.js'; +export default { + methods: { + // 设置月份数据 + setMonth() { + // 月初是周几 + const day = dayjs(this.date).date(1).day() + const start = day == 0 ? 6 : day - 1 + + // 本月天数 + const days = dayjs(this.date).endOf('month').format('D') + + // 上个月天数 + const prevDays = dayjs(this.date).endOf('month').subtract(1, 'month').format('D') + + // 日期数据 + const arr = [] + // 清空表格 + this.month = [] + + // 添加上月数据 + arr.push( + ...new Array(start).fill(1).map((e, i) => { + const day = prevDays - start + i + 1 + + return { + value: day, + disabled: true, + date: dayjs(this.date).subtract(1, 'month').date(day).format('YYYY-MM-DD') + } + }) + ) + + // 添加本月数据 + arr.push( + ...new Array(days - 0).fill(1).map((e, i) => { + const day = i + 1 + + return { + value: day, + date: dayjs(this.date).date(day).format('YYYY-MM-DD') + } + }) + ) + + // 添加下个月 + arr.push( + ...new Array(42 - days - start).fill(1).map((e, i) => { + const day = i + 1 + + return { + value: day, + disabled: true, + date: dayjs(this.date).add(1, 'month').date(day).format('YYYY-MM-DD') + } + }) + ) + + // 分割数组 + for (let n = 0; n < arr.length; n += 7) { + this.month.push( + arr.slice(n, n + 7).map((e, i) => { + e.index = i + n + + // 自定义信息 + const custom = this.customList.find((c) => c.date == e.date) + + // 农历 + if (this.lunar) { + const { + IDayCn, + IMonthCn + } = this.getLunar(e.date) + e.lunar = IDayCn == '初一' ? IMonthCn : IDayCn + } + + return { + ...e, + ...custom + } + }) + ) + } + } + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-canvas/u-canvas.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-canvas/u-canvas.vue new file mode 100644 index 0000000..3716925 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-canvas/u-canvas.vue @@ -0,0 +1,423 @@ + + + + + \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/carKeyboard.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/carKeyboard.js new file mode 100644 index 0000000..487a612 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/carKeyboard.js @@ -0,0 +1,15 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/carKeyboard.js + */ +export default { + // 车牌号键盘 + carKeyboard: { + random: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/props.js new file mode 100644 index 0000000..7cca0ae --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/props.js @@ -0,0 +1,17 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/u-car-keyboard.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/u-car-keyboard.vue new file mode 100644 index 0000000..fdb3a55 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-car-keyboard/u-car-keyboard.vue @@ -0,0 +1,314 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/card.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/card.js new file mode 100644 index 0000000..9d71214 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/card.js @@ -0,0 +1,40 @@ +/* + * @Author : jry + * @Description : + * @version : 3.0 + * @Date : 2025-04-26 16:37:21 + * @LastAuthor : jry + * @lastTime : 2025-04-26 16:37:21 + * @FilePath : /uview-plus/libs/config/props/card.js + */ +export default { + // card组件的props + card: { + full: false, + title: '', + titleColor: '#303133', + titleSize: '15px', + subTitle: '', + subTitleColor: '#909399', + subTitleSize: '13px', + border: true, + index: '', + margin: '15px', + borderRadius: '8px', + headStyle: {}, + bodyStyle: {}, + footStyle: {}, + headBorderBottom: true, + footBorderTop: true, + thumb: '', + thumbWidth: '30px', + thumbCircle: false, + padding: '15px', + paddingHead: '', + paddingBody: '', + paddingFoot: '', + showHead: true, + showFoot: true, + boxShadow: 'none' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/props.js new file mode 100644 index 0000000..fa8d72a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/props.js @@ -0,0 +1,134 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const propsCard = defineMixin({ + props: { + // 与屏幕两侧是否留空隙 + full: { + type: Boolean, + default: () => defProps.card.full + }, + // 标题 + title: { + type: String, + default: () => defProps.card.title + }, + // 标题颜色 + titleColor: { + type: String, + default: () => defProps.card.titleColor + }, + // 标题字体大小 + titleSize: { + type: [Number, String], + default: () => defProps.card.titleSize + }, + // 副标题 + subTitle: { + type: String, + default: () => defProps.card.subTitle + }, + // 副标题颜色 + subTitleColor: { + type: String, + default: () => defProps.card.subTitleColor + }, + // 副标题字体大小 + subTitleSize: { + type: [Number, String], + default: () => defProps.card.subTitleSize + }, + // 是否显示外部边框,只对full=false时有效(卡片与边框有空隙时) + border: { + type: Boolean, + default: () => defProps.card.border + }, + // 用于标识点击了第几个 + index: { + type: [Number, String, Object], + default: () => defProps.card.index + }, + // 用于隔开上下左右的边距,带单位的写法,如:"30px 30px","20px 20px 30px 30px" + margin: { + type: String, + default: () => defProps.card.margin + }, + // card卡片的圆角 + borderRadius: { + type: [Number, String], + default: () => defProps.card.borderRadius + }, + // 头部自定义样式,对象形式 + headStyle: { + type: Object, + default: () => defProps.card.headStyle + }, + // 主体自定义样式,对象形式 + bodyStyle: { + type: Object, + default: () => defProps.card.bodyStyle + }, + // 底部自定义样式,对象形式 + footStyle: { + type: Object, + default: () => defProps.card.footStyle + }, + // 头部是否下边框 + headBorderBottom: { + type: Boolean, + default: () => defProps.card.headBorderBottom + }, + // 底部是否有上边框 + footBorderTop: { + type: Boolean, + default: () => defProps.card.footBorderTop + }, + // 标题左边的缩略图 + thumb: { + type: String, + default: () => defProps.card.thumb + }, + // 缩略图宽高 + thumbWidth: { + type: [String, Number], + default: () => defProps.card.thumbWidth + }, + // 缩略图是否为圆形 + thumbCircle: { + type: Boolean, + default: () => defProps.card.thumbCircle + }, + // 给head,body,foot的内边距 + padding: { + type: [String, Number], + default: () => defProps.card.padding + }, + paddingHead: { + type: [String, Number], + default: () => defProps.card.paddingHead + }, + paddingBody: { + type: [String, Number], + default: () => defProps.card.paddingBody + }, + paddingFoot: { + type: [String, Number], + default: () => defProps.card.paddingFoot + }, + // 是否显示头部 + showHead: { + type: Boolean, + default: () => defProps.card.showHead + }, + // 是否显示尾部 + showFoot: { + type: Boolean, + default: () => defProps.card.showFoot + }, + // 卡片外围阴影,字符串形式 + boxShadow: { + type: String, + default: () => defProps.card.boxShadow + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/u-card.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/u-card.vue new file mode 100644 index 0000000..1f11450 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-card/u-card.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cascader/u-cascader.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cascader/u-cascader.vue new file mode 100644 index 0000000..b4f6fc5 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cascader/u-cascader.vue @@ -0,0 +1,371 @@ + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cate-tab/u-cate-tab.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cate-tab/u-cate-tab.vue new file mode 100644 index 0000000..b2940c5 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cate-tab/u-cate-tab.vue @@ -0,0 +1,392 @@ + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/cellGroup.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/cellGroup.js new file mode 100644 index 0000000..8a39d07 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/cellGroup.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/cellGroup.js + */ +export default { + // cell-group组件的props + cellGroup: { + title: '', + border: true, + customStyle: {} + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/props.js new file mode 100644 index 0000000..59c2012 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/props.js @@ -0,0 +1,16 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 分组标题 + title: { + type: String, + default: () => defProps.cellGroup.title + }, + // 是否显示外边框 + border: { + type: Boolean, + default: () => defProps.cellGroup.border + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/u-cell-group.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/u-cell-group.vue new file mode 100644 index 0000000..7c2edd2 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell-group/u-cell-group.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/cell.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/cell.js new file mode 100644 index 0000000..85f395b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/cell.js @@ -0,0 +1,35 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/cell.js + */ +export default { + // cell组件的props + cell: { + customClass: '', + title: '', + label: '', + value: '', + icon: '', + disabled: false, + border: true, + center: false, + url: '', + linkType: 'navigateTo', + clickable: false, + isLink: false, + required: false, + arrowDirection: '', + iconStyle: {}, + rightIconStyle: {}, + rightIcon: 'arrow-right', + titleStyle: {}, + size: '', + stop: true, + name: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/props.js new file mode 100644 index 0000000..73f5210 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/props.js @@ -0,0 +1,112 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 标题 + title: { + type: [String, Number], + default: () => defProps.cell.title + }, + // 标题下方的描述信息 + label: { + type: [String, Number], + default: () => defProps.cell.label + }, + // 右侧的内容 + value: { + type: [String, Number], + default: () => defProps.cell.value + }, + // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) + icon: { + type: String, + default: () => defProps.cell.icon + }, + // 是否禁用cell + disabled: { + type: Boolean, + default: () => defProps.cell.disabled + }, + // 是否显示下边框 + border: { + type: Boolean, + default: () => defProps.cell.border + }, + // 内容是否垂直居中(主要是针对右侧的value部分) + center: { + type: Boolean, + default: () => defProps.cell.center + }, + // 点击后跳转的URL地址 + url: { + type: String, + default: () => defProps.cell.url + }, + // 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作 + linkType: { + type: String, + default: () => defProps.cell.linkType + }, + // 是否开启点击反馈(表现为点击时加上灰色背景) + clickable: { + type: Boolean, + default: () => defProps.cell.clickable + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: () => defProps.cell.isLink + }, + // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) + required: { + type: Boolean, + default: () => defProps.cell.required + }, + // 右侧的图标箭头 + rightIcon: { + type: String, + default: () => defProps.cell.rightIcon + }, + // 右侧箭头的方向,可选值为:left,up,down + arrowDirection: { + type: String, + default: () => defProps.cell.arrowDirection + }, + // 左侧图标样式 + iconStyle: { + type: [Object, String], + default: () => { + return defProps.cell.iconStyle + } + }, + // 右侧箭头图标的样式 + rightIconStyle: { + type: [Object, String], + default: () => { + return defProps.cell.rightIconStyle + } + }, + // 标题的样式 + titleStyle: { + type: [Object, String], + default: () => { + return defProps.cell.titleStyle + } + }, + // 单位元的大小,可选值为large + size: { + type: String, + default: () => defProps.cell.size + }, + // 点击cell是否阻止事件传播 + stop: { + type: Boolean, + default: () => defProps.cell.stop + }, + // 标识符,cell被点击时返回 + name: { + type: [Number, String], + default: () => defProps.cell.name + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/u-cell.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/u-cell.vue new file mode 100644 index 0000000..9c45368 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cell/u-cell.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/checkboxGroup.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/checkboxGroup.js new file mode 100644 index 0000000..d685a0a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/checkboxGroup.js @@ -0,0 +1,29 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/checkboxGroup.js + */ +export default { + // checkbox-group组件 + checkboxGroup: { + name: '', + value: [], + shape: 'square', + disabled: false, + activeColor: '#2979ff', + inactiveColor: '#c8c9cc', + size: 18, + placement: 'row', + labelSize: 14, + labelColor: '#303133', + labelDisabled: false, + iconColor: '#ffffff', + iconSize: 12, + iconPlacement: 'left', + borderBottom: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/props.js new file mode 100644 index 0000000..222d184 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/props.js @@ -0,0 +1,93 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 标识符 + name: { + type: String, + default: () => defProps.checkboxGroup.name + }, + // #ifdef VUE3 + // 绑定的值 + modelValue: { + type: Array, + default: () => defProps.checkboxGroup.value + }, + // #endif + // #ifdef VUE2 + // 绑定的值 + value: { + type: Array, + default: () => defProps.checkboxGroup.value + }, + // #endif + // 形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.checkboxGroup.shape + }, + // 是否禁用全部checkbox + disabled: { + type: Boolean, + default: () => defProps.checkboxGroup.disabled + }, + + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: () => defProps.checkboxGroup.activeColor + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: () => defProps.checkboxGroup.inactiveColor + }, + + // 整个组件的尺寸,默认px + size: { + type: [String, Number], + default: () => defProps.checkboxGroup.size + }, + // 布局方式,row-横向,column-纵向 + placement: { + type: String, + default: () => defProps.checkboxGroup.placement + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: () => defProps.checkboxGroup.labelSize + }, + // label的字体颜色 + labelColor: { + type: [String], + default: () => defProps.checkboxGroup.labelColor + }, + // 是否禁止点击文本操作 + labelDisabled: { + type: Boolean, + default: () => defProps.checkboxGroup.labelDisabled + }, + // 图标颜色 + iconColor: { + type: String, + default: () => defProps.checkboxGroup.iconColor + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: () => defProps.checkboxGroup.iconSize + }, + // 勾选图标的对齐方式,left-左边,right-右边 + iconPlacement: { + type: String, + default: () => defProps.checkboxGroup.iconPlacement + }, + // 竖向配列时,是否显示下划线 + borderBottom: { + type: Boolean, + default: () => defProps.checkboxGroup.borderBottom + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/u-checkbox-group.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/u-checkbox-group.vue new file mode 100644 index 0000000..7563fae --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox-group/u-checkbox-group.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/checkbox.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/checkbox.js new file mode 100644 index 0000000..694dbf8 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/checkbox.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/checkbox.js + */ +export default { + // checkbox组件 + checkbox: { + name: '', + shape: '', + size: '', + checkbox: false, + disabled: '', + activeColor: '', + inactiveColor: '', + iconSize: '', + iconColor: '', + label: '', + labelSize: '', + labelColor: '', + labelDisabled: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/props.js new file mode 100644 index 0000000..66d8150 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/props.js @@ -0,0 +1,76 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // checkbox的名称 + name: { + type: [String, Number, Boolean], + default: () => defProps.checkbox.name + }, + // 形状,square为方形,circle为圆型 + shape: { + type: String, + default: () => defProps.checkbox.shape + }, + // 整体的大小 + size: { + type: [String, Number], + default: () => defProps.checkbox.size + }, + // 是否默认选中 + checked: { + type: Boolean, + default: () => defProps.checkbox.checked + }, + // 是否禁用 + disabled: { + type: [String, Boolean], + default: () => defProps.checkbox.disabled + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: () => defProps.checkbox.activeColor + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: () => defProps.checkbox.inactiveColor + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: () => defProps.checkbox.iconSize + }, + // 图标颜色 + iconColor: { + type: String, + default: () => defProps.checkbox.iconColor + }, + // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式 + label: { + type: [String, Number], + default: () => defProps.checkbox.label + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: () => defProps.checkbox.labelSize + }, + // label的颜色 + labelColor: { + type: String, + default: () => defProps.checkbox.labelColor + }, + // 是否禁止点击提示语选中复选框 + labelDisabled: { + type: [String, Boolean], + default: () => defProps.checkbox.labelDisabled + }, + // 是否独立使用 + usedAlone: { + type: [Boolean], + default: () => false + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/u-checkbox.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/u-checkbox.vue new file mode 100644 index 0000000..d000218 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-checkbox/u-checkbox.vue @@ -0,0 +1,389 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-choose/u-choose.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-choose/u-choose.vue new file mode 100644 index 0000000..4a7f0ef --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-choose/u-choose.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/circleProgress.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/circleProgress.js new file mode 100644 index 0000000..2fd907a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/circleProgress.js @@ -0,0 +1,15 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/circleProgress.js + */ +export default { + // circleProgress 组件 + circleProgress: { + percentage: 30 + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/props.js new file mode 100644 index 0000000..ff1eeaa --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/props.js @@ -0,0 +1,10 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + percentage: { + type: [String, Number], + default: () => defProps.circleProgress.percentage + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/u-circle-progress.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/u-circle-progress.vue new file mode 100644 index 0000000..496bb19 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-circle-progress/u-circle-progress.vue @@ -0,0 +1,200 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-city-locate/u-city-locate.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-city-locate/u-city-locate.vue new file mode 100644 index 0000000..3e0d5e1 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-city-locate/u-city-locate.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/codeInput.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/codeInput.js new file mode 100644 index 0000000..a9003c0 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/codeInput.js @@ -0,0 +1,29 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/codeInput.js + */ +export default { + // codeInput 组件 + codeInput: { + adjustPosition: true, + maxlength: 6, + dot: false, + mode: 'box', + hairline: false, + space: 10, + value: '', + focus: false, + bold: false, + color: '#606266', + fontSize: 18, + size: 35, + disabledKeyboard: false, + borderColor: '#c9cacc', + disabledDot: true + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/props.js new file mode 100644 index 0000000..0a4b1e8 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/props.js @@ -0,0 +1,90 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: () => defProps.codeInput.adjustPosition + }, + // 最大输入长度 + maxlength: { + type: [String, Number], + default: () => defProps.codeInput.maxlength + }, + // 是否用圆点填充 + dot: { + type: Boolean, + default: () => defProps.codeInput.dot + }, + // 显示模式,box-盒子模式,line-底部横线模式 + mode: { + type: String, + default: () => defProps.codeInput.mode + }, + // 是否细边框 + hairline: { + type: Boolean, + default: () => defProps.codeInput.hairline + }, + // 字符间的距离 + space: { + type: [String, Number], + default: () => defProps.codeInput.space + }, + // #ifdef VUE3 + // 预置值 + modelValue: { + type: [String, Number], + default: () => defProps.codeInput.value + }, + // #endif + // #ifdef VUE2 + // 预置值 + value: { + type: [String, Number], + default: () => defProps.codeInput.value + }, + // #endif + // 是否自动获取焦点 + focus: { + type: Boolean, + default: () => defProps.codeInput.focus + }, + // 字体是否加粗 + bold: { + type: Boolean, + default: () => defProps.codeInput.bold + }, + // 字体颜色 + color: { + type: String, + default: () => defProps.codeInput.color + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.codeInput.fontSize + }, + // 输入框的大小,宽等于高 + size: { + type: [String, Number], + default: () => defProps.codeInput.size + }, + // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true + disabledKeyboard: { + type: Boolean, + default: () => defProps.codeInput.disabledKeyboard + }, + // 边框和线条颜色 + borderColor: { + type: String, + default: () => defProps.codeInput.borderColor + }, + // 是否禁止输入"."符号 + disabledDot: { + type: Boolean, + default: () => defProps.codeInput.disabledDot + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/u-code-input.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/u-code-input.vue new file mode 100644 index 0000000..4253eef --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code-input/u-code-input.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/code.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/code.js new file mode 100644 index 0000000..422aae2 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/code.js @@ -0,0 +1,21 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/code.js + */ +import { t } from '../../libs/i18n' +export default { + // code 组件 + code: { + seconds: 60, + startText: t("up.code.send"), + changeText: t("up.code.resendAfter"), + endText: t("up.code.resend"), + keepRunning: false, + uniqueKey: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/props.js new file mode 100644 index 0000000..60977b5 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/props.js @@ -0,0 +1,36 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 倒计时总秒数 + seconds: { + type: [String, Number], + default: () => defProps.code.seconds + }, + // 尚未开始时提示 + startText: { + type: String, + default: () => defProps.code.startText + }, + // 正在倒计时中的提示 + changeText: { + type: String, + default: () => defProps.code.changeText + }, + // 倒计时结束时的提示 + endText: { + type: String, + default: () => defProps.code.endText + }, + // 是否在H5刷新或各端返回再进入时继续倒计时 + keepRunning: { + type: Boolean, + default: () => defProps.code.keepRunning + }, + // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了 + uniqueKey: { + type: String, + default: () => defProps.code.uniqueKey + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/u-code.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/u-code.vue new file mode 100644 index 0000000..3d8359b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-code/u-code.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/col.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/col.js new file mode 100644 index 0000000..9b19160 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/col.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/col.js + */ +export default { + // col 组件 + col: { + span: 12, + offset: 0, + justify: 'start', + align: 'stretch', + textAlign: 'left' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/props.js new file mode 100644 index 0000000..b28decb --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/props.js @@ -0,0 +1,31 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 占父容器宽度的多少等分,总分为12份 + span: { + type: [String, Number], + default: () => defProps.col.span + }, + // 指定栅格左侧的间隔数(总12栏) + offset: { + type: [String, Number], + default: () => defProps.col.offset + }, + // 水平排列方式,可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`) + justify: { + type: String, + default: () => defProps.col.justify + }, + // 垂直对齐方式,可选值为top、center、bottom、stretch + align: { + type: String, + default: () => defProps.col.align + }, + // 文字对齐方式 + textAlign: { + type: String, + default: () => defProps.col.textAlign + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/u-col.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/u-col.vue new file mode 100644 index 0000000..fe28108 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-col/u-col.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/collapseItem.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/collapseItem.js new file mode 100644 index 0000000..f56c74e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/collapseItem.js @@ -0,0 +1,31 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/collapseItem.js + */ +export default { + // collapseItem 组件 + collapseItem: { + title: '', + value: '', + label: '', + disabled: false, + isLink: true, + clickable: true, + border: true, + align: 'left', + name: '', + icon: '', + duration: 300, + showRight: true, + titleStyle: {}, + iconStyle: {}, + rightIconStyle: {}, + cellCustomStyle: {}, + cellCustomClass: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/props.js new file mode 100644 index 0000000..095c571 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/props.js @@ -0,0 +1,97 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 标题 + title: { + type: String, + default: () => defProps.collapseItem.title + }, + // 标题的样式 + titleStyle: { + type: [Object, String], + default: () => { + return defProps.collapseItem.titleStyle + } + }, + // 标题右侧内容 + value: { + type: String, + default: () => defProps.collapseItem.value + }, + // 标题下方的描述信息 + label: { + type: String, + default: () => defProps.collapseItem.label + }, + // 是否禁用折叠面板 + disabled: { + type: Boolean, + default: () => defProps.collapseItem.disabled + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: () => defProps.collapseItem.isLink + }, + // 是否开启点击反馈 + clickable: { + type: Boolean, + default: () => defProps.collapseItem.clickable + }, + // 是否显示内边框 + border: { + type: Boolean, + default: () => defProps.collapseItem.border + }, + // 标题的对齐方式 + align: { + type: String, + default: () => defProps.collapseItem.align + }, + // 唯一标识符 + name: { + type: [String, Number], + default: () => defProps.collapseItem.name + }, + // 标题左侧图片,可为绝对路径的图片或内置图标 + icon: { + type: String, + default: () => defProps.collapseItem.icon + }, + // 面板展开收起的过渡时间,单位ms + duration: { + type: Number, + default: () => defProps.collapseItem.duration + }, + // 显示右侧图标 + showRight: { + type: Boolean, + default: () => defProps.collapseItem.showRight + }, + // 左侧图标样式 + iconStyle: { + type: [Object, String], + default: () => { + return defProps.collapseItem.iconStyle + } + }, + // 右侧箭头图标的样式 + rightIconStyle: { + type: [Object, String], + default: () => { + return defProps.collapseItem.rightIconStyle + } + }, + cellCustomStyle: { + type: [Object, String], + default: () => { + return defProps.collapseItem.cellCustomStyle + } + }, + cellCustomClass: { + type: String, + default: () => defProps.collapseItem.cellCustomClass + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/u-collapse-item.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/u-collapse-item.vue new file mode 100644 index 0000000..957da74 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse-item/u-collapse-item.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/collapse.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/collapse.js new file mode 100644 index 0000000..f2386a0 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/collapse.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/collapse.js + */ +export default { + // collapse 组件 + collapse: { + value: null, + accordion: false, + border: true + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/props.js new file mode 100644 index 0000000..7712603 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/props.js @@ -0,0 +1,21 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 当前展开面板的name,非手风琴模式:[],手风琴模式:string | number + value: { + type: [String, Number, Array, null], + default: () => defProps.collapse.value + }, + // 是否手风琴模式 + accordion: { + type: Boolean, + default: () => defProps.collapse.accordion + }, + // 是否显示外边框 + border: { + type: Boolean, + default: () => defProps.collapse.border + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/u-collapse.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/u-collapse.vue new file mode 100644 index 0000000..81c7af4 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-collapse/u-collapse.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-color-picker/u-color-picker.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-color-picker/u-color-picker.vue new file mode 100644 index 0000000..5a50c97 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-color-picker/u-color-picker.vue @@ -0,0 +1,1095 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/columnNotice.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/columnNotice.js new file mode 100644 index 0000000..07e84cc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/columnNotice.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/columnNotice.js + */ +export default { + // columnNotice 组件 + columnNotice: { + text: '', + icon: 'volume', + mode: '', + color: '#f9ae3d', + bgColor: '#fdf6ec', + fontSize: 14, + speed: 80, + step: false, + duration: 1500, + disableTouch: true, + justifyContent: 'flex-start' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/props.js new file mode 100644 index 0000000..4e3cc1f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 显示的内容,字符串 + text: { + type: [Array], + default: () => defProps.columnNotice.text + }, + // 是否显示左侧的音量图标 + icon: { + type: String, + default: () => defProps.columnNotice.icon + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: () => defProps.columnNotice.mode + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: () => defProps.columnNotice.color + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.columnNotice.bgColor + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: () => defProps.columnNotice.fontSize + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: () => defProps.columnNotice.speed + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: () => defProps.columnNotice.step + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: () => defProps.columnNotice.duration + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: () => defProps.columnNotice.disableTouch + }, + justifyContent: { + type: String, + default: () => defProps.columnNotice.justifyContent + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/u-column-notice.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/u-column-notice.vue new file mode 100644 index 0000000..3ccd926 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-column-notice/u-column-notice.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-copy/u-copy.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-copy/u-copy.vue new file mode 100644 index 0000000..d2ac859 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-copy/u-copy.vue @@ -0,0 +1,72 @@ + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/countDown.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/countDown.js new file mode 100644 index 0000000..99caef5 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/countDown.js @@ -0,0 +1,18 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/countDown.js + */ +export default { + // u-count-down 计时器组件 + countDown: { + time: 0, + format: 'HH:mm:ss', + autoStart: true, + millisecond: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/props.js new file mode 100644 index 0000000..6dbf1c2 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/props.js @@ -0,0 +1,26 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 倒计时时长,单位ms + time: { + type: [String, Number], + default: () => defProps.countDown.time + }, + // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 + format: { + type: String, + default: () => defProps.countDown.format + }, + // 是否自动开始倒计时 + autoStart: { + type: Boolean, + default: () => defProps.countDown.autoStart + }, + // 是否展示毫秒倒计时 + millisecond: { + type: Boolean, + default: () => defProps.countDown.millisecond + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/u-count-down.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/u-count-down.vue new file mode 100644 index 0000000..0c6d231 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/u-count-down.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/utils.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/utils.js new file mode 100644 index 0000000..8c75005 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/countTo.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/countTo.js new file mode 100644 index 0000000..be93a1c --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/countTo.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/countTo.js + */ +export default { + // countTo 组件 + countTo: { + startVal: 0, + endVal: 0, + duration: 2000, + autoplay: true, + decimals: 0, + useEasing: true, + decimal: '.', + color: '#606266', + fontSize: 22, + bold: false, + separator: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/props.js new file mode 100644 index 0000000..0b97c1f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 开始的数值,默认从0增长到某一个数 + startVal: { + type: [String, Number], + default: () => defProps.countTo.startVal + }, + // 要滚动的目标数值,必须 + endVal: { + type: [String, Number], + default: () => defProps.countTo.endVal + }, + // 滚动到目标数值的动画持续时间,单位为毫秒(ms) + duration: { + type: [String, Number], + default: () => defProps.countTo.duration + }, + // 设置数值后是否自动开始滚动 + autoplay: { + type: Boolean, + default: () => defProps.countTo.autoplay + }, + // 要显示的小数位数 + decimals: { + type: [String, Number], + default: () => defProps.countTo.decimals + }, + // 是否在即将到达目标数值的时候,使用缓慢滚动的效果 + useEasing: { + type: Boolean, + default: () => defProps.countTo.useEasing + }, + // 十进制分割 + decimal: { + type: [String, Number], + default: () => defProps.countTo.decimal + }, + // 字体颜色 + color: { + type: String, + default: () => defProps.countTo.color + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.countTo.fontSize + }, + // 是否加粗字体 + bold: { + type: Boolean, + default: () => defProps.countTo.bold + }, + // 千位分隔符,类似金额的分割(¥23,321.05中的",") + separator: { + type: String, + default: () => defProps.countTo.separator + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/u-count-to.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/u-count-to.vue new file mode 100644 index 0000000..36e7cf5 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-count-to/u-count-to.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-coupon/u-coupon.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-coupon/u-coupon.vue new file mode 100644 index 0000000..52b3a27 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-coupon/u-coupon.vue @@ -0,0 +1,405 @@ + + + + + \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cropper/u-cropper.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cropper/u-cropper.vue new file mode 100644 index 0000000..4b08cf5 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-cropper/u-cropper.vue @@ -0,0 +1,1253 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/datetimePicker.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/datetimePicker.js new file mode 100644 index 0000000..78754c9 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/datetimePicker.js @@ -0,0 +1,46 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/datetimePicker.js + */ +import { t } from '../../libs/i18n' +export default { + // datetimePicker 组件 + datetimePicker: { + show: false, + popupMode: 'bottom', + showToolbar: true, + value: '', + title: '', + mode: 'datetime', + maxDate: new Date(new Date().getFullYear() + 10, 0, 1).getTime(), + minDate: new Date(new Date().getFullYear() - 10, 0, 1).getTime(), + minHour: 0, + maxHour: 23, + minMinute: 0, + maxMinute: 59, + minSecond: 0, + maxSecond: 59, + filter: null, + formatter: null, + loading: false, + itemHeight: 44, + cancelText: t("up.common.cancel"), + confirmText: t("up.common.confirm"), + cancelColor: '#909193', + confirmColor: '#3c9cff', + visibleItemCount: 5, + closeOnClickOverlay: false, + defaultIndex: [], + inputBorder: 'surround', + disabled: false, + disabledColor: '', + placeholder: t("up.common.pleaseChoose"), + inputProps: {}, + pageInline: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/dayjs.esm.min.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/dayjs.esm.min.js new file mode 100644 index 0000000..24c6ec9 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/dayjs.esm.min.js @@ -0,0 +1,7 @@ +/** + * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0. + * Original file: /npm/dayjs@1.11.13/dayjs.min.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var t={exports:{}},e=t.exports=function(){var t=1e3,e=6e4,n=36e5,r="millisecond",s="second",i="minute",u="hour",a="day",o="week",c="month",f="quarter",h="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},g=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:g,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),s=n%60;return(e<=0?"+":"-")+g(r,2,"0")+":"+g(s,2,"0")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,s=a}return!r&&s&&(m=s),s||!r&&m},b=function(t,e){if(S(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=w,O.i=S,O.w=function(t,e){return b(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var g=M.prototype;return g.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var s=r[2]-1||0,i=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],s,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)):new Date(r[1],s,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)}}return new Date(e)}(t),this.init()},g.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},g.$utils=function(){return O},g.isValid=function(){return!(this.$d.toString()===l)},g.isSame=function(t,e){var n=b(t);return this.startOf(e)<=n&&n<=this.endOf(e)},g.isAfter=function(t,e){return b(t) { + return {} + } + }, + inputBorder: { + type: String, + default: () => defProps.input.inputBorder + }, + disabled: { + type: Boolean, + default: () => defProps.input.disabled + }, + disabledColor:{ + type: String, + default: () => defProps.input.disabledColor + }, + placeholder: { + type: String, + default: () => defProps.input.placeholder + }, + format: { + type: String, + default: () => '' + }, + // 是否打开组件 + show: { + type: Boolean, + default: () => defProps.datetimePicker.show + }, + // 弹出的方向,可选值为 top bottom right left center + popupMode: { + type: String, + default: () => defProps.picker.popupMode + }, + // 是否展示顶部的操作栏 + showToolbar: { + type: Boolean, + default: () => defProps.datetimePicker.showToolbar + }, + // 工具栏右侧内容 + toolbarRightSlot:{ + type: Boolean, + default: false + }, + // #ifdef VUE2 + // 绑定值 + value: { + type: [String, Number], + default: () => defProps.datetimePicker.value + }, + // #endif + // #ifdef VUE3 + // 绑定值 + modelValue: { + type: [String, Number], + default: () => defProps.datetimePicker.value + }, + // #endif + // 顶部标题 + title: { + type: String, + default: () => defProps.datetimePicker.title + }, + // 展示格式,支持date、time、year-month、datetime、datehour、timesecond、datetimesecond + mode: { + type: String, + default: () => defProps.datetimePicker.mode + }, + // 可选的最大时间 + maxDate: { + type: Number, + // 最大默认值为后10年 + default: () => defProps.datetimePicker.maxDate + }, + // 可选的最小时间 + minDate: { + type: Number, + // 最小默认值为前10年 + default: () => defProps.datetimePicker.minDate + }, + // 可选的最小小时,仅mode=time/timesecond有效 + minHour: { + type: Number, + default: () => defProps.datetimePicker.minHour + }, + // 可选的最大小时,仅mode=time/timesecond有效 + maxHour: { + type: Number, + default: () => defProps.datetimePicker.maxHour + }, + // 可选的最小分钟,仅mode=time/timesecond有效 + minMinute: { + type: Number, + default: () => defProps.datetimePicker.minMinute + }, + // 可选的最大分钟,仅mode=time/timesecond有效 + maxMinute: { + type: Number, + default: () => defProps.datetimePicker.maxMinute + }, + // 可选的最小秒,仅mode=timesecond有效 + minSecond: { + type: Number, + default: () => defProps.datetimePicker.minSecond + }, + // 可选的最大秒,仅mode=timesecond有效 + maxSecond: { + type: Number, + default: () => defProps.datetimePicker.maxSecond + }, + // 选项过滤函数 + filter: { + type: [Function, null], + default: () => defProps.datetimePicker.filter + }, + // 选项格式化函数 + formatter: { + type: [Function, null], + default: () => defProps.datetimePicker.formatter + }, + // 是否显示加载中状态 + loading: { + type: Boolean, + default: () => defProps.datetimePicker.loading + }, + // 各列中,单个选项的高度 + itemHeight: { + type: [String, Number], + default: () => defProps.datetimePicker.itemHeight + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: () => defProps.datetimePicker.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: () => defProps.datetimePicker.confirmText + }, + // 取消按钮的颜色 + cancelColor: { + type: String, + default: () => defProps.datetimePicker.cancelColor + }, + // 确认按钮的颜色 + confirmColor: { + type: String, + default: () => defProps.datetimePicker.confirmColor + }, + // 每列中可见选项的数量 + visibleItemCount: { + type: [String, Number], + default: () => defProps.datetimePicker.visibleItemCount + }, + // 是否允许点击遮罩关闭选择器 + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.datetimePicker.closeOnClickOverlay + }, + // 各列的默认索引 + defaultIndex: { + type: Array, + default: () => defProps.datetimePicker.defaultIndex + }, + // 是否页面内展示 + pageInline:{ + type: Boolean, + default: () => defProps.datetimePicker.pageInline + }, + // 蒙层样式样式 + maskClass: { + type: String, + defualt: '' + }, + // 蒙层样式样式 + maskStyle: { + type: String, + defualt: '' + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.vue new file mode 100644 index 0000000..1fbaa2c --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.vue @@ -0,0 +1,670 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/divider.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/divider.js new file mode 100644 index 0000000..1f9978a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/divider.js @@ -0,0 +1,23 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/divider.js + */ +export default { + // divider组件 + divider: { + dashed: false, + hairline: true, + dot: false, + textPosition: 'center', + text: '', + textSize: 14, + textColor: '#909399', + lineColor: '#dcdfe6' + } + +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/props.js new file mode 100644 index 0000000..ec3fd8f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/props.js @@ -0,0 +1,46 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否虚线 + dashed: { + type: Boolean, + default: () => defProps.divider.dashed + }, + // 是否细线 + hairline: { + type: Boolean, + default: () => defProps.divider.hairline + }, + // 是否以点替代文字,优先于text字段起作用 + dot: { + type: Boolean, + default: () => defProps.divider.dot + }, + // 内容文本的位置,left-左边,center-中间,right-右边 + textPosition: { + type: String, + default: () => defProps.divider.textPosition + }, + // 文本内容 + text: { + type: [String, Number], + default: () => defProps.divider.text + }, + // 文本大小 + textSize: { + type: [String, Number], + default: () => defProps.divider.textSize + }, + // 文本颜色 + textColor: { + type: String, + default: () => defProps.divider.textColor + }, + // 线条颜色 + lineColor: { + type: String, + default: () => defProps.divider.lineColor + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/u-divider.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/u-divider.vue new file mode 100644 index 0000000..edc91bd --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-divider/u-divider.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dragsort/u-dragsort.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dragsort/u-dragsort.vue new file mode 100644 index 0000000..738dc6d --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dragsort/u-dragsort.vue @@ -0,0 +1,405 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown-item/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown-item/props.js new file mode 100644 index 0000000..e5e0265 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown-item/props.js @@ -0,0 +1,47 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // #ifdef VUE3 + // 当前选中项的value值 + modelValue: { + type: [Number, String, Array], + default: '' + }, + // #endif + // #ifdef VUE2 + // 当前选中项的value值 + value: { + type: [Number, String, Array], + default: '' + }, + // #endif + // 菜单项标题 + title: { + type: [String, Number], + default: '' + }, + // 选项数据,如果传入了默认slot,此参数无效 + options: { + type: Array, + default() { + return [] + } + }, + // 是否禁用此菜单项 + disabled: { + type: Boolean, + default: false + }, + // 下拉弹窗的高度 + height: { + type: [Number, String], + default: 'auto' + }, + // 点击遮罩是否可以收起弹窗 + closeOnClickOverlay: { + type: Boolean, + default: true + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown-item/u-dropdown-item.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown-item/u-dropdown-item.vue new file mode 100644 index 0000000..37f4222 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown-item/u-dropdown-item.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown/props.js new file mode 100644 index 0000000..4614b96 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 菜单标题和选项的激活态颜色 + activeColor: { + type: String, + default: '#2979ff' + }, + // 菜单标题和选项的未激活态颜色 + inactiveColor: { + type: String, + default: '#606266' + }, + // 点击遮罩是否关闭菜单 + closeOnClickMask: { + type: Boolean, + default: true + }, + // 点击当前激活项标题是否关闭菜单 + closeOnClickSelf: { + type: Boolean, + default: true + }, + // 过渡时间 + duration: { + type: [Number, String], + default: 300 + }, + // 标题菜单的高度 + height: { + type: [Number, String], + default: 40 + }, + // 是否显示下边框 + borderBottom: { + type: Boolean, + default: false + }, + // 标题的字体大小 + titleSize: { + type: [Number, String], + default: 14 + }, + // 下拉出来的内容部分的圆角值 + borderRadius: { + type: [Number, String], + default: 0 + }, + // 菜单右侧的icon图标 + menuIcon: { + type: String, + default: 'arrow-down' + }, + // 菜单右侧图标的大小 + menuIconSize: { + type: [Number, String], + default: 14 + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue new file mode 100644 index 0000000..75dd599 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue @@ -0,0 +1,272 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/empty.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/empty.js new file mode 100644 index 0000000..c5009a2 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/empty.js @@ -0,0 +1,26 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/empty.js + */ +export default { + // empty组件 + empty: { + icon: '', + text: '', + textColor: '#c0c4cc', + textSize: 14, + iconColor: '#c0c4cc', + iconSize: 90, + mode: 'data', + width: 160, + height: 160, + show: true, + marginTop: 0 + } + +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/props.js new file mode 100644 index 0000000..40edd11 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 内置图标名称,或图片路径,建议绝对路径 + icon: { + type: String, + default: () => defProps.empty.icon + }, + // 提示文字 + text: { + type: String, + default: () => defProps.empty.text + }, + // 文字颜色 + textColor: { + type: String, + default: () => defProps.empty.textColor + }, + // 文字大小 + textSize: { + type: [String, Number], + default: () => defProps.empty.textSize + }, + // 图标的颜色 + iconColor: { + type: String, + default: () => defProps.empty.iconColor + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: () => defProps.empty.iconSize + }, + // 选择预置的图标类型 + mode: { + type: String, + default: () => defProps.empty.mode + }, + // 图标宽度,单位px + width: { + type: [String, Number], + default: () => defProps.empty.width + }, + // 图标高度,单位px + height: { + type: [String, Number], + default: () => defProps.empty.height + }, + // 是否显示组件 + show: { + type: Boolean, + default: () => defProps.empty.show + }, + // 组件距离上一个元素之间的距离,默认px单位 + marginTop: { + type: [String, Number], + default: () => defProps.empty.marginTop + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/u-empty.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/u-empty.vue new file mode 100644 index 0000000..f740663 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-empty/u-empty.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-float-button/u-float-button.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-float-button/u-float-button.vue new file mode 100644 index 0000000..4ffc32b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-float-button/u-float-button.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/formItem.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/formItem.js new file mode 100644 index 0000000..2113cc9 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/formItem.js @@ -0,0 +1,24 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/formItem.js + */ +export default { + // formItem 组件 + formItem: { + label: '', + prop: '', + rules: [], + borderBottom: '', + labelPosition: '', + labelWidth: '', + rightIcon: '', + leftIcon: '', + required: false, + leftIconStyle: '', + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/props.js new file mode 100644 index 0000000..cd434ce --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/props.js @@ -0,0 +1,55 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // input的label提示语 + label: { + type: String, + default: () => defProps.formItem.label + }, + // 绑定的值 + prop: { + type: String, + default: () => defProps.formItem.prop + }, + // 绑定的规则 + rules: { + type: Array, + default: () => defProps.formItem.rules + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: [String, Boolean], + default: () => defProps.formItem.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: () => defProps.formItem.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: () => defProps.formItem.labelWidth + }, + // 右侧图标 + rightIcon: { + type: String, + default: () => defProps.formItem.rightIcon + }, + // 左侧图标 + leftIcon: { + type: String, + default: () => defProps.formItem.leftIcon + }, + // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 + required: { + type: Boolean, + default: () => defProps.formItem.required + }, + leftIconStyle: { + type: [String, Object], + default: () => defProps.formItem.leftIconStyle, + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/u-form-item.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/u-form-item.vue new file mode 100644 index 0000000..b1ee82a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form-item/u-form-item.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/form.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/form.js new file mode 100644 index 0000000..6671b09 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/form.js @@ -0,0 +1,22 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/form.js + */ +export default { + // form 组件 + form: { + model: {}, + rules: {}, + errorType: 'message', + borderBottom: true, + labelPosition: 'left', + labelWidth: 45, + labelAlign: 'left', + labelStyle: {} + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/props.js new file mode 100644 index 0000000..b80d623 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/props.js @@ -0,0 +1,47 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 当前form的需要验证字段的集合 + model: { + type: Object, + default: () => defProps.form.model + }, + // 验证规则 + rules: { + type: [Object, Function, Array], + default: () => defProps.form.rules + }, + // 有错误时的提示方式,message-提示信息,toast-进行toast提示 + // border-bottom-下边框呈现红色,none-无提示 + errorType: { + type: String, + default: () => defProps.form.errorType + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: Boolean, + default: () => defProps.form.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: () => defProps.form.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: () => defProps.form.labelWidth + }, + // lable字体的对齐方式 + labelAlign: { + type: String, + default: () => defProps.form.labelAlign + }, + // lable的样式,对象形式 + labelStyle: { + type: Object, + default: () => defProps.form.labelStyle + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/u-form.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/u-form.vue new file mode 100644 index 0000000..30e1d56 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-form/u-form.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/gap.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/gap.js new file mode 100644 index 0000000..07dd2dc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/gap.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/gap.js + */ +export default { + // gap组件 + gap: { + bgColor: 'transparent', + height: 20, + marginTop: 0, + marginBottom: 0, + customStyle: {} + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/props.js new file mode 100644 index 0000000..77b1d7c --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/props.js @@ -0,0 +1,26 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 背景颜色(默认transparent) + bgColor: { + type: String, + default: () => defProps.gap.bgColor + }, + // 分割槽高度,单位px(默认30) + height: { + type: [String, Number], + default: () => defProps.gap.height + }, + // 与上一个组件的距离 + marginTop: { + type: [String, Number], + default: () => defProps.gap.marginTop + }, + // 与下一个组件的距离 + marginBottom: { + type: [String, Number], + default: () => defProps.gap.marginBottom + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/u-gap.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/u-gap.vue new file mode 100644 index 0000000..aedd439 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-gap/u-gap.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-goods-sku/u-goods-sku.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-goods-sku/u-goods-sku.vue new file mode 100644 index 0000000..e20abfc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-goods-sku/u-goods-sku.vue @@ -0,0 +1,435 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/gridItem.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/gridItem.js new file mode 100644 index 0000000..7aff5c6 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/gridItem.js @@ -0,0 +1,16 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/gridItem.js + */ +export default { + // grid-item组件 + gridItem: { + name: null, + bgColor: 'transparent' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/props.js new file mode 100644 index 0000000..55f957c --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/props.js @@ -0,0 +1,16 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 宫格的name + name: { + type: [String, Number, null], + default: () => defProps.gridItem.name + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.gridItem.bgColor + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/u-grid-item.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/u-grid-item.vue new file mode 100644 index 0000000..cff7bd2 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid-item/u-grid-item.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/grid.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/grid.js new file mode 100644 index 0000000..b98f802 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/grid.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/grid.js + */ +export default { + // grid组件 + grid: { + col: 3, + border: false, + align: 'left' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/props.js new file mode 100644 index 0000000..506baf7 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/props.js @@ -0,0 +1,26 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 分成几列 + col: { + type: [String, Number], + default: () => defProps.grid.col + }, + // 是否显示边框 + border: { + type: Boolean, + default: () => defProps.grid.border + }, + // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 + align: { + type: String, + default: () => defProps.grid.align + }, + // 间隔 + gap: { + type: String, + default: '0px' + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/u-grid.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/u-grid.vue new file mode 100644 index 0000000..ec945fc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-grid/u-grid.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/guide.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/guide.js new file mode 100644 index 0000000..5363595 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/guide.js @@ -0,0 +1,16 @@ +export default { + // guide 组件 + guide: { + show: false, + list: [], + storageKey: 'up-guide-default', + once: true, + showSkip: true, + skipText: '跳过', + nextText: '下一步', + finishText: '立即体验', + indicator: true, + bgColor: '#111111', + zIndex: 10075 + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/props.js new file mode 100644 index 0000000..eda61b8 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/props.js @@ -0,0 +1,51 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + show: { + type: Boolean, + default: () => defProps.guide.show + }, + list: { + type: Array, + default: () => defProps.guide.list + }, + storageKey: { + type: String, + default: () => defProps.guide.storageKey + }, + once: { + type: Boolean, + default: () => defProps.guide.once + }, + showSkip: { + type: Boolean, + default: () => defProps.guide.showSkip + }, + skipText: { + type: String, + default: () => defProps.guide.skipText + }, + nextText: { + type: String, + default: () => defProps.guide.nextText + }, + finishText: { + type: String, + default: () => defProps.guide.finishText + }, + indicator: { + type: Boolean, + default: () => defProps.guide.indicator + }, + bgColor: { + type: String, + default: () => defProps.guide.bgColor + }, + zIndex: { + type: [String, Number], + default: () => defProps.guide.zIndex + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/u-guide.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/u-guide.vue new file mode 100644 index 0000000..c26482c --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-guide/u-guide.vue @@ -0,0 +1,259 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/icon.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/icon.js new file mode 100644 index 0000000..b500cc1 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/icon.js @@ -0,0 +1,36 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/icon.js + */ +import config from '../../libs/config/config' + +const { + color +} = config +export default { + // icon组件 + icon: { + name: '', + color: color['u-content-color'], + size: '16px', + bold: false, + index: '', + hoverClass: '', + customPrefix: 'uicon', + label: '', + labelPos: 'right', + labelSize: '15px', + labelColor: color['u-content-color'], + space: '3px', + imgMode: '', + width: '', + height: '', + top: 0, + stop: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/icons.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/icons.js new file mode 100644 index 0000000..20b2fa0 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/icons.js @@ -0,0 +1,215 @@ +export default { + 'uicon-level': '\ue693', + 'uicon-column-line': '\ue68e', + 'uicon-checkbox-mark': '\ue807', + 'uicon-folder': '\ue7f5', + 'uicon-movie': '\ue7f6', + 'uicon-star-fill': '\ue669', + 'uicon-star': '\ue65f', + 'uicon-phone-fill': '\ue64f', + 'uicon-phone': '\ue622', + 'uicon-apple-fill': '\ue881', + 'uicon-chrome-circle-fill': '\ue885', + 'uicon-backspace': '\ue67b', + 'uicon-attach': '\ue632', + 'uicon-cut': '\ue948', + 'uicon-empty-car': '\ue602', + 'uicon-empty-coupon': '\ue682', + 'uicon-empty-address': '\ue646', + 'uicon-empty-favor': '\ue67c', + 'uicon-empty-permission': '\ue686', + 'uicon-empty-news': '\ue687', + 'uicon-empty-search': '\ue664', + 'uicon-github-circle-fill': '\ue887', + 'uicon-rmb': '\ue608', + 'uicon-person-delete-fill': '\ue66a', + 'uicon-reload': '\ue788', + 'uicon-order': '\ue68f', + 'uicon-server-man': '\ue6bc', + 'uicon-search': '\ue62a', + 'uicon-fingerprint': '\ue955', + 'uicon-more-dot-fill': '\ue630', + 'uicon-scan': '\ue662', + 'uicon-share-square': '\ue60b', + 'uicon-map': '\ue61d', + 'uicon-map-fill': '\ue64e', + 'uicon-tags': '\ue629', + 'uicon-tags-fill': '\ue651', + 'uicon-bookmark-fill': '\ue63b', + 'uicon-bookmark': '\ue60a', + 'uicon-eye': '\ue613', + 'uicon-eye-fill': '\ue641', + 'uicon-mic': '\ue64a', + 'uicon-mic-off': '\ue649', + 'uicon-calendar': '\ue66e', + 'uicon-calendar-fill': '\ue634', + 'uicon-trash': '\ue623', + 'uicon-trash-fill': '\ue658', + 'uicon-play-left': '\ue66d', + 'uicon-play-right': '\ue610', + 'uicon-minus': '\ue618', + 'uicon-plus': '\ue62d', + 'uicon-info': '\ue653', + 'uicon-info-circle': '\ue7d2', + 'uicon-info-circle-fill': '\ue64b', + 'uicon-question': '\ue715', + 'uicon-error': '\ue6d3', + 'uicon-close': '\ue685', + 'uicon-checkmark': '\ue6a8', + 'uicon-android-circle-fill': '\ue67e', + 'uicon-android-fill': '\ue67d', + 'uicon-ie': '\ue87b', + 'uicon-IE-circle-fill': '\ue889', + 'uicon-google': '\ue87a', + 'uicon-google-circle-fill': '\ue88a', + 'uicon-setting-fill': '\ue872', + 'uicon-setting': '\ue61f', + 'uicon-minus-square-fill': '\ue855', + 'uicon-plus-square-fill': '\ue856', + 'uicon-heart': '\ue7df', + 'uicon-heart-fill': '\ue851', + 'uicon-camera': '\ue7d7', + 'uicon-camera-fill': '\ue870', + 'uicon-more-circle': '\ue63e', + 'uicon-more-circle-fill': '\ue645', + 'uicon-chat': '\ue620', + 'uicon-chat-fill': '\ue61e', + 'uicon-bag-fill': '\ue617', + 'uicon-bag': '\ue619', + 'uicon-error-circle-fill': '\ue62c', + 'uicon-error-circle': '\ue624', + 'uicon-close-circle': '\ue63f', + 'uicon-close-circle-fill': '\ue637', + 'uicon-checkmark-circle': '\ue63d', + 'uicon-checkmark-circle-fill': '\ue635', + 'uicon-question-circle-fill': '\ue666', + 'uicon-question-circle': '\ue625', + 'uicon-share': '\ue631', + 'uicon-share-fill': '\ue65e', + 'uicon-shopping-cart': '\ue621', + 'uicon-shopping-cart-fill': '\ue65d', + 'uicon-bell': '\ue609', + 'uicon-bell-fill': '\ue640', + 'uicon-list': '\ue650', + 'uicon-list-dot': '\ue616', + 'uicon-zhihu': '\ue6ba', + 'uicon-zhihu-circle-fill': '\ue709', + 'uicon-zhifubao': '\ue6b9', + 'uicon-zhifubao-circle-fill': '\ue6b8', + 'uicon-weixin-circle-fill': '\ue6b1', + 'uicon-weixin-fill': '\ue6b2', + 'uicon-twitter-circle-fill': '\ue6ab', + 'uicon-twitter': '\ue6aa', + 'uicon-taobao-circle-fill': '\ue6a7', + 'uicon-taobao': '\ue6a6', + 'uicon-weibo-circle-fill': '\ue6a5', + 'uicon-weibo': '\ue6a4', + 'uicon-qq-fill': '\ue6a1', + 'uicon-qq-circle-fill': '\ue6a0', + 'uicon-moments-circel-fill': '\ue69a', + 'uicon-moments': '\ue69b', + 'uicon-qzone': '\ue695', + 'uicon-qzone-circle-fill': '\ue696', + 'uicon-baidu-circle-fill': '\ue680', + 'uicon-baidu': '\ue681', + 'uicon-facebook-circle-fill': '\ue68a', + 'uicon-facebook': '\ue689', + 'uicon-car': '\ue60c', + 'uicon-car-fill': '\ue636', + 'uicon-warning-fill': '\ue64d', + 'uicon-warning': '\ue694', + 'uicon-clock-fill': '\ue638', + 'uicon-clock': '\ue60f', + 'uicon-edit-pen': '\ue612', + 'uicon-edit-pen-fill': '\ue66b', + 'uicon-email': '\ue611', + 'uicon-email-fill': '\ue642', + 'uicon-minus-circle': '\ue61b', + 'uicon-minus-circle-fill': '\ue652', + 'uicon-plus-circle': '\ue62e', + 'uicon-plus-circle-fill': '\ue661', + 'uicon-file-text': '\ue663', + 'uicon-file-text-fill': '\ue665', + 'uicon-pushpin': '\ue7e3', + 'uicon-pushpin-fill': '\ue86e', + 'uicon-grid': '\ue673', + 'uicon-grid-fill': '\ue678', + 'uicon-play-circle': '\ue647', + 'uicon-play-circle-fill': '\ue655', + 'uicon-pause-circle-fill': '\ue654', + 'uicon-pause': '\ue8fa', + 'uicon-pause-circle': '\ue643', + 'uicon-eye-off': '\ue648', + 'uicon-eye-off-outline': '\ue62b', + 'uicon-gift-fill': '\ue65c', + 'uicon-gift': '\ue65b', + 'uicon-rmb-circle-fill': '\ue657', + 'uicon-rmb-circle': '\ue677', + 'uicon-kefu-ermai': '\ue656', + 'uicon-server-fill': '\ue751', + 'uicon-coupon-fill': '\ue8c4', + 'uicon-coupon': '\ue8ae', + 'uicon-integral': '\ue704', + 'uicon-integral-fill': '\ue703', + 'uicon-home-fill': '\ue964', + 'uicon-home': '\ue965', + 'uicon-hourglass-half-fill': '\ue966', + 'uicon-hourglass': '\ue967', + 'uicon-account': '\ue628', + 'uicon-plus-people-fill': '\ue626', + 'uicon-minus-people-fill': '\ue615', + 'uicon-account-fill': '\ue614', + 'uicon-thumb-down-fill': '\ue726', + 'uicon-thumb-down': '\ue727', + 'uicon-thumb-up': '\ue733', + 'uicon-thumb-up-fill': '\ue72f', + 'uicon-lock-fill': '\ue979', + 'uicon-lock-open': '\ue973', + 'uicon-lock-opened-fill': '\ue974', + 'uicon-lock': '\ue97a', + 'uicon-red-packet-fill': '\ue690', + 'uicon-photo-fill': '\ue98b', + 'uicon-photo': '\ue98d', + 'uicon-volume-off-fill': '\ue659', + 'uicon-volume-off': '\ue644', + 'uicon-volume-fill': '\ue670', + 'uicon-volume': '\ue633', + 'uicon-red-packet': '\ue691', + 'uicon-download': '\ue63c', + 'uicon-arrow-up-fill': '\ue6b0', + 'uicon-arrow-down-fill': '\ue600', + 'uicon-play-left-fill': '\ue675', + 'uicon-play-right-fill': '\ue676', + 'uicon-rewind-left-fill': '\ue679', + 'uicon-rewind-right-fill': '\ue67a', + 'uicon-arrow-downward': '\ue604', + 'uicon-arrow-leftward': '\ue601', + 'uicon-arrow-rightward': '\ue603', + 'uicon-arrow-upward': '\ue607', + 'uicon-arrow-down': '\ue60d', + 'uicon-arrow-right': '\ue605', + 'uicon-arrow-left': '\ue60e', + 'uicon-arrow-up': '\ue606', + 'uicon-skip-back-left': '\ue674', + 'uicon-skip-forward-right': '\ue672', + 'uicon-rewind-right': '\ue66f', + 'uicon-rewind-left': '\ue671', + 'uicon-arrow-right-double': '\ue68d', + 'uicon-arrow-left-double': '\ue68c', + 'uicon-wifi-off': '\ue668', + 'uicon-wifi': '\ue667', + 'uicon-empty-data': '\ue62f', + 'uicon-empty-history': '\ue684', + 'uicon-empty-list': '\ue68b', + 'uicon-empty-page': '\ue627', + 'uicon-empty-order': '\ue639', + 'uicon-empty-wifi': '\ue668', + 'uicon-man': '\ue697', + 'uicon-woman': '\ue69c', + 'uicon-man-add': '\ue61c', + 'uicon-man-add-fill': '\ue64c', + 'uicon-man-delete': '\ue61a', + 'uicon-man-delete-fill': '\ue66a', + 'uicon-zh': '\ue70a', + 'uicon-en': '\ue692' +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/props.js new file mode 100644 index 0000000..d5bdfdb --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/props.js @@ -0,0 +1,91 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 图标类名 + name: { + type: String, + default: () => defProps.icon.name + }, + // 图标颜色,可接受主题色 + color: { + type: String, + default: () => defProps.icon.color + }, + // 字体大小,单位px + size: { + type: [String, Number], + default: () => defProps.icon.size + }, + // 是否显示粗体 + bold: { + type: Boolean, + default: () => defProps.icon.bold + }, + // 点击图标的时候传递事件出去的index(用于区分点击了哪一个) + index: { + type: [String, Number], + default: () => defProps.icon.index + }, + // 触摸图标时的类名 + hoverClass: { + type: String, + default: () => defProps.icon.hoverClass + }, + // 自定义扩展前缀,方便用户扩展自己的图标库 + customPrefix: { + type: String, + default: () => defProps.icon.customPrefix + }, + // 图标右边或者下面的文字 + label: { + type: [String, Number], + default: () => defProps.icon.label + }, + // label的位置,只能右边或者下边 + labelPos: { + type: String, + default: () => defProps.icon.labelPos + }, + // label的大小 + labelSize: { + type: [String, Number], + default: () => defProps.icon.labelSize + }, + // label的颜色 + labelColor: { + type: String, + default: () => defProps.icon.labelColor + }, + // label与图标的距离 + space: { + type: [String, Number], + default: () => defProps.icon.space + }, + // 图片的mode + imgMode: { + type: String, + default: () => defProps.icon.imgMode + }, + // 用于显示图片小图标时,图片的宽度 + width: { + type: [String, Number], + default: () => defProps.icon.width + }, + // 用于显示图片小图标时,图片的高度 + height: { + type: [String, Number], + default: () => defProps.icon.height + }, + // 用于解决某些情况下,让图标垂直居中的用途 + top: { + type: [String, Number], + default: () => defProps.icon.top + }, + // 是否阻止事件传播 + stop: { + type: Boolean, + default: () => defProps.icon.stop + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/u-icon.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/u-icon.vue new file mode 100644 index 0000000..ed610ea --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/u-icon.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/util.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/util.js new file mode 100644 index 0000000..907f8dd --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-icon/util.js @@ -0,0 +1,68 @@ +import config from '../../libs/config/config'; + +let params = { + loaded: false +}; +// 加载字体方法 +const loadFont = () => { + // console.log('加载字体图标'); + // 全局加载不稳定,默认关闭,需要开启可以配置loadFontOnce。 + if (config.loadFontOnce) { + params.loaded = true; + } + // #ifdef APP-NVUE + // nvue通过weex的dom模块引入字体,相关文档地址如下: + // https://weex.apache.org/zh/docs/modules/dom.html#addrule + const domModule = weex.requireModule('dom'); + domModule.addRule('fontFace', { + 'fontFamily': "uicon-iconfont", + 'src': `url('${config.iconUrl}')` + }); + if (config.customIcon.family) { + domModule.addRule('fontFace', { + 'fontFamily': config.customIcon.family, + 'src': `url('${config.customIcon.url}')` + }); + } + // #endif + // #ifdef APP || H5 || MP-WEIXIN || MP-ALIPAY + uni.loadFontFace({ + global: true, // 是否全局生效。微信小程序 '2.10.0'起支持全局生效,需在 app.vue 中调用。 + family: 'uicon-iconfont', + source: 'url("' + config.iconUrl + '")', + success() { + // console.log('内置字体图标加载成功'); + }, + fail() { + // console.error('内置字体图标加载出错'); + } + }); + if (config.customIcon.family) { + uni.loadFontFace({ + global: true, // 是否全局生效。微信小程序 '2.10.0'起支持全局生效,需在 app.vue 中调用。 + family: config.customIcon.family, + source: 'url("' + config.customIcon.url + '")', + success() { + // console.log('扩展字体图标加载成功'); + }, + fail() { + // console.error('扩展字体图标加载出错'); + } + }); + } + // #endif + // #ifdef APP-NVUE + // if (this.customFontFamily) { + // domModule.addRule('fontFace', { + // 'fontFamily': `${this.customPrefix}-${this.customFontFamily}`, + // 'src': `url('${this.customFontUrl}')` + // }) + // } + // #endif + return true; +}; + +export default { + params: params, + loadFont +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/image.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/image.js new file mode 100644 index 0000000..591b676 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/image.js @@ -0,0 +1,30 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/image.js + */ +export default { + // image组件 + image: { + src: '', + mode: 'aspectFill', + width: '300', + height: '225', + shape: 'square', + radius: 0, + lazyLoad: true, + showMenuByLongpress: true, + loadingIcon: 'photo', + errorIcon: 'error-circle', + showLoading: true, + showError: true, + fade: true, + webp: false, + duration: 500, + bgColor: '#f3f4f6' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/props.js new file mode 100644 index 0000000..71bc6db --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/props.js @@ -0,0 +1,86 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 图片地址 + src: { + type: String, + default: () => defProps.image.src + }, + // 裁剪模式 + mode: { + type: String, + default: () => defProps.image.mode + }, + // 宽度,单位任意 + width: { + type: [String, Number], + default: () => defProps.image.width + }, + // 高度,单位任意 + height: { + type: [String, Number], + default: () => defProps.image.height + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.image.shape + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: () => defProps.image.radius + }, + // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序 + lazyLoad: { + type: Boolean, + default: () => defProps.image.lazyLoad + }, + // 开启长按图片显示识别微信小程序码菜单 + showMenuByLongpress: { + type: Boolean, + default: () => defProps.image.showMenuByLongpress + }, + // 加载中的图标,或者小图片 + loadingIcon: { + type: String, + default: () => defProps.image.loadingIcon + }, + // 加载失败的图标,或者小图片 + errorIcon: { + type: String, + default: () => defProps.image.errorIcon + }, + // 是否显示加载中的图标或者自定义的slot + showLoading: { + type: Boolean, + default: () => defProps.image.showLoading + }, + // 是否显示加载错误的图标或者自定义的slot + showError: { + type: Boolean, + default: () => defProps.image.showError + }, + // 是否需要淡入效果 + fade: { + type: Boolean, + default: () => defProps.image.fade + }, + // 只支持网络资源,只对微信小程序有效 + webp: { + type: Boolean, + default: () => defProps.image.webp + }, + // 过渡时间,单位ms + duration: { + type: [String, Number], + default: () => defProps.image.duration + }, + // 背景颜色,用于深色页面加载图片时,为了和背景色融合 + bgColor: { + type: String, + default: () => defProps.image.bgColor + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/u-image.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/u-image.vue new file mode 100644 index 0000000..24e3b10 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-image/u-image.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/indexAnchor.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/indexAnchor.js new file mode 100644 index 0000000..f6a5705 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/indexAnchor.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/indexAnchor.js + */ +export default { + // indexAnchor 组件 + indexAnchor: { + text: '', + color: '#606266', + size: 14, + bgColor: '#f1f1f1', + height: 32 + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/props.js new file mode 100644 index 0000000..f07e407 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/props.js @@ -0,0 +1,31 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 列表锚点文本内容 + text: { + type: [String, Number], + default: () => defProps.indexAnchor.text + }, + // 列表锚点文字颜色 + color: { + type: String, + default: () => defProps.indexAnchor.color + }, + // 列表锚点文字大小,单位默认px + size: { + type: [String, Number], + default: () => defProps.indexAnchor.size + }, + // 列表锚点背景颜色 + bgColor: { + type: String, + default: () => defProps.indexAnchor.bgColor + }, + // 列表锚点高度,单位默认px + height: { + type: [String, Number], + default: () => defProps.indexAnchor.height + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/u-index-anchor.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/u-index-anchor.vue new file mode 100644 index 0000000..64e2c41 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-anchor/u-index-anchor.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-item/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-item/props.js new file mode 100644 index 0000000..3461f1e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-item/props.js @@ -0,0 +1,8 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-item/u-index-item.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-item/u-index-item.vue new file mode 100644 index 0000000..5d9346a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-item/u-index-item.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/indexList.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/indexList.js new file mode 100644 index 0000000..319f1eb --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/indexList.js @@ -0,0 +1,21 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/indexList.js + */ +export default { + // indexList 组件 + indexList: { + inactiveColor: '#606266', + activeColor: '#5677fc', + indexList: [], + sticky: true, + customNavHeight: 0, + safeBottomFix: false, + itemMargin: '0rpx' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/props.js new file mode 100644 index 0000000..07ec35f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/props.js @@ -0,0 +1,41 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 右边锚点非激活的颜色 + inactiveColor: { + type: String, + default: () => defProps.indexList.inactiveColor + }, + // 右边锚点激活的颜色 + activeColor: { + type: String, + default: () => defProps.indexList.activeColor + }, + // 索引字符列表,数组形式 + indexList: { + type: Array, + default: () => defProps.indexList.indexList + }, + // 是否开启锚点自动吸顶 + sticky: { + type: Boolean, + default: () => defProps.indexList.sticky + }, + // 自定义导航栏的高度 + customNavHeight: { + type: [String, Number], + default: () => defProps.indexList.customNavHeight + }, + // 是否开启底部安全距离适配 + safeBottomFix: { + type: Boolean, + default: () => defProps.indexList.safeBottomFix + }, + //自定义下边距 + itemMargin: { + type: String, + default: () => defProps.indexList.itemMargin + }, + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/u-index-list.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/u-index-list.vue new file mode 100644 index 0000000..18e2500 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-index-list/u-index-list.vue @@ -0,0 +1,610 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/input.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/input.js new file mode 100644 index 0000000..66c5f1a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/input.js @@ -0,0 +1,50 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-08-20 10:21:55 + * @FilePath : /uview-plus/libs/config/props/input.js + */ +export default { + // index 组件 + input: { + value: '', + type: 'text', + fixed: false, + disabled: false, + disabledColor: '', + clearable: false, + password: false, + maxlength: 140, + placeholder: null, + placeholderClass: 'input-placeholder', + placeholderStyle: '', + showWordLimit: false, + confirmType: 'done', + confirmHold: false, + holdKeyboard: false, + focus: false, + autoBlur: false, + disableDefaultPadding: false, + cursor: -1, + cursorSpacing: 30, + selectionStart: -1, + selectionEnd: -1, + adjustPosition: true, + inputAlign: 'left', + fontSize: '15px', + color: '', + prefixIcon: '', + prefixIconStyle: '', + suffixIcon: '', + suffixIconStyle: '', + border: 'surround', + readonly: false, + shape: 'square', + formatter: null, + cursorColor: '#53c21d', + passwordVisibilityToggle: true + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/props.js new file mode 100644 index 0000000..59ace51 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/props.js @@ -0,0 +1,213 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // #ifdef VUE3 + // 绑定的值 + modelValue: { + type: [String, Number], + default: () => defProps.input.value + }, + // #endif + // #ifdef VUE2 + // 绑定的值 + value: { + type: [String, Number], + default: () => defProps.input.value + }, + // #endif + // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数 + // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序 + // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序 + // text-文本输入键盘 + type: { + type: String, + default: () => defProps.input.type + }, + // 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true, + // 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序 + fixed: { + type: Boolean, + default: () => defProps.input.fixed + }, + // 是否禁用输入框 + disabled: { + type: Boolean, + default: () => defProps.input.disabled + }, + // 禁用状态时的背景色 + disabledColor: { + type: String, + default: () => defProps.input.disabledColor + }, + // 是否显示清除控件 + clearable: { + type: Boolean, + default: false + }, + // 是否仅在聚焦时显示清除控件 + onlyClearableOnFocused: { + type: Boolean, + default: true + }, + // 是否密码类型 + password: { + type: Boolean, + default: () => defProps.input.password + }, + // 最大输入长度,设置为 -1 的时候不限制最大长度 + maxlength: { + type: [String, Number], + default: () => defProps.input.maxlength + }, + // 输入框为空时的占位符 + placeholder: { + type: String, + default: () => defProps.input.placeholder + }, + // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ + placeholderClass: { + type: String, + default: () => defProps.input.placeholderClass + }, + // 指定placeholder的样式 + placeholderStyle: { + type: [String, Object], + default: () => defProps.input.placeholderStyle + }, + // 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效 + showWordLimit: { + type: Boolean, + default: () => defProps.input.showWordLimit + }, + // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档 + // https://uniapp.dcloud.io/component/input + // https://uniapp.dcloud.io/component/textarea + confirmType: { + type: String, + default: () => defProps.input.confirmType + }, + // 点击键盘右下角按钮时是否保持键盘不收起,H5无效 + confirmHold: { + type: Boolean, + default: () => defProps.input.confirmHold + }, + // focus时,点击页面的时候不收起键盘,微信小程序有效 + holdKeyboard: { + type: Boolean, + default: () => defProps.input.holdKeyboard + }, + // 自动获取焦点 + // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 + focus: { + type: Boolean, + default: () => defProps.input.focus + }, + // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 + autoBlur: { + type: Boolean, + default: () => defProps.input.autoBlur + }, + // 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效 + disableDefaultPadding: { + type: Boolean, + default: () => defProps.input.disableDefaultPadding + }, + // 指定focus时光标的位置 + cursor: { + type: [String, Number], + default: () => defProps.input.cursor + }, + // 输入框聚焦时底部与键盘的距离 + cursorSpacing: { + type: [String, Number], + default: () => defProps.input.cursorSpacing + }, + // 光标起始位置,自动聚集时有效,需与selection-end搭配使用 + selectionStart: { + type: [String, Number], + default: () => defProps.input.selectionStart + }, + // 光标结束位置,自动聚集时有效,需与selection-start搭配使用 + selectionEnd: { + type: [String, Number], + default: () => defProps.input.selectionEnd + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: () => defProps.input.adjustPosition + }, + // 输入框内容对齐方式,可选值为:left|center|right + inputAlign: { + type: String, + default: () => defProps.input.inputAlign + }, + // 输入框字体的大小 + fontSize: { + type: [String, Number], + default: () => defProps.input.fontSize + }, + // 输入框字体颜色 + color: { + type: String, + default: () => defProps.input.color + }, + // 输入框前置图标 + prefixIcon: { + type: String, + default: () => defProps.input.prefixIcon + }, + // 前置图标样式,对象或字符串 + prefixIconStyle: { + type: [String, Object], + default: () => defProps.input.prefixIconStyle + }, + // 输入框后置图标 + suffixIcon: { + type: String, + default: () => defProps.input.suffixIcon + }, + // 后置图标样式,对象或字符串 + suffixIconStyle: { + type: [String, Object], + default: () => defProps.input.suffixIconStyle + }, + // 边框类型,surround-四周边框,bottom-底部边框,none-无边框 + border: { + type: String, + default: () => defProps.input.border + }, + // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 + readonly: { + type: Boolean, + default: () => defProps.input.readonly + }, + // 输入框形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.input.shape + }, + // 用于处理或者过滤输入框内容的方法 + formatter: { + type: [Function, null], + default: () => defProps.input.formatter + }, + // 是否忽略组件内对文本合成系统事件的处理 + ignoreCompositionEvent: { + type: Boolean, + default: true + }, + // 光标颜色 + cursorColor: { + type: String, + default: () => defProps.input.cursorColor + }, + // 密码类型可见性切换 + passwordVisibilityToggle: { + type: Boolean, + default: () => defProps.input.passwordVisibilityToggle + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/u-input.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/u-input.vue new file mode 100644 index 0000000..c81f62a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-input/u-input.vue @@ -0,0 +1,469 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/keyboard.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/keyboard.js new file mode 100644 index 0000000..bf9f760 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/keyboard.js @@ -0,0 +1,31 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/keyboard.js + */ +import { t } from '../../libs/i18n' +export default { + // 键盘组件 + keyboard: { + mode: 'number', + dotDisabled: false, + tooltip: true, + showTips: true, + tips: '', + showCancel: true, + showConfirm: true, + random: false, + safeAreaInsetBottom: true, + closeOnClickOverlay: true, + show: false, + overlay: true, + zIndex: 10075, + cancelText: t("up.common.cancel"), + confirmText: t("up.common.confirm"), + autoChange: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/props.js new file mode 100644 index 0000000..8c5d8ae --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/props.js @@ -0,0 +1,86 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘,car-车牌号键盘 + mode: { + type: String, + default: () => defProps.keyboard.mode + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: () => defProps.keyboard.dotDisabled + }, + // 是否显示顶部工具条 + tooltip: { + type: Boolean, + default: () => defProps.keyboard.tooltip + }, + // 是否显示工具条中间的提示 + showTips: { + type: Boolean, + default: () => defProps.keyboard.showTips + }, + // 工具条中间的提示文字 + tips: { + type: String, + default: () => defProps.keyboard.tips + }, + // 是否显示工具条左边的"取消"按钮 + showCancel: { + type: Boolean, + default: () => defProps.keyboard.showCancel + }, + // 是否显示工具条右边的"完成"按钮 + showConfirm: { + type: Boolean, + default: () => defProps.keyboard.showConfirm + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: () => defProps.keyboard.random + }, + // 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 + safeAreaInsetBottom: { + type: Boolean, + default: () => defProps.keyboard.safeAreaInsetBottom + }, + // 是否允许通过点击遮罩关闭键盘 + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.keyboard.closeOnClickOverlay + }, + // 控制键盘的弹出与收起 + show: { + type: Boolean, + default: () => defProps.keyboard.show + }, + // 是否显示遮罩,某些时候数字键盘时,用户希望看到自己的数值,所以可能不想要遮罩 + overlay: { + type: Boolean, + default: () => defProps.keyboard.overlay + }, + // z-index值 + zIndex: { + type: [String, Number], + default: () => defProps.keyboard.zIndex + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: () => defProps.keyboard.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: () => defProps.keyboard.confirmText + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: () => defProps.keyboard.autoChange + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/u-keyboard.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/u-keyboard.vue new file mode 100644 index 0000000..3f0939f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-keyboard/u-keyboard.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-lazy-load/u-lazy-load.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-lazy-load/u-lazy-load.vue new file mode 100644 index 0000000..0a30b44 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-lazy-load/u-lazy-load.vue @@ -0,0 +1,261 @@ + + + + + \ No newline at end of file diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/lineProgress.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/lineProgress.js new file mode 100644 index 0000000..74ab100 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/lineProgress.js @@ -0,0 +1,20 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/lineProgress.js + */ +export default { + // lineProgress 组件 + lineProgress: { + activeColor: '#19be6b', + inactiveColor: '#ececec', + percentage: 0, + showText: true, + height: 12, + fromRight: false, + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/props.js new file mode 100644 index 0000000..2690e29 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/props.js @@ -0,0 +1,35 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 激活部分的颜色 + activeColor: { + type: String, + default: () => defProps.lineProgress.activeColor + }, + inactiveColor: { + type: String, + default: () => defProps.lineProgress.color + }, + // 进度百分比,数值 + percentage: { + type: [String, Number], + default: () => defProps.lineProgress.inactiveColor + }, + // 是否在进度条内部显示百分比的值 + showText: { + type: Boolean, + default: () => defProps.lineProgress.showText + }, + // 进度条的高度,单位px + height: { + type: [String, Number], + default: () => defProps.lineProgress.height + }, + // 是否从右往左加载 + fromRight: { + type: Boolean, + default: () => defProps.lineProgress.fromRight + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/u-line-progress.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/u-line-progress.vue new file mode 100644 index 0000000..d5a93ee --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line-progress/u-line-progress.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/line.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/line.js new file mode 100644 index 0000000..c4b5dfc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/line.js @@ -0,0 +1,20 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/line.js + */ +export default { + // line组件 + line: { + color: '#d6d7d9', + length: '100%', + direction: 'row', + hairline: true, + margin: 0, + dashed: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/props.js new file mode 100644 index 0000000..6428d3f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/props.js @@ -0,0 +1,35 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + color: { + type: String, + default: () => defProps.line.color + }, + // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 + length: { + type: [String, Number], + default: () => defProps.line.length + }, + // 线条方向,col-竖向,row-横向 + direction: { + type: String, + default: () => defProps.line.direction + }, + // 是否显示细边框 + hairline: { + type: Boolean, + default: () => defProps.line.hairline + }, + // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" + margin: { + type: [String, Number], + default: () => defProps.line.margin + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: () => defProps.line.dashed + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/u-line.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/u-line.vue new file mode 100644 index 0000000..7f86b6e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-line/u-line.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/link.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/link.js new file mode 100644 index 0000000..8c7042c --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/link.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/link.js + */ +import config from '../../libs/config/config' +import { t } from '../../libs/i18n' + +const { + color +} = config +export default { + // link超链接组件props参数 + link: { + color: color['u-primary'], + fontSize: 15, + underLine: false, + href: '', + mpTips: t("up.link.copyed"), + lineColor: '', + text: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/props.js new file mode 100644 index 0000000..d96d824 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/props.js @@ -0,0 +1,41 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 文字颜色 + color: { + type: String, + default: () => defProps.link.color + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: () => defProps.link.fontSize + }, + // 是否显示下划线 + underLine: { + type: Boolean, + default: () => defProps.link.underLine + }, + // 要跳转的链接 + href: { + type: String, + default: () => defProps.link.href + }, + // 小程序中复制到粘贴板的提示语 + mpTips: { + type: String, + default: () => defProps.link.mpTips + }, + // 下划线颜色 + lineColor: { + type: String, + default: () => defProps.link.lineColor + }, + // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 + text: { + type: String, + default: () => defProps.link.text + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/u-link.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/u-link.vue new file mode 100644 index 0000000..0443f06 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-link/u-link.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/listItem.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/listItem.js new file mode 100644 index 0000000..66d5ccf --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/listItem.js @@ -0,0 +1,15 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/listItem.js + */ +export default { + // listItem 组件 + listItem: { + anchor: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/props.js new file mode 100644 index 0000000..edaa4dc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/props.js @@ -0,0 +1,11 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 用于滚动到指定item + anchor: { + type: [String, Number], + default: () => defProps.listItem.anchor + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/u-list-item.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/u-list-item.vue new file mode 100644 index 0000000..f9cd709 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list-item/u-list-item.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/list.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/list.js new file mode 100644 index 0000000..94010e4 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/list.js @@ -0,0 +1,28 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/list.js + */ +export default { + // list 组件 + list: { + showScrollbar: false, + lowerThreshold: 50, + upperThreshold: 0, + scrollTop: 0, + offsetAccuracy: 10, + enableFlex: false, + pagingEnabled: false, + scrollable: true, + scrollIntoView: '', + scrollWithAnimation: false, + enableBackToTop: false, + height: 0, + width: 0, + preLoadScreen: 1 + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/props.js new file mode 100644 index 0000000..9fca829 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/props.js @@ -0,0 +1,101 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 控制是否出现滚动条,仅nvue有效 + showScrollbar: { + type: Boolean, + default: () => defProps.list.showScrollbar + }, + // 距底部多少时触发scrolltolower事件 + lowerThreshold: { + type: [String, Number], + default: () => defProps.list.lowerThreshold + }, + // 距顶部多少时触发scrolltoupper事件,非nvue有效 + upperThreshold: { + type: [String, Number], + default: () => defProps.list.upperThreshold + }, + // 设置竖向滚动条位置 + scrollTop: { + type: [String, Number], + default: () => defProps.list.scrollTop + }, + // 控制 onscroll 事件触发的频率,仅nvue有效 + offsetAccuracy: { + type: [String, Number], + default: () => defProps.list.offsetAccuracy + }, + // 启用 flexbox 布局。开启后,当前节点声明了display: flex就会成为flex container,并作用于其孩子节点,仅微信小程序有效 + enableFlex: { + type: Boolean, + default: () => defProps.list.enableFlex + }, + // 是否按分页模式显示List,默认值false + pagingEnabled: { + type: Boolean, + default: () => defProps.list.pagingEnabled + }, + // 是否允许List滚动 + scrollable: { + type: Boolean, + default: () => defProps.list.scrollable + }, + // 值应为某子元素id(id不能以数字开头) + scrollIntoView: { + type: String, + default: () => defProps.list.scrollIntoView + }, + // 在设置滚动条位置时使用动画过渡 + scrollWithAnimation: { + type: Boolean, + default: () => defProps.list.scrollWithAnimation + }, + // iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只对微信小程序有效 + enableBackToTop: { + type: Boolean, + default: () => defProps.list.enableBackToTop + }, + // 列表的高度 + height: { + type: [String, Number], + default: () => defProps.list.height + }, + // 列表宽度 + width: { + type: [String, Number], + default: () => defProps.list.width + }, + // 列表前后预渲染的屏数,1代表一个屏幕的高度,1.5代表1个半屏幕高度 + preLoadScreen: { + type: [String, Number], + default: () => defProps.list.preLoadScreen + }, + // 开启自定义下拉刷新 + refresherEnabled: { + type: Boolean, + default: () => false + }, + // 设置自定义下拉刷新阈值 + refresherThreshold: { + type: Number, + default: () => 45 + }, + // 设置自定义下拉刷新默认样式,支持设置 black,white,none,none 表示不使用默认样式 + refresherDefaultStyle: { + type: String, + default: () => 'black' + }, + // 设置自定义下拉刷新区域背景颜色 + refresherBackground: { + type: String, + default: () => '#FFF' + }, + // 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发 + refresherTriggered: { + type: Boolean, + default: () => false + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/u-list.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/u-list.vue new file mode 100644 index 0000000..726ff38 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-list/u-list.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/loadingIcon.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/loadingIcon.js new file mode 100644 index 0000000..c51a0a0 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/loadingIcon.js @@ -0,0 +1,30 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/loadingIcon.js + */ +import config from '../../libs/config/config' + +const { + color +} = config +export default { + // loading-icon加载中图标组件 + loadingIcon: { + show: true, + color: color['u-tips-color'], + textColor: color['u-tips-color'], + vertical: false, + mode: 'spinner', + size: 24, + textSize: 15, + text: '', + timingFunction: 'ease-in-out', + duration: 1200, + inactiveColor: '' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/props.js new file mode 100644 index 0000000..6a6abf9 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否显示组件 + show: { + type: Boolean, + default: () => defProps.loadingIcon.show + }, + // 颜色 + color: { + type: String, + default: () => defProps.loadingIcon.color + }, + // 提示文字颜色 + textColor: { + type: String, + default: () => defProps.loadingIcon.textColor + }, + // 文字和图标是否垂直排列 + vertical: { + type: Boolean, + default: () => defProps.loadingIcon.vertical + }, + // 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形 + mode: { + type: String, + default: () => defProps.loadingIcon.mode + }, + // 图标大小,单位默认px + size: { + type: [String, Number], + default: () => defProps.loadingIcon.size + }, + // 文字大小 + textSize: { + type: [String, Number], + default: () => defProps.loadingIcon.textSize + }, + // 文字内容 + text: { + type: [String, Number], + default: () => defProps.loadingIcon.text + }, + // 动画模式 + timingFunction: { + type: String, + default: () => defProps.loadingIcon.timingFunction + }, + // 动画执行周期时间 + duration: { + type: [String, Number], + default: () => defProps.loadingIcon.duration + }, + // mode=circle时的暗边颜色 + inactiveColor: { + type: String, + default: () => defProps.loadingIcon.inactiveColor + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue new file mode 100644 index 0000000..81fb2ed --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue @@ -0,0 +1,349 @@ + + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/loadingPage.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/loadingPage.js new file mode 100644 index 0000000..a1df7ae --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/loadingPage.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/loadingPage.js + */ +import { t } from '../../libs/i18n' +export default { + // loading-page组件 + loadingPage: { + loadingText: t("up.common.loading2"), + image: '', + loadingMode: 'circle', + loading: false, + bgColor: '', + color: '#C8C8C8', + fontSize: 19, + iconSize: 28, + loadingColor: '#C8C8C8', + zIndex: 10 + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/props.js new file mode 100644 index 0000000..185a78f --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/props.js @@ -0,0 +1,57 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 提示内容 + loadingText: { + type: [String, Number], + default: () => defProps.loadingPage.loadingText + }, + // 文字上方用于替换loading动画的图片 + image: { + type: String, + default: () => defProps.loadingPage.image + }, + // 加载动画的模式,circle-圆形,spinner-花朵形,semicircle-半圆形 + loadingMode: { + type: String, + default: () => defProps.loadingPage.loadingMode + }, + // 是否加载中 + loading: { + type: Boolean, + default: () => defProps.loadingPage.loading + }, + // 背景色 + bgColor: { + type: String, + default: () => defProps.loadingPage.bgColor + }, + // 文字颜色 + color: { + type: String, + default: () => defProps.loadingPage.color + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: () => defProps.loadingPage.fontSize + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: () => defProps.loadingPage.fontSize + }, + // 加载中图标的颜色,只能rgb或者十六进制颜色值 + loadingColor: { + type: String, + default: () => defProps.loadingPage.loadingColor + }, + // 层级 + zIndex: { + type: [Number], + default: () => defProps.loadingPage.zIndex + }, + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/u-loading-page.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/u-loading-page.vue new file mode 100644 index 0000000..57693e7 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loading-page/u-loading-page.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/loadmore.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/loadmore.js new file mode 100644 index 0000000..79e125b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/loadmore.js @@ -0,0 +1,33 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/loadmore.js + */ +import { t } from '../../libs/i18n' +export default { + // loadmore 组件 + loadmore: { + status: 'loadmore', + bgColor: 'transparent', + icon: true, + fontSize: 14, + iconSize: 17, + color: '#606266', + loadingIcon: 'spinner', + loadmoreText: t("up.loadmoe.loadmore"), + loadingText: t("up.common.loading2") + '...', + nomoreText: t("up.loadmoe.nomore"), + isDot: false, + iconColor: '#b7b7b7', + marginTop: 10, + marginBottom: 10, + height: 'auto', + line: false, + lineColor: '#E6E8EB', + dashed: false, + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/props.js new file mode 100644 index 0000000..fb78e39 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/props.js @@ -0,0 +1,96 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 组件状态,loadmore-加载前的状态,loading-加载中的状态,nomore-没有更多的状态 + status: { + type: String, + default: () => defProps.loadmore.status + }, + // 组件背景色 + bgColor: { + type: String, + default: () => defProps.loadmore.bgColor + }, + // 是否显示加载中的图标 + icon: { + type: Boolean, + default: () => defProps.loadmore.icon + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.loadmore.fontSize + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: () => defProps.loadmore.iconSize + }, + // 字体颜色 + color: { + type: String, + default: () => defProps.loadmore.color + }, + // 加载中状态的图标,spinner-花朵状图标,circle-圆圈状,semicircle-半圆 + loadingIcon: { + type: String, + default: () => defProps.loadmore.loadingIcon + }, + // 加载前的提示语 + loadmoreText: { + type: String, + default: () => defProps.loadmore.loadmoreText + }, + // 加载中提示语 + loadingText: { + type: String, + default: () => defProps.loadmore.loadingText + }, + // 没有更多的提示语 + nomoreText: { + type: String, + default: () => defProps.loadmore.nomoreText + }, + // 在“没有更多”状态下,是否显示粗点 + isDot: { + type: Boolean, + default: () => defProps.loadmore.isDot + }, + // 加载中图标的颜色 + iconColor: { + type: String, + default: () => defProps.loadmore.iconColor + }, + // 上边距 + marginTop: { + type: [String, Number], + default: () => defProps.loadmore.marginTop + }, + // 下边距 + marginBottom: { + type: [String, Number], + default: () => defProps.loadmore.marginBottom + }, + // 高度,单位px + height: { + type: [String, Number], + default: () => defProps.loadmore.height + }, + // 是否显示左边分割线 + line: { + type: Boolean, + default: () => defProps.loadmore.line + }, + // 线条颜色 + lineColor: { + type: String, + default: () => defProps.loadmore.lineColor + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: () => defProps.loadmore.dashed + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/u-loadmore.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/u-loadmore.vue new file mode 100644 index 0000000..f20b401 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-loadmore/u-loadmore.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-markdown/marked.esm.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-markdown/marked.esm.js new file mode 100644 index 0000000..c1b6a08 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-markdown/marked.esm.js @@ -0,0 +1,7 @@ +/** + * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0. + * Original file: /npm/marked@16.1.2/lib/marked.esm.js + * + * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files + */ +function e(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var t={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};function n(e){t=e}var r={exec:()=>null};function s(e,t=""){let n="string"==typeof e?e:e.source,r={replace:(e,t)=>{let s="string"==typeof t?t:t.source;return s=s.replace(l.caret,"$1"),n=n.replace(e,s),r},getRegex:()=>new RegExp(n,t)};return r}var l={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[a-zA-Z0-9\u00C0-\u02AF\u0300-\u036F\u0400-\u04FF\u0500-\u052F\u1E00-\u1EFF]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[\t ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i")},i=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,a=/(?:[*+-]|\d{1,9}[.)])/,o=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,c=s(o).replace(/bull/g,a).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),h=s(o).replace(/bull/g,a).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),p=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,u=/(?!\s*\])(?:\\.|[^\[\]\\])+/,g=s(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",u).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),k=s(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,a).getRegex(),d="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",f=/|$))/,x=s("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",f).replace("tag",d).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),b=s(p).replace("hr",i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",d).getRegex(),w={blockquote:s(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",b).getRegex(),code:/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,def:g,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:i,html:x,lheading:c,list:k,newline:/^(?:[ \t]*(?:\n|$))+/,paragraph:b,table:r,text:/^[^\n]+/},m=s("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",d).getRegex(),y={...w,lheading:h,table:m,paragraph:s(p).replace("hr",i).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",m).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",d).getRegex()},$={...w,html:s("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",f).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:r,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:s(p).replace("hr",i).replace("heading"," *#{1,6} *[^\n]").replace("lheading",c).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},R=/^( {2,}|\\)\n(?!\s*$)/,S=/[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~·!¥……()——《》「」『』【】、;:‘’“”,。、]/u,T=/[\s!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~·!¥……()——《》「」『』【】、;:‘’“”,。、]/,z=/[^a-zA-Z0-9\u4e00-\u9fa5\s!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~·!¥……()——《》「」『』【】、;:‘’“”,。、]/,A=s(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,T).getRegex(),_=/[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}·!¥……()——《》「」『』【】、;:‘’“”,。、]/,P=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,I=s(P,"u").replace(/punct/g,S).getRegex(),L=s(P,"u").replace(/punct/g,_).getRegex(),B="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",C=s(B,"gu").replace(/notPunctSpace/g,z).replace(/punctSpace/g,T).replace(/punct/g,S).getRegex(),q=s(B,"gu").replace(/notPunctSpace/g,/[a-zA-Z0-9\u4e00-\u9fa5~]/).replace(/punctSpace/g,/[\s!"#$%&'()*+,-./:;<=>?@[\]^_`{|}·!¥……()——《》「」『』【】、;:‘’“”,。、]/).replace(/punct/g,_).getRegex(),E=s("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,z).replace(/punctSpace/g,T).replace(/punct/g,S).getRegex(),v=s(/\\(punct)/,"gu").replace(/punct/g,S).getRegex(),Z=s(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),D=s(f).replace("(?:--\x3e|$)","--\x3e").getRegex(),M=s("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",D).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),O=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Q=s(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",O).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),N=s(/^!?\[(label)\]\[(ref)\]/).replace("label",O).replace("ref",u).getRegex(),j=s(/^!?\[(ref)\](?:\[\])?/).replace("ref",u).getRegex(),G={_backpedal:r,anyPunctuation:v,autolink:Z,blockSkip:/\[[^[\]]*?\]\((?:\\.|[^\\\(\)]|\((?:\\.|[^\\\(\)])*\))*\)|`[^`]*?`|<(?! )[^<>]*?>/g,br:R,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:r,emStrongLDelim:I,emStrongRDelimAst:C,emStrongRDelimUnd:E,escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,link:Q,nolink:j,punctuation:A,reflink:N,reflinkSearch:s("reflink|nolink(?!\\()","g").replace("reflink",N).replace("nolink",j).getRegex(),tag:M,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},K=e=>J[e];function V(e,t){if(t){if(l.escapeTest.test(e))return e.replace(l.escapeReplace,K)}else if(l.escapeTestNoEncode.test(e))return e.replace(l.escapeReplaceNoEncode,K);return e}function Y(e){try{e=encodeURI(e).replace(l.percentDecode,"%")}catch{return null}return e}function ee(e,t){let n=e.replace(l.findPipe,((e,t,n)=>{let r=!1,s=t;for(;--s>=0&&"\\"===n[s];)r=!r;return r?"|":" |"})).split(l.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:te(e,"\n")}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=function(e,t,n){let r=e.match(n.other.indentCodeCompensation);if(null===r)return t;let s=r[1];return t.split("\n").map((e=>{let t=e.match(n.other.beginningSpace);if(null===t)return e;let[r]=t;return r.length>=s.length?e.slice(s.length):e})).join("\n")}(e,t[3]||"",this.rules);return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(this.rules.other.endingHash.test(e)){let t=te(e,"#");(this.options.pedantic||!t||this.rules.other.endingSpaceChar.test(t))&&(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:te(t[0],"\n")}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=te(t[0],"\n").split("\n"),n="",r="",s=[];for(;e.length>0;){let t,l=!1,i=[];for(t=0;t1,s={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:"[*+-]");let l=this.rules.other.listItemRegex(n),i=!1;for(;e;){let n=!1,r="",a="";if(!(t=l.exec(e))||this.rules.block.hr.test(e))break;r=t[0],e=e.substring(r.length);let o=t[2].split("\n",1)[0].replace(this.rules.other.listReplaceTabs,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],h=!o.trim(),p=0;if(this.options.pedantic?(p=2,a=o.trimStart()):h?p=t[1].length+1:(p=t[2].search(this.rules.other.nonSpaceChar),p=p>4?1:p,a=o.slice(p),p+=t[1].length),h&&this.rules.other.blankLine.test(c)&&(r+=c+"\n",e=e.substring(c.length+1),n=!0),!n){let t=this.rules.other.nextBulletRegex(p),n=this.rules.other.hrRegex(p),s=this.rules.other.fencesBeginRegex(p),l=this.rules.other.headingBeginRegex(p),i=this.rules.other.htmlBeginRegex(p);for(;e;){let u,g=e.split("\n",1)[0];if(c=g,this.options.pedantic?(c=c.replace(this.rules.other.listReplaceNesting," "),u=c):u=c.replace(this.rules.other.tabCharGlobal," "),s.test(c)||l.test(c)||i.test(c)||t.test(c)||n.test(c))break;if(u.search(this.rules.other.nonSpaceChar)>=p||!c.trim())a+="\n"+u.slice(p);else{if(h||o.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||s.test(o)||l.test(o)||n.test(o))break;a+="\n"+c}!h&&!c.trim()&&(h=!0),r+=g+"\n",e=e.substring(g.length+1),o=u.slice(p)}}s.loose||(i?s.loose=!0:this.rules.other.doubleBlankLine.test(r)&&(i=!0));let u,g=null;this.options.gfm&&(g=this.rules.other.listIsTask.exec(a),g&&(u="[ ] "!==g[0],a=a.replace(this.rules.other.listReplaceTask,""))),s.items.push({type:"list_item",raw:r,task:!!g,checked:u,loose:!1,text:a,tokens:[]}),s.raw+=r}let a=s.items.at(-1);if(!a)return;a.raw=a.raw.trimEnd(),a.text=a.text.trimEnd(),s.raw=s.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>this.rules.other.anyLine.test(e.raw)));s.loose=n}if(s.loose)for(let e=0;e({text:e,tokens:this.lexer.inline(e),header:!1,align:l.align[t]}))));return l}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(e)){if(!this.rules.other.endAngleBracket.test(e))return;let t=te(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{let e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let r=0;r0?-2:-1}(t[2],"()");if(-2===e)return;if(e>-1){let n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],r="";if(this.options.pedantic){let e=this.rules.other.pedanticHrefTitle.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):"";return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(n=this.options.pedantic&&!this.rules.other.endAngleBracket.test(e)?n.slice(1):n.slice(1,-1)),ne(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," ").toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return ne(n,e,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let r=this.rules.inline.emStrongLDelim.exec(e);if(!(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!r[1]&&!r[2]||!n||this.rules.inline.punctuation.exec(n))){let n,s,l=[...r[0]].length-1,i=l,a=0,o="*"===r[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(o.lastIndex=0,t=t.slice(-1*e.length+l);null!=(r=o.exec(t));){if(n=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!n)continue;if(s=[...n].length,r[3]||r[4]){i+=s;continue}if((r[5]||r[6])&&l%3&&!((l+s)%3)){a+=s;continue}if(i-=s,i>0)continue;s=Math.min(s,s+i+a);let t=[...r[0]][0].length,o=e.slice(0,l+r.index+t+s);if(Math.min(l,s)%2){let e=o.slice(1,-1);return{type:"em",raw:o,text:e,tokens:this.lexer.inlineTokens(e)}}let c=o.slice(2,-2);return{type:"strong",raw:o,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(this.rules.other.newLineCharGlobal," "),n=this.rules.other.nonSpaceChar.test(e),r=this.rules.other.startingSpaceChar.test(e)&&this.rules.other.endingSpaceChar.test(e);return n&&r&&(e=e.substring(1,e.length-1)),{type:"codespan",raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=t[1],n="mailto:"+e):(e=t[1],n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if("@"===t[2])e=t[0],n="mailto:"+e;else{let r;do{r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??""}while(r!==t[0]);e=t[0],n="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:e}}}},se=class e{tokens;options;state;tokenizer;inlineQueue;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||t,this.options.tokenizer=this.options.tokenizer||new re,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:l,block:F.normal,inline:U.normal};this.options.pedantic?(n.block=F.pedantic,n.inline=U.pedantic):this.options.gfm&&(n.block=F.gfm,this.options.breaks?n.inline=U.breaks:n.inline=U.gfm),this.tokenizer.rules=n}static get rules(){return{block:F,inline:U}}static lex(t,n){return new e(n).lex(t)}static lexInline(t,n){return new e(n).inlineTokens(t)}lex(e){e=e.replace(l.carriageReturn,"\n"),this.blockTokens(e,this.tokens);for(let e=0;e!!(r=n.call({lexer:this},e,t))&&(e=e.substring(r.raw.length),t.push(r),!0))))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let n=t.at(-1);1===r.raw.length&&void 0!==n?n.raw+="\n":t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let n=t.at(-1);"paragraph"===n?.type||"text"===n?.type?(n.raw+=(n.raw.endsWith("\n")?"":"\n")+r.raw,n.text+="\n"+r.text,this.inlineQueue.at(-1).src=n.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let n=t.at(-1);"paragraph"===n?.type||"text"===n?.type?(n.raw+=(n.raw.endsWith("\n")?"":"\n")+r.raw,n.text+="\n"+r.raw,this.inlineQueue.at(-1).src=n.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title});continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let s=e;if(this.options.extensions?.startBlock){let t,n=1/0,r=e.slice(1);this.options.extensions.startBlock.forEach((e=>{t=e.call({lexer:this},r),"number"==typeof t&&t>=0&&(n=Math.min(n,t))})),n<1/0&&n>=0&&(s=e.substring(0,n+1))}if(this.state.top&&(r=this.tokenizer.paragraph(s))){let l=t.at(-1);n&&"paragraph"===l?.type?(l.raw+=(l.raw.endsWith("\n")?"":"\n")+r.raw,l.text+="\n"+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=l.text):t.push(r),n=s.length!==e.length,e=e.substring(r.raw.length)}else if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let n=t.at(-1);"text"===n?.type?(n.raw+=(n.raw.endsWith("\n")?"":"\n")+r.raw,n.text+="\n"+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=n.text):t.push(r)}else if(e){let t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(r=this.tokenizer.rules.inline.reflinkSearch.exec(n));)e.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(r=this.tokenizer.rules.inline.anyPunctuation.exec(n));)n=n.slice(0,r.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;null!=(r=this.tokenizer.rules.inline.blockSkip.exec(n));)n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);let s=!1,l="";for(;e;){let r;if(s||(l=""),s=!1,this.options.extensions?.inline?.some((n=>!!(r=n.call({lexer:this},e,t))&&(e=e.substring(r.raw.length),t.push(r),!0))))continue;if(r=this.tokenizer.escape(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.tag(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.link(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(r.raw.length);let n=t.at(-1);"text"===r.type&&"text"===n?.type?(n.raw+=r.raw,n.text+=r.text):t.push(r);continue}if(r=this.tokenizer.emStrong(e,n,l)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.codespan(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.br(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.del(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.autolink(e)){e=e.substring(r.raw.length),t.push(r);continue}if(!this.state.inLink&&(r=this.tokenizer.url(e))){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startInline){let t,n=1/0,r=e.slice(1);this.options.extensions.startInline.forEach((e=>{t=e.call({lexer:this},r),"number"==typeof t&&t>=0&&(n=Math.min(n,t))})),n<1/0&&n>=0&&(i=e.substring(0,n+1))}if(r=this.tokenizer.inlineText(i)){e=e.substring(r.raw.length),"_"!==r.raw.slice(-1)&&(l=r.raw.slice(-1)),s=!0;let n=t.at(-1);"text"===n?.type?(n.raw+=r.raw,n.text+=r.text):t.push(r)}else if(e){let t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return t}},le=class{options;parser;constructor(e){this.options=e||t}space(e){return""}code({text:e,lang:t,escaped:n}){let r=(t||"").match(l.notSpaceStart)?.[0],s=e.replace(l.endingNewline,"")+"\n";return r?'
'+(n?s:V(s,!0))+"
\n":"
"+(n?s:V(s,!0))+"
\n"}blockquote({tokens:e}){return`
\n${this.parser.parse(e)}
\n`}html({text:e}){return e}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)}\n`}hr(e){return"
\n"}list(e){let t=e.ordered,n=e.start,r="";for(let t=0;t\n"+r+"\n"}listitem(e){let t="";if(e.task){let n=this.checkbox({checked:!!e.checked});e.loose?"paragraph"===e.tokens[0]?.type?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&"text"===e.tokens[0].tokens[0].type&&(e.tokens[0].tokens[0].text=n+" "+V(e.tokens[0].tokens[0].text),e.tokens[0].tokens[0].escaped=!0)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" ",escaped:!0}):t+=n+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • \n`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    \n`}table(e){let t="",n="";for(let t=0;t${r}`),"\n\n"+t+"\n"+r+"
    \n"}tablerow({text:e}){return`\n${e}\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`\n`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${V(e,!0)}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),s=Y(e);if(null===s)return r;let l='
    ",l}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let s=Y(e);if(null===s)return V(n);let l=`${n}{let s=e[r].flat(1/0);n=n.concat(this.walkTokens(s,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach((e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach((e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){let n=t.renderers[e.name];t.renderers[e.name]=n?function(...t){let r=e.renderer.apply(this,t);return!1===r&&(r=n.apply(this,t)),r}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&("block"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:"inline"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)})),n.extensions=t),e.renderer){let t=this.defaults.renderer||new le(this.defaults);for(let n in e.renderer){if(!(n in t))throw new Error(`renderer '${n}' does not exist`);if(["options","parser"].includes(n))continue;let r=n,s=e.renderer[r],l=t[r];t[r]=(...e)=>{let n=s.apply(t,e);return!1===n&&(n=l.apply(t,e)),n||""}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new re(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw new Error(`tokenizer '${n}' does not exist`);if(["options","rules","lexer"].includes(n))continue;let r=n,s=e.tokenizer[r],l=t[r];t[r]=(...e)=>{let n=s.apply(t,e);return!1===n&&(n=l.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new oe;for(let n in e.hooks){if(!(n in t))throw new Error(`hook '${n}' does not exist`);if(["options","block"].includes(n))continue;let r=n,s=e.hooks[r],l=t[r];oe.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async)return Promise.resolve(s.call(t,e)).then((e=>l.call(t,e)));let n=s.call(t,e);return l.call(t,n)}:t[r]=(...e)=>{let n=s.apply(t,e);return!1===n&&(n=l.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}})),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return se.lex(e,t??this.defaults)}parser(e,t){return ae.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{let r={...n},s={...this.defaults,...r},l=this.onError(!!s.silent,!!s.async);if(!0===this.defaults.async&&!1===r.async)return l(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||null===t)return l(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof t)return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));s.hooks&&(s.hooks.options=s,s.hooks.block=e);let i=s.hooks?s.hooks.provideLexer():e?se.lex:se.lexInline,a=s.hooks?s.hooks.provideParser():e?ae.parse:ae.parseInline;if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(t):t).then((e=>i(e,s))).then((e=>s.hooks?s.hooks.processAllTokens(e):e)).then((e=>s.walkTokens?Promise.all(this.walkTokens(e,s.walkTokens)).then((()=>e)):e)).then((e=>a(e,s))).then((e=>s.hooks?s.hooks.postprocess(e):e)).catch(l);try{s.hooks&&(t=s.hooks.preprocess(t));let e=i(t,s);s.hooks&&(e=s.hooks.processAllTokens(e)),s.walkTokens&&this.walkTokens(e,s.walkTokens);let n=a(e,s);return s.hooks&&(n=s.hooks.postprocess(n)),n}catch(e){return l(e)}}}onError(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){let e="

    An error occurred:

    "+V(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}},he=new ce;function pe(e,t){return he.parse(e,t)}pe.options=pe.setOptions=function(e){return he.setOptions(e),pe.defaults=he.defaults,n(pe.defaults),pe},pe.getDefaults=e,pe.defaults=t,pe.use=function(...e){return he.use(...e),pe.defaults=he.defaults,n(pe.defaults),pe},pe.walkTokens=function(e,t){return he.walkTokens(e,t)},pe.parseInline=he.parseInline,pe.Parser=ae,pe.parser=ae.parse,pe.Renderer=le,pe.TextRenderer=ie,pe.Lexer=se,pe.lexer=se.lex,pe.Tokenizer=re,pe.Hooks=oe,pe.parse=pe;var ue=pe.options,ge=pe.setOptions,ke=pe.use,de=pe.walkTokens,fe=pe.parseInline,xe=pe,be=ae.parse,we=se.lex;export{oe as Hooks,se as Lexer,ce as Marked,ae as Parser,le as Renderer,ie as TextRenderer,re as Tokenizer,t as defaults,e as getDefaults,we as lexer,pe as marked,ue as options,xe as parse,fe as parseInline,be as parser,ge as setOptions,ke as use,de as walkTokens};export default null; diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-markdown/u-markdown.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-markdown/u-markdown.vue new file mode 100644 index 0000000..b8a2b47 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-markdown/u-markdown.vue @@ -0,0 +1,342 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-message-input/u-message-input.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-message-input/u-message-input.vue new file mode 100644 index 0000000..0da5f1c --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-message-input/u-message-input.vue @@ -0,0 +1,318 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/modal.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/modal.js new file mode 100644 index 0000000..59d8abc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/modal.js @@ -0,0 +1,36 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/modal.js + */ +import { t } from '../../libs/i18n' +export default { + // modal 组件 + modal: { + show: false, + title: '', + content: '', + confirmText: t("up.common.confirm"), + cancelText: t("up.common.cancel"), + showConfirmButton: true, + showCancelButton: false, + confirmColor: '#2979ff', + cancelColor: '#606266', + buttonReverse: false, + zoom: true, + asyncClose: false, + closeOnClickOverlay: false, + negativeTop: 0, + width: '650rpx', + confirmButtonShape: '', + duration: 400, + contentTextAlign: 'left', + asyncCloseTip: t("up.common.inOperation") + '...', + asyncCancelClose: false, + contentStyle: {} + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/props.js new file mode 100644 index 0000000..0f0177b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/props.js @@ -0,0 +1,111 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否展示modal + show: { + type: Boolean, + default: () => defProps.modal.show + }, + // 标题 + title: { + type: [String], + default: () => defProps.modal.title + }, + // 弹窗内容 + content: { + type: String, + default: () => defProps.modal.content + }, + // 确认文案 + confirmText: { + type: String, + default: () => defProps.modal.confirmText + }, + // 取消文案 + cancelText: { + type: String, + default: () => defProps.modal.cancelText + }, + // 是否显示确认按钮 + showConfirmButton: { + type: Boolean, + default: () => defProps.modal.showConfirmButton + }, + // 是否显示取消按钮 + showCancelButton: { + type: Boolean, + default: () => defProps.modal.showCancelButton + }, + // 确认按钮颜色 + confirmColor: { + type: String, + default: () => defProps.modal.confirmColor + }, + // 取消文字颜色 + cancelColor: { + type: String, + default: () => defProps.modal.cancelColor + }, + // 对调确认和取消的位置 + buttonReverse: { + type: Boolean, + default: () => defProps.modal.buttonReverse + }, + // 是否开启缩放效果 + zoom: { + type: Boolean, + default: () => defProps.modal.zoom + }, + // 是否异步关闭,只对确定按钮有效 + asyncClose: { + type: Boolean, + default: () => defProps.modal.asyncClose + }, + // 是否允许点击遮罩关闭modal + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.modal.closeOnClickOverlay + }, + // 给一个负的margin-top,往上偏移,避免和键盘重合的情况 + negativeTop: { + type: [String, Number], + default: () => defProps.modal.negativeTop + }, + // modal宽度,不支持百分比,可以数值,px,rpx单位 + width: { + type: [String, Number], + default: () => defProps.modal.width + }, + // 确认按钮的样式,circle-圆形,square-方形,如设置,将不会显示取消按钮 + confirmButtonShape: { + type: String, + default: () => defProps.modal.confirmButtonShape + }, + // 弹窗动画过度时间 + duration: { + type: [Number], + default: defProps.modal.duration + }, + // 文案对齐方式 + contentTextAlign: { + type: String, + default: () => defProps.modal.contentTextAlign + }, + // 异步确定时如果点击了取消时候的提示文案 + asyncCloseTip: { + type: String, + default: () => defProps.modal.asyncCloseTip + }, + // 是否异步关闭,只对取消按钮有效 + asyncCancelClose: { + type: Boolean, + default: () => defProps.modal.asyncCancelClose + }, + // 内容样式 + contentStyle: { + type: Object, + default: () => defProps.modal.contentStyle + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/u-modal.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/u-modal.vue new file mode 100644 index 0000000..eab8f72 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-modal/u-modal.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar-mini/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar-mini/props.js new file mode 100644 index 0000000..57d5b4e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar-mini/props.js @@ -0,0 +1,51 @@ +import { defineMixin } from '../../libs/vue' + +export const props = defineMixin({ + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: () => true + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: () => true + }, + // 左边的图标 + leftIcon: { + type: String, + default: 'arrow-leftward' + }, + // 背景颜色 + bgColor: { + type: String, + default: () => 'rgba(0,0,0,.15)' + }, + // 导航栏高度 + height: { + type: [String, Number], + default: () => '32px' + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: '20px' + }, + // 图标的颜色 + iconColor: { + type: String, + default: '#fff' + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: () => true + }, + // 首页路径 + homeUrl: { + type: [String], + default: '' + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar-mini/u-navbar-mini.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar-mini/u-navbar-mini.vue new file mode 100644 index 0000000..be546d7 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar-mini/u-navbar-mini.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/navbar.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/navbar.js new file mode 100644 index 0000000..f290cd8 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/navbar.js @@ -0,0 +1,32 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/navbar.js + */ +export default { + // navbar 组件 + navbar: { + safeAreaInsetTop: true, + placeholder: false, + fixed: true, + border: false, + leftIcon: 'arrow-left', + leftText: '', + rightText: '', + rightIcon: '', + title: '', + titleColor: '', + bgColor: '', + titleWidth: '400rpx', + height: '44px', + leftIconSize: 20, + leftIconColor: '', + autoBack: false, + titleStyle: '' + } + +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/props.js new file mode 100644 index 0000000..b66f87e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/props.js @@ -0,0 +1,97 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: () => defProps.navbar.safeAreaInsetTop + }, + // 固定在顶部时,是否生成一个等高元素,以防止塌陷 + placeholder: { + type: Boolean, + default: () => defProps.navbar.placeholder + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: () => defProps.navbar.fixed + }, + // 是否显示下边框 + border: { + type: Boolean, + default: () => defProps.navbar.border + }, + // 左边的图标 + leftIcon: { + type: String, + default: () => defProps.navbar.leftIcon + }, + // 左边的提示文字 + leftText: { + type: String, + default: () => defProps.navbar.leftText + }, + // 左右的提示文字 + rightText: { + type: String, + default: () => defProps.navbar.rightText + }, + // 右边的图标 + rightIcon: { + type: String, + default: () => defProps.navbar.rightIcon + }, + // 标题 + title: { + type: [String, Number], + default: () => defProps.navbar.title + }, + // 标题颜色 + titleColor: { + type: String, + default: () => defProps.navbar.titleColor + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.navbar.bgColor + }, + // 状态栏背景颜色 不写会使用背景颜色bgColor + statusBarBgColor: { + type: String, + default: () => '' + }, + // 标题的宽度 + titleWidth: { + type: [String, Number], + default: () => defProps.navbar.titleWidth + }, + // 导航栏高度 + height: { + type: [String, Number], + default: () => defProps.navbar.height + }, + // 左侧返回图标的大小 + leftIconSize: { + type: [String, Number], + default: () => defProps.navbar.leftIconSize + }, + // 左侧返回图标的颜色 + leftIconColor: { + type: String, + default: () => defProps.navbar.leftIconColor + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: () => defProps.navbar.autoBack + }, + // 标题的样式,对象或字符串 + titleStyle: { + type: [String, Object], + default: () => defProps.navbar.titleStyle + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/theme-vars.scss b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/theme-vars.scss new file mode 100644 index 0000000..d057ee6 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/theme-vars.scss @@ -0,0 +1,21 @@ +:root, +page, +body { + --up-navbar-bg-color: #ffffff; +} + +@media (prefers-color-scheme: dark) { + :root, + page, + body { + --up-navbar-bg-color: #1c1c1e; + } +} + +[data-up-theme='light'] { + --up-navbar-bg-color: #ffffff; +} + +[data-up-theme='dark'] { + --up-navbar-bg-color: #1c1c1e; +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/u-navbar.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/u-navbar.vue new file mode 100644 index 0000000..377bf11 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-navbar/u-navbar.vue @@ -0,0 +1,224 @@ + + + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/noNetwork.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/noNetwork.js new file mode 100644 index 0000000..96bb796 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/noNetwork.js @@ -0,0 +1,18 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/noNetwork.js + */ +import { t } from '../../libs/i18n' +export default { + // noNetwork + noNetwork: { + tips: t("up.noNetwork.text"), + zIndex: '', + image: 'data:image/png;base64,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' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/props.js new file mode 100644 index 0000000..1091cf5 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/props.js @@ -0,0 +1,21 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 页面文字提示 + tips: { + type: String, + default: () => defProps.noNetwork.tips + }, + // 一个z-index值,用于设置没有网络这个组件的层次,因为页面可能会有其他定位的元素层级过高,导致此组件被覆盖 + zIndex: { + type: [String, Number], + default: () => defProps.noNetwork.zIndex + }, + // image 没有网络的图片提示 + image: { + type: String, + default: () => defProps.noNetwork.image + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/u-no-network.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/u-no-network.vue new file mode 100644 index 0000000..e9dd03b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-no-network/u-no-network.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/noticeBar.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/noticeBar.js new file mode 100644 index 0000000..59e930b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/noticeBar.js @@ -0,0 +1,28 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/noticeBar.js + */ +export default { + // noticeBar + noticeBar: { + text: [], + direction: 'row', + step: false, + icon: 'volume', + mode: '', + color: '#f9ae3d', + bgColor: '#fdf6ec', + speed: 80, + fontSize: 14, + duration: 2000, + disableTouch: true, + url: '', + linkType: 'navigateTo', + justifyContent: 'flex-start' + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/props.js new file mode 100644 index 0000000..2dd91af --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/props.js @@ -0,0 +1,76 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 显示的内容,数组 + text: { + type: [Array, String], + default: () => defProps.noticeBar.text + }, + // 通告滚动模式,row-横向滚动,column-竖向滚动 + direction: { + type: String, + default: () => defProps.noticeBar.direction + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: () => defProps.noticeBar.step + }, + // 是否显示左侧的音量图标 + icon: { + type: String, + default: () => defProps.noticeBar.icon + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: () => defProps.noticeBar.mode + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: () => defProps.noticeBar.color + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.noticeBar.bgColor + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: () => defProps.noticeBar.speed + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.noticeBar.fontSize + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: () => defProps.noticeBar.duration + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: () => defProps.noticeBar.disableTouch + }, + // 跳转的页面路径 + url: { + type: String, + default: () => defProps.noticeBar.url + }, + // 页面跳转的类型 + linkType: { + type: String, + default: () => defProps.noticeBar.linkType + }, + justifyContent: { + type: String, + default: () => defProps.noticeBar.justifyContent + }, + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/theme-vars.scss b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/theme-vars.scss new file mode 100644 index 0000000..ed4c8ea --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/theme-vars.scss @@ -0,0 +1,25 @@ +:root, +page, +body { + --up-notice-bar-color: #f9ae3d; + --up-notice-bar-bg-color: #fdf6ec; +} + +@media (prefers-color-scheme: dark) { + :root, + page, + body { + --up-notice-bar-color: #f9ae3d; + --up-notice-bar-bg-color: #3d2f1b; + } +} + +[data-up-theme='light'] { + --up-notice-bar-color: #f9ae3d; + --up-notice-bar-bg-color: #fdf6ec; +} + +[data-up-theme='dark'] { + --up-notice-bar-color: #f9ae3d; + --up-notice-bar-bg-color: #3d2f1b; +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/u-notice-bar.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/u-notice-bar.vue new file mode 100644 index 0000000..5f06c1a --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notice-bar/u-notice-bar.vue @@ -0,0 +1,124 @@ + + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/notify.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/notify.js new file mode 100644 index 0000000..142760e --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/notify.js @@ -0,0 +1,22 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/notify.js + */ +export default { + // notify组件 + notify: { + top: 0, + type: 'primary', + color: '#ffffff', + bgColor: '', + message: '', + duration: 3000, + fontSize: 15, + safeAreaInsetTop: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/props.js new file mode 100644 index 0000000..fdb01b4 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/props.js @@ -0,0 +1,51 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 到顶部的距离 + top: { + type: [String, Number], + default: () => defProps.notify.top + }, + // 是否展示组件 + // show: { + // type: Boolean, + // default: () => defProps.notify.show + // }, + // type主题,primary,success,warning,error + type: { + type: String, + default: () => defProps.notify.type + }, + // 字体颜色 + color: { + type: String, + default: () => defProps.notify.color + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.notify.bgColor + }, + // 展示的文字内容 + message: { + type: String, + default: () => defProps.notify.message + }, + // 展示时长,为0时不消失,单位ms + duration: { + type: [String, Number], + default: () => defProps.notify.duration + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.notify.fontSize + }, + // 是否留出顶部安全距离(状态栏高度) + safeAreaInsetTop: { + type: Boolean, + default: () => defProps.notify.safeAreaInsetTop + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/u-notify.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/u-notify.vue new file mode 100644 index 0000000..2970f4d --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-notify/u-notify.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/numberBox.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/numberBox.js new file mode 100644 index 0000000..603e342 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/numberBox.js @@ -0,0 +1,40 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/numberBox.js + */ +export default { + // 步进器组件 + numberBox: { + name: '', + value: 0, + min: 1, + max: Number.MAX_SAFE_INTEGER, + step: 1, + integer: false, + disabled: false, + disabledInput: false, + asyncChange: false, + inputWidth: 35, + showMinus: true, + showPlus: true, + decimalLength: null, + longPress: true, + color: '', + buttonWidth: 30, + buttonSize: 30, + buttonRadius: '0px', + bgColor: '', + disabledBgColor: '', + inputBgColor: '', + cursorSpacing: 100, + disableMinus: false, + disablePlus: false, + iconStyle: '', + miniMode: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/props.js new file mode 100644 index 0000000..ada9952 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/props.js @@ -0,0 +1,145 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 步进器标识符,在change回调返回 + name: { + type: [String, Number], + default: () => defProps.numberBox.name + }, + // #ifdef VUE2 + // 用于双向绑定的值,初始化时设置设为默认min值(最小值) + value: { + type: [String, Number], + default: () => defProps.numberBox.value + }, + // #endif + // #ifdef VUE3 + // 用于双向绑定的值,初始化时设置设为默认min值(最小值) + modelValue: { + type: [String, Number], + default: () => defProps.numberBox.value + }, + // #endif + // 最小值 + min: { + type: [String, Number], + default: () => defProps.numberBox.min + }, + // 最大值 + max: { + type: [String, Number], + default: () => defProps.numberBox.max + }, + // 加减的步长,可为小数 + step: { + type: [String, Number], + default: () => defProps.numberBox.step + }, + // 是否只允许输入整数 + integer: { + type: Boolean, + default: () => defProps.numberBox.integer + }, + // 是否禁用,包括输入框,加减按钮 + disabled: { + type: Boolean, + default: () => defProps.numberBox.disabled + }, + // 是否禁用输入框 + disabledInput: { + type: Boolean, + default: () => defProps.numberBox.disabledInput + }, + // 是否开启异步变更,开启后需要手动控制输入值 + asyncChange: { + type: Boolean, + default: () => defProps.numberBox.asyncChange + }, + // 输入框宽度,单位为px + inputWidth: { + type: [String, Number], + default: () => defProps.numberBox.inputWidth + }, + // 是否显示减少按钮 + showMinus: { + type: Boolean, + default: () => defProps.numberBox.showMinus + }, + // 是否显示增加按钮 + showPlus: { + type: Boolean, + default: () => defProps.numberBox.showPlus + }, + // 显示的小数位数 + decimalLength: { + type: [String, Number, null], + default: () => defProps.numberBox.decimalLength + }, + // 是否开启长按加减手势 + longPress: { + type: Boolean, + default: () => defProps.numberBox.longPress + }, + // 输入框文字和加减按钮图标的颜色 + color: { + type: String, + default: () => defProps.numberBox.color + }, + // 按钮宽度 + buttonWidth: { + type: [String, Number], + default: () => defProps.numberBox.buttonWidth + }, + // 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 + buttonSize: { + type: [String, Number], + default: () => defProps.numberBox.buttonSize + }, + // 按钮圆角 + buttonRadius: { + type: [String], + default: () => defProps.numberBox.buttonRadius + }, + // 输入框和按钮的背景颜色 + bgColor: { + type: String, + default: () => defProps.numberBox.bgColor + }, + // 按钮禁用背景色 + disabledBgColor: { + type: String, + default: () => defProps.numberBox.disabledBgColor + }, + // 输入框背景颜色 + inputBgColor: { + type: String, + default: () => defProps.numberBox.inputBgColor + }, + // 指定光标于键盘的距离,避免键盘遮挡输入框,单位px + cursorSpacing: { + type: [String, Number], + default: () => defProps.numberBox.cursorSpacing + }, + // 是否禁用增加按钮 + disablePlus: { + type: Boolean, + default: () => defProps.numberBox.disablePlus + }, + // 是否禁用减少按钮 + disableMinus: { + type: Boolean, + default: () => defProps.numberBox.disableMinus + }, + // 加减按钮图标的样式 + iconStyle: { + type: [Object, String], + default: () => defProps.numberBox.iconStyle + }, + // 迷你模式 + miniMode: { + type: Boolean, + default: () => defProps.numberBox.miniMode + }, + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/u-number-box.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/u-number-box.vue new file mode 100644 index 0000000..9a49ecc --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-box/u-number-box.vue @@ -0,0 +1,495 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/numberKeyboard.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/numberKeyboard.js new file mode 100644 index 0000000..f94be24 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/numberKeyboard.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/numberKeyboard.js + */ +export default { + // 数字键盘 + numberKeyboard: { + mode: 'number', + dotDisabled: false, + random: false + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/props.js new file mode 100644 index 0000000..d853858 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/props.js @@ -0,0 +1,21 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘 + mode: { + type: String, + default: () => defProps.numberKeyboard.value + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: () => defProps.numberKeyboard.dotDisabled + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: () => defProps.numberKeyboard.random + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/u-number-keyboard.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/u-number-keyboard.vue new file mode 100644 index 0000000..e9193f4 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-number-keyboard/u-number-keyboard.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/overlay.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/overlay.js new file mode 100644 index 0000000..89f1da3 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/overlay.js @@ -0,0 +1,18 @@ +/* + * @Author : LQ + * @Description : + * @version : 3.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : jry + * @lastTime : 2025-12-19 08:55:21 + * @FilePath : /uview-plus/libs/config/props/overlay.js + */ +export default { + // overlay组件 + overlay: { + show: false, + zIndex: 10070, + duration: 300, + opacity: 0.5 + } +} diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/props.js b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/props.js new file mode 100644 index 0000000..39f16f3 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/props.js @@ -0,0 +1,26 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否显示遮罩 + show: { + type: Boolean, + default: () => defProps.overlay.show + }, + // 层级z-index + zIndex: { + type: [String, Number], + default: () => defProps.overlay.zIndex + }, + // 遮罩的过渡时间,单位为ms + duration: { + type: [String, Number], + default: () => defProps.overlay.duration + }, + // 不透明度值,当做rgba的第四个参数 + opacity: { + type: [String, Number], + default: () => defProps.overlay.opacity + } + } +}) diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/u-overlay.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/u-overlay.vue new file mode 100644 index 0000000..c2c007b --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-overlay/u-overlay.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-pagination/u-pagination.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-pagination/u-pagination.vue new file mode 100644 index 0000000..3b9f269 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-pagination/u-pagination.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/wuye-manager-uniapp/uni_modules/uview-plus/components/u-parse/node/node.vue b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-parse/node/node.vue new file mode 100644 index 0000000..8e971c0 --- /dev/null +++ b/wuye-manager-uniapp/uni_modules/uview-plus/components/u-parse/node/node.vue @@ -0,0 +1,630 @@ +