diff --git a/.env b/.env
new file mode 100644
index 0000000..1279948
--- /dev/null
+++ b/.env
@@ -0,0 +1,2 @@
+
+HAST_URL = ''
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a70bc78
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/unpackage
+/node_modules
diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json
new file mode 100644
index 0000000..9b0d791
--- /dev/null
+++ b/.hbuilderx/launch.json
@@ -0,0 +1,20 @@
+{
+ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
+ // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数
+ "version" : "0.0",
+ "configurations" : [
+ {
+ "app-plus" : {
+ "launchtype" : "local"
+ },
+ "default" : {
+ "launchtype" : "local"
+ },
+ "type" : "uniCloud"
+ },
+ {
+ "playground" : "standard",
+ "type" : "uni-app:app-android"
+ }
+ ]
+}
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..547e9a3
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,13 @@
+
+
+
diff --git a/apis/index.js b/apis/index.js
new file mode 100644
index 0000000..80e824a
--- /dev/null
+++ b/apis/index.js
@@ -0,0 +1,169 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ */
+
+import store from '@/store'
+import router from '../router'
+
+// 基础配置
+const config = {
+ apiUrl : 'http://douhuo.douhuofalv.com/api/',
+ timeout : 60000
+}
+
+let loginHintState = false
+
+// 网络请求
+const request = (parameter, hideLoding = true) => {
+ // 检查url配置
+ if(parameter.url === 'undefined' || parameter.url === ''){
+ uni.showToast({
+ title: '请求地址不能为空',
+ icon : 'none'
+ })
+ return
+ }
+ // 注入header
+ config.header = {
+ 'Accept': 'application/json',
+ 'Authorization': store.getters.getToken || uni.getStorageSync('token')
+ }
+ // 加载提示
+ if(!hideLoding) uni.showLoading({
+ title: '加载中',
+ mask : true
+ });
+
+ // 请求实例
+ return new Promise((resolve, reject) => {
+ uni.request({
+ url : config.apiUrl + parameter.url,
+ timeout : config.timeout,
+ header : config.header || {},
+ data : parameter.data || {},
+ method : parameter.method || 'GET',
+ success : res => {
+ if (res.header.Authorization){
+ updateToken('token', res.header.Authorization)
+ }
+ if(res.statusCode === 200){
+ uni.hideLoading()
+ const resolveData = res.data
+ if(resolveData.status_code === 200) {
+ resolve(resolveData.data)
+ return
+ }
+ if(resolveData.status_code === 401) {
+ loginHint()
+ return
+ }
+ reject(resolveData)
+ return
+ }
+ errToast(res.statusCode)
+ },
+ fail(err) {
+ uni.showToast({
+ title: '网络错误,请检查您设备网络状态',
+ icon : 'none'
+ })
+ }
+ })
+ })
+}
+
+// 文件上传
+const uploading = (paths, formData, url) => {
+ uni.showLoading({
+ title: '上传中',
+ mask : true
+ });
+ // 注入header
+ config.header = {
+ 'Accept': 'application/json',
+ 'Authorization': store.getters.getToken || ''
+ }
+ // 上传图片
+ return new Promise((resolve, reject) => {
+ uni.uploadFile({
+ url : config.apiUrl + (url || 'storage/uploads'),
+ files : paths,
+ header : config.header || {},
+ formData: formData || {},
+ success : res=>{
+ if(res.statusCode === 200){
+ uni.hideLoading()
+ let updData = JSON.parse(res.data)
+ if(updData.status_code === 200){
+ resolve(updData.data)
+ return
+ }
+ reject(updData)
+ return
+ }
+ errToast(res.statusCode)
+ }
+ })
+ })
+}
+
+// 处理一些http请求错误提示
+const errToast = (code) => {
+ switch (code){
+ case 404:
+ uni.showToast({
+ title: code + '接口不存在,请联系系统管理员',
+ icon : 'none'
+ })
+ break;
+ case 405:
+ uni.showToast({
+ title: code + '请检查接口请求方式错误',
+ icon : 'none'
+ })
+ break;
+ case 500:
+ uni.showToast({
+ title: code + '服务端错误,请检查服务器信息',
+ icon : 'none'
+ })
+ break;
+ }
+}
+
+// 更新token
+const updateToken = (token) => {
+ store.commit('setToken', token)
+ // 清除退出登录标识
+ uni.removeStorageSync('isnew')
+}
+
+// 处理登录提示
+const loginHint = () => {
+ if( loginHintState ) return
+ if(!loginHintState) loginHintState = true
+ updateToken('')
+ uni.showModal({
+ title: '登录提示',
+ content: '您的登录信息已过期,请重新登录',
+ confirmColor: '#8b64fd',
+ showCancel:false,
+ success: res=> {
+ loginHintState = false
+ if (res.confirm) {
+ uni.reLaunch({
+ url:'/pages/auth/auth'
+ })
+ }
+ }
+ })
+}
+
+export {
+ request,
+ uploading,
+ config
+}
diff --git a/apis/interfaces/account.js b/apis/interfaces/account.js
new file mode 100644
index 0000000..09803f3
--- /dev/null
+++ b/apis/interfaces/account.js
@@ -0,0 +1,49 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 账户
+ */
+
+import { request } from '../index'
+
+// 火力值账户
+const score = (data) =>{
+ return request({
+ url : "user/account/score",
+ data
+ })
+}
+
+// 活力值变动
+const log = data => {
+ return request({
+ url : "user/account/score",
+ data
+ })
+}
+
+// 业绩账户
+const cash = data => {
+ return request({
+ url: "perf/lists",
+ data
+ })
+}
+
+// 奖金账户
+const balance = data => {
+ return request({
+ url: "user/account/balance",
+ data
+ })
+}
+
+export {
+ score,
+ log,
+ cash,
+ balance
+}
+
diff --git a/apis/interfaces/address.js b/apis/interfaces/address.js
new file mode 100644
index 0000000..75e253a
--- /dev/null
+++ b/apis/interfaces/address.js
@@ -0,0 +1,21 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 地址信息
+ */
+
+import { request } from '../index'
+
+// 城市列表
+const region = data => {
+ return request({
+ url : 'region/all',
+ data
+ })
+}
+
+export {
+ region
+}
\ No newline at end of file
diff --git a/apis/interfaces/auth.js b/apis/interfaces/auth.js
new file mode 100644
index 0000000..a4620eb
--- /dev/null
+++ b/apis/interfaces/auth.js
@@ -0,0 +1,61 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 鉴权
+ */
+
+import { request } from '../index'
+
+// 用户名密码登录
+const auth = (data) =>{
+ return request({
+ url : "user/auth/login",
+ method : "POST",
+ data
+ })
+}
+
+// 用户注册
+const register = data => {
+ return request({
+ url : "user/auth/register",
+ method : "POST",
+ data
+ })
+}
+
+// 图形验证码
+const captcha = () => {
+ return request({
+ url : "user/auth/captcha",
+ method : "POST"
+ })
+}
+
+// 获取短信验证码
+const verifyCaptcha = data => {
+ return request({
+ url : "user/auth/verify_captcha",
+ method : "POST",
+ data
+ })
+}
+
+// 重置密码
+const resetPassword = data => {
+ return request({
+ url : "user/auth/reset_password",
+ method : "POST",
+ data
+ })
+}
+
+export {
+ auth,
+ register,
+ captcha,
+ verifyCaptcha,
+ resetPassword
+}
diff --git a/apis/interfaces/business.js b/apis/interfaces/business.js
new file mode 100644
index 0000000..5b07481
--- /dev/null
+++ b/apis/interfaces/business.js
@@ -0,0 +1,67 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 业务
+ */
+
+import { request } from '../index'
+
+// 主业务类型
+const business = () =>{
+ return request({
+ url: "business/index",
+ })
+}
+
+// 获取主业务机构
+const institution = id =>{
+ return request({
+ url: "business/" + id + "/institution",
+ })
+}
+
+// 获取机构表单数据
+const institutionType = id => {
+ return request({
+ url: "business/institution/" + id + "/type",
+ })
+}
+
+// 搜索办理业务用户
+const availableUser = (type, value) => {
+ if(type === 'mobile'){
+ return request({
+ url : "user/relations/child_by_mobile",
+ data: {
+ mobile: value
+ }
+ })
+ }
+ if(type === 'name'){
+ return request({
+ url : "user/relations/child_by_name",
+ data: {
+ name: value
+ }
+ })
+ }
+}
+
+// 提交用户办理信息
+const submitStore = data => {
+ return request({
+ url : "business/store",
+ method : "POST",
+ data
+ })
+}
+
+export {
+ business,
+ institution,
+ institutionType,
+ availableUser,
+ submitStore
+}
diff --git a/apis/interfaces/college.js b/apis/interfaces/college.js
new file mode 100644
index 0000000..94dfc6c
--- /dev/null
+++ b/apis/interfaces/college.js
@@ -0,0 +1,47 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 商学院
+ */
+
+import { request } from '../index'
+
+// 考试评测列表
+const evaluations = () => {
+ return request({
+ url : "evaluations",
+ })
+}
+
+// 考试题列表
+const questions = id => {
+ return request({
+ url : "evaluations/" + id + "/questions",
+ })
+}
+
+// 提交答案
+const answers = (id, data) => {
+ return request({
+ url : "evaluations/" + id + "/answers",
+ method : "POST",
+ data
+ })
+}
+
+// 考试答案解析
+const report = id => {
+ return request({
+ url : "evaluations/" + id + "/report"
+ })
+}
+
+export {
+ evaluations,
+ questions,
+ answers,
+ report
+}
+
diff --git a/apis/interfaces/mailed.js b/apis/interfaces/mailed.js
new file mode 100644
index 0000000..351df5c
--- /dev/null
+++ b/apis/interfaces/mailed.js
@@ -0,0 +1,38 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 邮寄材料
+ */
+
+import { request } from '../index'
+
+// 获取物流公司列表
+const express = () => {
+ return request({
+ url : 'express',
+ })
+}
+
+// 获取订单邮寄地址
+const orderAddress = id => {
+ return request({
+ url : 'business/' + id + '/address'
+ })
+}
+
+// 提交邮寄物品
+const submitExpresses = (id, data) => {
+ return request({
+ url : 'business/' + id + '/expresses',
+ method : 'POST',
+ data
+ })
+}
+
+export {
+ express,
+ orderAddress,
+ submitExpresses
+}
\ No newline at end of file
diff --git a/apis/interfaces/order.js b/apis/interfaces/order.js
new file mode 100644
index 0000000..3686e94
--- /dev/null
+++ b/apis/interfaces/order.js
@@ -0,0 +1,155 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 订单管理
+ */
+
+import { request } from '../index'
+
+// 订单列表
+const lists = data => {
+ return request({
+ url : 'app/orders',
+ data
+ })
+}
+
+// 配置服务包
+const service = orderId => {
+ return request({
+ url : 'business/' + orderId + '/service',
+ method : 'POST'
+ })
+}
+
+// 添加服务包
+const serviceAdd = (orderId, items) => {
+ return request({
+ url : 'business/' + orderId + '/service/calculate',
+ method : 'POST',
+ data : {
+ items
+ }
+ })
+}
+
+// 删除服务包
+const serviceRemove = (id, data) => {
+ return request({
+ url : 'business/' + id + '/service/remove',
+ method : 'POST',
+ data
+ })
+}
+
+// 完成分配
+const serviceOver = orderId => {
+ return request({
+ url : 'business/' + orderId + '/service/over',
+ method : 'POST',
+ })
+}
+
+// 订单详情
+const info = orderId => {
+ return request({
+ url : 'app/orders/' + orderId
+ })
+}
+
+// 订单资料完善情况
+const perfect = orderId => {
+ return request({
+ url : 'app/orders/' + orderId + '/data',
+ })
+}
+
+// 订单基础资料信息
+const perfectBase = orderId => {
+ return request({
+ url : 'business/' + orderId + '/user/base'
+ })
+}
+
+// 提交基础资料信息
+const updPerfectBase = (orderId, data) => {
+ return request({
+ url : 'business/' + orderId + '/user/base',
+ method : 'POST',
+ data
+ })
+}
+
+// 订单机构资料
+const baseBase = baseId => {
+ return request({
+ url : 'business/' + baseId + '/user/bank'
+ })
+}
+
+// 更新机构资料
+const updBaseBase = (baseId, data) => {
+ return request({
+ url : 'business/' + baseId + '/user/bank',
+ method : 'POST',
+ data
+ })
+}
+
+// 待补差价订单
+const ordersDiffs = data => {
+ return request({
+ url : 'app/orders/diffs'
+ })
+}
+
+// 待修改订单
+const ordersEditorders = data => {
+ return request({
+ url : 'app/orders/editorders'
+ })
+}
+
+// 个人订单签约
+const orderSign = (id, data) => {
+ return request({
+ url : 'business/' + id + '/sign_url',
+ data
+ })
+}
+
+// 查询订单签约状态
+const getOrderSignStatus = id => {
+ return request({
+ url: 'business/' + id + '/sign_status'
+ })
+}
+
+// 机构预估方案
+const getSchemes = id => {
+ return request({
+ url: 'business/' + id + '/item_scheme'
+ })
+}
+
+// 支付订单
+export {
+ lists,
+ service,
+ serviceAdd,
+ serviceRemove,
+ serviceOver,
+ info,
+ perfect,
+ perfectBase,
+ updPerfectBase,
+ baseBase,
+ updBaseBase,
+ ordersDiffs,
+ ordersEditorders,
+ orderSign,
+ getOrderSignStatus,
+ getSchemes
+}
diff --git a/apis/interfaces/pay.js b/apis/interfaces/pay.js
new file mode 100644
index 0000000..07fa977
--- /dev/null
+++ b/apis/interfaces/pay.js
@@ -0,0 +1,28 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 收银台
+ */
+
+import { request } from '../index'
+
+// 抖火币支付
+const coinPay = orderId => {
+ return request({
+ url : 'pay/order/' + orderId + '/score',
+ })
+}
+
+// 抖火币补差价支付
+const diffCoinPay = orderId => {
+ return request({
+ url : 'pay/diff/' + orderId + '/score'
+ })
+}
+
+export {
+ coinPay,
+ diffCoinPay
+}
\ No newline at end of file
diff --git a/apis/interfaces/transfers.js b/apis/interfaces/transfers.js
new file mode 100644
index 0000000..b8ba61f
--- /dev/null
+++ b/apis/interfaces/transfers.js
@@ -0,0 +1,59 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 转让订单管理
+ */
+
+import { request } from '../index'
+
+// 订单列表
+const lists = data => {
+ return request({
+ url : 'app/transfers',
+ data
+ })
+}
+
+// 可转让对象
+const levels = id => {
+ return request({
+ url: 'app/transfer/' + id + '/levels',
+ })
+}
+
+// 转让
+const transfer = (id, level) => {
+ return request({
+ url : 'app/' + id + '/transfer',
+ data: {
+ level
+ },
+ method: 'POST'
+ })
+}
+
+// 接收订单
+const transferAgree = id => {
+ return request({
+ url : 'app/' + id + '/agree',
+ method: 'POST'
+ })
+}
+
+// 拒绝接收
+const transferRefuse = id => {
+ return request({
+ url : 'app/' + id + '/refuse',
+ method: 'POST'
+ })
+}
+
+export {
+ lists,
+ levels,
+ transfer,
+ transferAgree,
+ transferRefuse
+}
diff --git a/apis/interfaces/uploading.js b/apis/interfaces/uploading.js
new file mode 100644
index 0000000..8d2a528
--- /dev/null
+++ b/apis/interfaces/uploading.js
@@ -0,0 +1,17 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 上传图片
+ */
+
+import { uploading as upd } from '../index'
+
+const uploads = (paths, fromData) => {
+ return upd(paths, fromData)
+}
+
+export {
+ uploads
+}
diff --git a/apis/interfaces/user.js b/apis/interfaces/user.js
new file mode 100644
index 0000000..7aef592
--- /dev/null
+++ b/apis/interfaces/user.js
@@ -0,0 +1,84 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 用户
+ */
+
+import { request } from '../index'
+
+// 我的下级用户
+const relations = data => {
+ return request({
+ url : 'user/relations',
+ data
+ })
+}
+
+// 我的邀请码
+const code = () => {
+ return request({
+ url : 'user/invite',
+ })
+}
+
+// 用户信息
+const info = () => {
+ return request({
+ url : 'app/user/info'
+ })
+}
+
+// 更新用户资料
+const updInfo = (key, value) => {
+ return request({
+ url : 'user/setting/' + key,
+ method : 'PUT',
+ data : {
+ value
+ }
+ })
+}
+
+// 用户认证状态
+const certified = () => {
+ return request({
+ url : 'user/certified'
+ })
+}
+
+// 用户认证
+const certification = data => {
+ return request({
+ url : 'user/certification',
+ method : 'POST',
+ data
+ })
+}
+
+// 获取身份证认证信息
+const identityOcr = () => {
+ return request({
+ url : 'user/certification'
+ })
+}
+
+// 获取签名地址
+const eSigns = data => {
+ return request({
+ url : 'e-signs/authorize/psn',
+ data
+ })
+}
+
+export {
+ relations,
+ code,
+ info,
+ updInfo,
+ certified,
+ certification,
+ identityOcr,
+ eSigns
+}
diff --git a/apis/interfaces/work.js b/apis/interfaces/work.js
new file mode 100644
index 0000000..64b090d
--- /dev/null
+++ b/apis/interfaces/work.js
@@ -0,0 +1,28 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ * moduleName: 工作台
+ */
+
+import { request } from '../index'
+
+// 工作台首页
+const index = () => {
+ return request({
+ url : 'app/user',
+ })
+}
+
+// 会员权益
+const rights = () => {
+ return request({
+ url : 'app/rights'
+ })
+}
+
+export {
+ index,
+ rights
+}
\ No newline at end of file
diff --git a/components/oct-checkbox.vue b/components/oct-checkbox.vue
new file mode 100644
index 0000000..9126ae7
--- /dev/null
+++ b/components/oct-checkbox.vue
@@ -0,0 +1,20 @@
+
+
+ 选择组件
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/oct-input.vue b/components/oct-input.vue
new file mode 100644
index 0000000..e7f543b
--- /dev/null
+++ b/components/oct-input.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/oct-picker.vue b/components/oct-picker.vue
new file mode 100644
index 0000000..f718f38
--- /dev/null
+++ b/components/oct-picker.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/oct-radio.vue b/components/oct-radio.vue
new file mode 100644
index 0000000..b839a56
--- /dev/null
+++ b/components/oct-radio.vue
@@ -0,0 +1,20 @@
+
+
+ 单选组件
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/oct-textarea.vue b/components/oct-textarea.vue
new file mode 100644
index 0000000..76c27b1
--- /dev/null
+++ b/components/oct-textarea.vue
@@ -0,0 +1,20 @@
+
+
+ 文本域组件
+
+
+
+
+
+
\ No newline at end of file
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..3c7c20a
--- /dev/null
+++ b/main.js
@@ -0,0 +1,22 @@
+import App from './App'
+
+import Vue from 'vue'
+import uView from "uview-ui";
+
+import store from './store'
+import { router, RouterMount } from 'router'
+import Mylink from './node_modules/uni-simple-router/dist/link.vue'
+
+Vue.component('my-link',Mylink)
+
+Vue.use(uView)
+Vue.use(router)
+
+Vue.config.productionTip = false
+App.mpType = 'app'
+const app = new Vue({
+ store,
+ ...App
+})
+
+app.$mount()
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..7cf1e2d
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,117 @@
+{
+ "name" : "抖火",
+ "appid" : "__UNI__C305C03",
+ "description" : "",
+ "versionName" : "1.0.3",
+ "versionCode" : "100",
+ "transformPx" : false,
+ /* 5+App特有相关 */
+ "app-plus" : {
+ "usingComponents" : true,
+ "nvueStyleCompiler" : "uni-app",
+ "compilerVersion" : 3,
+ "splashscreen" : {
+ "alwaysShowBeforeRender" : true,
+ "waiting" : true,
+ "autoclose" : true,
+ "delay" : 0
+ },
+ "safearea" : {
+ "bottom" : {
+ "offset" : "none"
+ }
+ },
+ /* 模块配置 */
+ "modules" : {
+ "Barcode" : {},
+ "Camera" : {}
+ },
+ /* 应用发布信息 */
+ "distribute" : {
+ /* android打包配置 */
+ "android" : {
+ "permissions" : [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "schemes" : "doufire"
+ },
+ /* ios打包配置 */
+ "ios" : {
+ "dSYMs" : false
+ },
+ /* SDK配置 */
+ "sdkConfigs" : {
+ "ad" : {}
+ },
+ "icons" : {
+ "android" : {
+ "hdpi" : "unpackage/res/icons/72x72.png",
+ "xhdpi" : "unpackage/res/icons/96x96.png",
+ "xxhdpi" : "unpackage/res/icons/144x144.png",
+ "xxxhdpi" : "unpackage/res/icons/192x192.png"
+ },
+ "ios" : {
+ "appstore" : "unpackage/res/icons/1024x1024.png",
+ "ipad" : {
+ "app" : "unpackage/res/icons/76x76.png",
+ "app@2x" : "unpackage/res/icons/152x152.png",
+ "notification" : "unpackage/res/icons/20x20.png",
+ "notification@2x" : "unpackage/res/icons/40x40.png",
+ "proapp@2x" : "unpackage/res/icons/167x167.png",
+ "settings" : "unpackage/res/icons/29x29.png",
+ "settings@2x" : "unpackage/res/icons/58x58.png",
+ "spotlight" : "unpackage/res/icons/40x40.png",
+ "spotlight@2x" : "unpackage/res/icons/80x80.png"
+ },
+ "iphone" : {
+ "app@2x" : "unpackage/res/icons/120x120.png",
+ "app@3x" : "unpackage/res/icons/180x180.png",
+ "notification@2x" : "unpackage/res/icons/40x40.png",
+ "notification@3x" : "unpackage/res/icons/60x60.png",
+ "settings@2x" : "unpackage/res/icons/58x58.png",
+ "settings@3x" : "unpackage/res/icons/87x87.png",
+ "spotlight@2x" : "unpackage/res/icons/80x80.png",
+ "spotlight@3x" : "unpackage/res/icons/120x120.png"
+ }
+ }
+ }
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp" : {},
+ /* 小程序特有相关 */
+ "mp-weixin" : {
+ "appid" : "",
+ "setting" : {
+ "urlCheck" : false
+ },
+ "usingComponents" : true
+ },
+ "mp-alipay" : {
+ "usingComponents" : true
+ },
+ "mp-baidu" : {
+ "usingComponents" : true
+ },
+ "mp-toutiao" : {
+ "usingComponents" : true
+ },
+ "uniStatistics" : {
+ "enable" : false
+ },
+ "vueVersion" : "2"
+}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..0ad570c
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,568 @@
+{
+ "name": "dou_fire",
+ "version": "1.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "dou_fire",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "uni-read-pages": "^1.0.5",
+ "uni-simple-router": "^2.0.7",
+ "uview-ui": "^2.0.31",
+ "vue-canvas-poster": "^1.2.1",
+ "vuex": "^4.0.2"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
+ "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
+ "integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
+ "peer": true,
+ "dependencies": {
+ "@babel/parser": "^7.16.4",
+ "@vue/shared": "3.2.45",
+ "estree-walker": "^2.0.2",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
+ "integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-core": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
+ "integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
+ "peer": true,
+ "dependencies": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.45",
+ "@vue/compiler-dom": "3.2.45",
+ "@vue/compiler-ssr": "3.2.45",
+ "@vue/reactivity-transform": "3.2.45",
+ "@vue/shared": "3.2.45",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7",
+ "postcss": "^8.1.10",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
+ "integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "6.4.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz",
+ "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ=="
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.45.tgz",
+ "integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==",
+ "peer": true,
+ "dependencies": {
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "node_modules/@vue/reactivity-transform": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
+ "integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.45",
+ "@vue/shared": "3.2.45",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.45.tgz",
+ "integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==",
+ "peer": true,
+ "dependencies": {
+ "@vue/reactivity": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz",
+ "integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==",
+ "peer": true,
+ "dependencies": {
+ "@vue/runtime-core": "3.2.45",
+ "@vue/shared": "3.2.45",
+ "csstype": "^2.6.8"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.45.tgz",
+ "integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-ssr": "3.2.45",
+ "@vue/shared": "3.2.45"
+ },
+ "peerDependencies": {
+ "vue": "3.2.45"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz",
+ "integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==",
+ "peer": true
+ },
+ "node_modules/core-js": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
+ "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+ "hasInstallScript": true
+ },
+ "node_modules/csstype": {
+ "version": "2.6.21",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
+ "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+ "peer": true
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "peer": true
+ },
+ "node_modules/magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "peer": true,
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/postcss": {
+ "version": "8.4.20",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
+ "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "deprecated": "Please use @jridgewell/sourcemap-codec instead",
+ "peer": true
+ },
+ "node_modules/uni-read-pages": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz",
+ "integrity": "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA==",
+ "hasInstallScript": true
+ },
+ "node_modules/uni-simple-router": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.7.tgz",
+ "integrity": "sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA=="
+ },
+ "node_modules/uview-ui": {
+ "version": "2.0.31",
+ "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz",
+ "integrity": "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.45.tgz",
+ "integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==",
+ "peer": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.2.45",
+ "@vue/compiler-sfc": "3.2.45",
+ "@vue/runtime-dom": "3.2.45",
+ "@vue/server-renderer": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "node_modules/vue-canvas-poster": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/vue-canvas-poster/-/vue-canvas-poster-1.2.1.tgz",
+ "integrity": "sha512-YY5ygbeQSqhiJyj6QXYgSRZ6Ywhvi1gVsfcvBIoCx4Yq9E/gAV32uOhnZz45qsklP86uGc9ypKJAXiX6Dzrdxw==",
+ "dependencies": {
+ "core-js": "^2.6.5",
+ "vue": "^2.6.10"
+ }
+ },
+ "node_modules/vue-canvas-poster/node_modules/@vue/compiler-sfc": {
+ "version": "2.7.14",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
+ "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+ "dependencies": {
+ "@babel/parser": "^7.18.4",
+ "postcss": "^8.4.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "node_modules/vue-canvas-poster/node_modules/csstype": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
+ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
+ },
+ "node_modules/vue-canvas-poster/node_modules/vue": {
+ "version": "2.7.14",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz",
+ "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==",
+ "dependencies": {
+ "@vue/compiler-sfc": "2.7.14",
+ "csstype": "^3.1.0"
+ }
+ },
+ "node_modules/vuex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
+ "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
+ "dependencies": {
+ "@vue/devtools-api": "^6.0.0-beta.11"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/parser": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
+ "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA=="
+ },
+ "@vue/compiler-core": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
+ "integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
+ "peer": true,
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/shared": "3.2.45",
+ "estree-walker": "^2.0.2",
+ "source-map": "^0.6.1"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
+ "integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
+ "peer": true,
+ "requires": {
+ "@vue/compiler-core": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
+ "integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
+ "peer": true,
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.45",
+ "@vue/compiler-dom": "3.2.45",
+ "@vue/compiler-ssr": "3.2.45",
+ "@vue/reactivity-transform": "3.2.45",
+ "@vue/shared": "3.2.45",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7",
+ "postcss": "^8.1.10",
+ "source-map": "^0.6.1"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
+ "integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
+ "peer": true,
+ "requires": {
+ "@vue/compiler-dom": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "@vue/devtools-api": {
+ "version": "6.4.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz",
+ "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ=="
+ },
+ "@vue/reactivity": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.45.tgz",
+ "integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==",
+ "peer": true,
+ "requires": {
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "@vue/reactivity-transform": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
+ "integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
+ "peer": true,
+ "requires": {
+ "@babel/parser": "^7.16.4",
+ "@vue/compiler-core": "3.2.45",
+ "@vue/shared": "3.2.45",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.25.7"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.45.tgz",
+ "integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==",
+ "peer": true,
+ "requires": {
+ "@vue/reactivity": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz",
+ "integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==",
+ "peer": true,
+ "requires": {
+ "@vue/runtime-core": "3.2.45",
+ "@vue/shared": "3.2.45",
+ "csstype": "^2.6.8"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.45.tgz",
+ "integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==",
+ "peer": true,
+ "requires": {
+ "@vue/compiler-ssr": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz",
+ "integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==",
+ "peer": true
+ },
+ "core-js": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
+ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+ },
+ "csstype": {
+ "version": "2.6.21",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
+ "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
+ "peer": true
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "peer": true
+ },
+ "magic-string": {
+ "version": "0.25.9",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
+ "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "peer": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "postcss": {
+ "version": "8.4.20",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
+ "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "peer": true
+ },
+ "uni-read-pages": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz",
+ "integrity": "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA=="
+ },
+ "uni-simple-router": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.7.tgz",
+ "integrity": "sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA=="
+ },
+ "uview-ui": {
+ "version": "2.0.31",
+ "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz",
+ "integrity": "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw=="
+ },
+ "vue": {
+ "version": "3.2.45",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.45.tgz",
+ "integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==",
+ "peer": true,
+ "requires": {
+ "@vue/compiler-dom": "3.2.45",
+ "@vue/compiler-sfc": "3.2.45",
+ "@vue/runtime-dom": "3.2.45",
+ "@vue/server-renderer": "3.2.45",
+ "@vue/shared": "3.2.45"
+ }
+ },
+ "vue-canvas-poster": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/vue-canvas-poster/-/vue-canvas-poster-1.2.1.tgz",
+ "integrity": "sha512-YY5ygbeQSqhiJyj6QXYgSRZ6Ywhvi1gVsfcvBIoCx4Yq9E/gAV32uOhnZz45qsklP86uGc9ypKJAXiX6Dzrdxw==",
+ "requires": {
+ "core-js": "^2.6.5",
+ "vue": "^2.6.10"
+ },
+ "dependencies": {
+ "@vue/compiler-sfc": {
+ "version": "2.7.14",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
+ "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+ "requires": {
+ "@babel/parser": "^7.18.4",
+ "postcss": "^8.4.14",
+ "source-map": "^0.6.1"
+ }
+ },
+ "csstype": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz",
+ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
+ },
+ "vue": {
+ "version": "2.7.14",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz",
+ "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==",
+ "requires": {
+ "@vue/compiler-sfc": "2.7.14",
+ "csstype": "^3.1.0"
+ }
+ }
+ }
+ },
+ "vuex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
+ "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
+ "requires": {
+ "@vue/devtools-api": "^6.0.0-beta.11"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..0056288
--- /dev/null
+++ b/package.json
@@ -0,0 +1,15 @@
+{
+ "dependencies": {
+ "uni-read-pages": "^1.0.5",
+ "uni-simple-router": "^2.0.7",
+ "uview-ui": "^2.0.31",
+ "vue-canvas-poster": "^1.2.1",
+ "vuex": "^4.0.2"
+ },
+ "name": "dou_fire",
+ "version": "1.0.0",
+ "main": "index.js",
+ "repository": "https://git.yuzhankeji.cn/TmOct5/dou_fire.git",
+ "author": "唐明明 <970899069@qq.com>",
+ "license": "MIT"
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..39e111d
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,404 @@
+{
+ "pages": [{
+ "path": "pages/index/index",
+ "name": "Index",
+ "style": {
+ "navigationBarTitleText": "抖火法务咨询服务",
+ "navigationBarBackgroundColor": "#FFFFFF"
+ }
+ }, {
+ "path": "pages/college/index",
+ "name": "College",
+ "style": {
+ "navigationBarTitleText": "商学院",
+ "navigationStyle": "custom"
+ }
+ }, {
+ "path": "pages/work/index",
+ "name": "Work",
+ "style": {
+ "navigationBarTitleText": "工作台",
+ "navigationStyle": "custom"
+ }
+ }, {
+ "path": "pages/user/index",
+ "name": "User",
+ "style": {
+ "navigationBarTitleText": "",
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/auth/auth",
+ "name": "Auth",
+ "style": {
+ "navigationBarTitleText": "",
+ "disableScroll": false,
+ "navigationStyle": "custom",
+ "animationType": "slide-in-bottom"
+ }
+ }, {
+ "path": "pages/auth/registered",
+ "name": "Registered",
+ "style": {
+ "navigationBarTitleText": "注册",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/auth/resetPassword",
+ "name": "ResetPassword",
+ "style": {
+ "navigationBarTitleText": "重置密码",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/college/test",
+ "name": "CollegeTest",
+ "auth": true,
+ "style": {
+ "navigationBarTitleText": "考试",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+
+ }, {
+ "path": "pages/richText/richText",
+ "name": "RichText",
+ "style": {
+ "navigationBarTitleText": "-",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/work/create",
+ "name": "OrderCreate",
+ "auth": true,
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/work/orders",
+ "name": "Orders",
+ "auth": true,
+ "style": {
+ "navigationBarTitleText": "订单管理",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/work/service",
+ "name": "OrdersService",
+ "auth": true,
+ "style": {
+ "navigationBarTitleText": "分配服务包",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff",
+ "app-plus": {
+ "titleNView": {
+ "buttons": [{
+ "text": "添加",
+ "color": "#446EFE",
+ "fontSize": "32rpx",
+ "width": "120rpx"
+ }]
+ }
+ }
+ }
+ }, {
+ "path": "pages/work/available",
+ "name": "OrderAvailable",
+ "auth": true,
+ "style": {
+ "navigationBarTitleText": "搜索用户",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/work/generate",
+ "auth": true,
+ "name": "WorkGenerate",
+ "style": {
+ "navigationBarTitleText": "基础信息",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/user/info",
+ "auth": true,
+ "name": "UserInfo",
+ "style": {
+ "navigationBarTitleText": "编辑",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/user/code",
+ "auth": true,
+ "name": "UserCode",
+ "style": {
+ "navigationBarTitleText": "邀请二维码",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#1F25AE",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/user/certification",
+ "auth": true,
+ "name": "UserCertification",
+ "style": {
+ "navigationBarTitleText": "实名认证",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/user/team",
+ "auth": true,
+ "name": "UserTeam",
+ "style": {
+ "navigationBarTitleText": "我的客户",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/user/set",
+ "auth": true,
+ "name": "UserSet",
+ "style": {
+ "navigationBarTitleText": "设置",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/account/bonus",
+ "auth": true,
+ "name": "AccountBonus",
+ "style": {
+ "navigationBarTitleText": "奖金账户",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#926fff",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/account/cash",
+ "auth": true,
+ "name": "AccountCash",
+ "style": {
+ "navigationBarTitleText": "业绩账户",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/account/integral",
+ "auth": true,
+ "name": "AccountIntegral",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff",
+ "app-plus": {
+ "titleNView": {
+ "buttons": [{
+ "text": "充值记录",
+ "color": "#111",
+ "fontSize": "32rpx",
+ "width": "180rpx"
+ }]
+ }
+ }
+ }
+ }, {
+ "path": "pages/college/answer",
+ "auth": true,
+ "name": "CollegeAnswer",
+ "style": {
+ "navigationBarTitleText": "答题",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/college/testResults",
+ "auth": true,
+ "name": "CollegeResults",
+ "style": {
+ "navigationBarTitleText": "考试结果",
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/account/logs",
+ "auth": true,
+ "name": "AccountLogs",
+ "style": {
+ "navigationBarTitleText": "账户记录",
+ "enablePullDownRefresh": false
+ }
+
+ }, {
+ "path": "pages/pay/pay",
+ "auth": true,
+ "name": "Pay",
+ "style": {
+ "navigationBarTitleText": "收银台",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/work/orderInfo",
+ "auth": true,
+ "name": "OrderInfo",
+ "style": {
+ "navigationBarTitleText": "详情",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/user/eSign",
+ "auth": true,
+ "name": "ESign",
+ "style": {
+ "navigationBarTitleText": "人脸认证",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#FFFFFF"
+ }
+ }, {
+ "path": "pages/work/perfectChoose",
+ "auth": true,
+ "name": "WorkPerfectChoose",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/work/perfectInstitutions",
+ "auth": true,
+ "name": "WorkPerfectInstitutions",
+ "style": {
+ "navigationBarTitleText": "机构信息",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/work/perfectBasis",
+ "auth": true,
+ "name": "WorkPerfectBasis",
+ "style": {
+ "navigationBarTitleText": "基础信息",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/transfers/lists",
+ "auth": true,
+ "name": "TransfersOrders",
+ "style": {
+ "navigationBarTitleText": "转让订单",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+ }, {
+ "path": "pages/work/modifyOrder",
+ "auth": true,
+ "name": "ModifyOrder",
+ "style": {
+ "navigationBarTitleText": "修改资料订单",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+
+ }, {
+ "path": "pages/work/poorOrder",
+ "auth": true,
+ "name": "PoorOrder",
+ "style": {
+ "navigationBarTitleText": "补差价订单",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+
+ }, {
+ "path": "pages/work/refundOrder",
+ "auth": true,
+ "name": "RefundOrder",
+ "style": {
+ "navigationBarTitleText": "退款订单",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff"
+ }
+
+ }, {
+ "path": "pages/work/mailed",
+ "auth": true,
+ "name": "MailedOrder",
+ "style": {
+ "navigationBarTitleText": "邮寄材料",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white"
+ }
+ }, {
+ "path": "pages/work/mailedInfo",
+ "auth": true,
+ "name": "MailedOrderInfo",
+ "style": {
+ "navigationBarTitleText": "邮寄信息",
+ "enablePullDownRefresh": false
+ }
+ }, {
+ "path": "pages/work/schemes",
+ "auth": true,
+ "name": "OrderSchemes",
+ "style": {
+ "navigationBarTitleText": "预估方案",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#446EFE",
+ "navigationBarTextStyle": "white"
+ }
+ }],
+ "globalStyle": {
+ "navigationBarTextStyle": "black",
+ "navigationBarTitleText": "抖火",
+ "navigationBarBackgroundColor": "#F8F8F8",
+ "backgroundColor": "#F8F8F8"
+ },
+ "tabBar": {
+ "backgroundColor": "white",
+ "borderStyle": "white",
+ "color": "#999999",
+ "selectedColor": "#446EFE",
+ "list": [{
+ "iconPath": "static/icons/tabs_icon_00.png",
+ "selectedIconPath": "static/icons/tabs_show_00.png",
+ "pagePath": "pages/index/index",
+ "text": "服务包"
+ }, {
+ "iconPath": "static/icons/tabs_icon_01.png",
+ "selectedIconPath": "static/icons/tabs_show_01.png",
+ "pagePath": "pages/college/index",
+ "text": "商学院"
+ }, {
+ "iconPath": "static/icons/tabs_icon_02.png",
+ "selectedIconPath": "static/icons/tabs_show_02.png",
+ "pagePath": "pages/work/index",
+ "text": "工作台"
+ }, {
+ "iconPath": "static/icons/tabs_icon_03.png",
+ "selectedIconPath": "static/icons/tabs_show_03.png",
+ "pagePath": "pages/user/index",
+ "text": "我的"
+ }]
+ },
+ "easycom": {
+ "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
+ },
+ "uniIdRouter": {}
+}
diff --git a/pages/account/bonus.vue b/pages/account/bonus.vue
new file mode 100644
index 0000000..2aa954a
--- /dev/null
+++ b/pages/account/bonus.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+ {{total}}
+ 账户余额
+
+ 提现
+
+
+
+
+
+
+
+
+
+ xxx奖金收益
+ 2022-12-12 10:18
+
+ +50000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/cash.vue b/pages/account/cash.vue
new file mode 100644
index 0000000..e64d07f
--- /dev/null
+++ b/pages/account/cash.vue
@@ -0,0 +1,199 @@
+
+
+
+
+ 个人业绩/
+ 团队业绩
+
+
+
+
+ {{total}}
+ 个人总业绩
+
+
+
+
+
+
+
+
+
+ {{item.type}}
+ {{item.perf}}
+ {{item.created_at}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/integral.vue b/pages/account/integral.vue
new file mode 100644
index 0000000..5632f46
--- /dev/null
+++ b/pages/account/integral.vue
@@ -0,0 +1,111 @@
+
+
+
+ 火力值
+ {{score}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/account/logs.vue b/pages/account/logs.vue
new file mode 100644
index 0000000..4108216
--- /dev/null
+++ b/pages/account/logs.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+ {{item.rule.title}}{{item.rule.remark}}
+ {{item.amount}}
+
+
+ {{item.created_at}}
+ {{item.frozen.text}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/auth/auth.vue b/pages/auth/auth.vue
new file mode 100644
index 0000000..c982536
--- /dev/null
+++ b/pages/auth/auth.vue
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+
+
+
+ 欢迎使用抖火法律
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我已阅读并同意
+ 服务协议、
+ 隐私权政策
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/auth/registered.vue b/pages/auth/registered.vue
new file mode 100644
index 0000000..0813644
--- /dev/null
+++ b/pages/auth/registered.vue
@@ -0,0 +1,282 @@
+
+
+ 你好,欢迎使用抖火法律
+ 请填写账号信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 图形验证
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/auth/resetPassword.vue b/pages/auth/resetPassword.vue
new file mode 100644
index 0000000..3f6a0cc
--- /dev/null
+++ b/pages/auth/resetPassword.vue
@@ -0,0 +1,284 @@
+
+
+ 重置账户登录密码
+ 请填写账号信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 图形验证
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/college/answer.vue b/pages/college/answer.vue
new file mode 100644
index 0000000..0c85a4f
--- /dev/null
+++ b/pages/college/answer.vue
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+
+
+
+
+ 单选题
+ 多选题
+ 判断题
+
+
+ {{questions[questionsIndex].title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 答题卡
+
+ 智能组卷(客观一)
+
+ 未答题
+ 已答题
+
+
+
+
+
+ {{index + 1}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/college/index.vue b/pages/college/index.vue
new file mode 100644
index 0000000..60719c4
--- /dev/null
+++ b/pages/college/index.vue
@@ -0,0 +1,536 @@
+
+
+
+
+
+
+ 商学院
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 公开课
+
+
+
+ 网授课
+
+
+
+ 面授班
+
+
+
+ 图书
+
+
+
+ 优选课程
+
+
+
+ 课表
+
+
+
+ 全国分校
+
+
+
+ 师资团队
+
+
+
+ 法律法规
+
+
+
+ 增补勘误
+
+
+
+
+
+
+ 考试习题
+ 海量学习包
+
+
+
+
+
+ 考试
+ 专业考试题
+
+
+
+
+
+
+ 热门网授课
+
+ 更多
+
+
+
+
+
+
+
+
+ 2022年至尊先锋VIP班
+
+ ¥2200
+ 1698人购买
+
+
+
+
+
+
+ 名师面授班
+
+ 更多
+
+
+
+
+
+
+ e学主客一体延考上岸班(上海)
+ 2028人报名
+ ¥2200
+
+
+
+
+
+ 热销图书
+
+ 更多
+
+
+
+
+
+
+
+
+ 2022年客观题精讲8...
+
+ ¥2200
+ 1698人购买
+
+
+
+
+
+
+ 法考资讯
+
+ 更多
+
+
+
+
+
+ 法律服务工作者
+ 2028人浏览
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/college/test.vue b/pages/college/test.vue
new file mode 100644
index 0000000..dbab121
--- /dev/null
+++ b/pages/college/test.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+ {{item.title}}
+ 考试时间:{{item.time}}分钟
+ 试卷满分:{{item.questions.all.score}}分
+ 及格分数:{{item.total}}分
+
+ ·单选{{item.questions.radio.count}}道题,每道题{{item.questions.radio.score}}分
+ ·多选{{item.questions.multi.count}}道,每道题{{item.questions.multi.score}}分
+ ·判断题{{item.questions.yesno.count}}道,每道题{{item.questions.yesno.score}}分
+ ·倒计时结束后系统将提示交卷
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/college/testResults.vue b/pages/college/testResults.vue
new file mode 100644
index 0000000..664c41e
--- /dev/null
+++ b/pages/college/testResults.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+ 恭喜您考试通过了~
+
+
+ 未通过,请再接再厉~
+
+
+
+
+ {{total}}分
+ 考试分数
+
+
+ {{accuracy}}%
+ 正确率
+
+
+
+
+
+
+
+ {{count}}
+ 题目数量
+
+
+ {{created}}
+ 考试日期
+
+
+
+
+
+ 正确
+ 错误
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..f2752f9
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,328 @@
+
+
+
+
+
+
+
+
+
+
+
+ 经法产品
+ 更多
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+ 中国工商信用卡服务...
+ ¥2200
+
+
+
+
+
+
+ 综法产品
+ 更多
+
+
+
+
+
+ 2022年尊享综法服务包
+ ¥2200
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/pay/pay.vue b/pages/pay/pay.vue
new file mode 100644
index 0000000..cc18640
--- /dev/null
+++ b/pages/pay/pay.vue
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/richText/richText.vue b/pages/richText/richText.vue
new file mode 100644
index 0000000..2d31121
--- /dev/null
+++ b/pages/richText/richText.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/transfers/lists.vue b/pages/transfers/lists.vue
new file mode 100644
index 0000000..b014b5c
--- /dev/null
+++ b/pages/transfers/lists.vue
@@ -0,0 +1,320 @@
+
+
+
+
+
+
+
+
+
+
+ {{item.order.order_no}}
+ {{item.status.text}}
+
+
+
+
+
+ {{itemType.title}}x{{itemType.number}}
+
+
+
+
+ {{citem.institution.title}}
+ ¥{{citem.price}}
+
+
+
+
+ ¥{{item.order.total}}
+
+
+
+ {{item.created_at}}
+
+
+
+
+
+ {{item.to.nickname}}
+
+
+
+ 拒绝
+ 接收
+
+ 查看
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/user/certification.vue b/pages/user/certification.vue
new file mode 100644
index 0000000..15a1709
--- /dev/null
+++ b/pages/user/certification.vue
@@ -0,0 +1,284 @@
+
+
+
+
+ 请拍摄并上传你的身份证照片
+
+
+
+
+
+ 拍摄正面
+
+
+
+
+
+ 拍摄反面
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/user/code.vue b/pages/user/code.vue
new file mode 100644
index 0000000..1746677
--- /dev/null
+++ b/pages/user/code.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 邀请码{{invite}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/user/eSign.vue b/pages/user/eSign.vue
new file mode 100644
index 0000000..9bf82d6
--- /dev/null
+++ b/pages/user/eSign.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/user/index.vue b/pages/user/index.vue
new file mode 100644
index 0000000..6f61f53
--- /dev/null
+++ b/pages/user/index.vue
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+ {{nickname}}
+
+ 实名认证
+ {{identity.name}}
+
+
+ 状态
+
+
+
+
+
+
+
+
+
+ 登录
+ 暂未登录
+
+
+
+
+
+
+
+
+ 火力值
+
+
+
+ 业绩账户
+
+
+
+
+ 我的客户
+
+
+
+ 奖金账户
+
+
+
+ 实名认证
+
+
+
+
+ 设置
+
+
+
+
+
+
+
+
diff --git a/pages/user/info.vue b/pages/user/info.vue
new file mode 100644
index 0000000..eb759ca
--- /dev/null
+++ b/pages/user/info.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/user/set.vue b/pages/user/set.vue
new file mode 100644
index 0000000..0aada9b
--- /dev/null
+++ b/pages/user/set.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
diff --git a/pages/user/team.vue b/pages/user/team.vue
new file mode 100644
index 0000000..b38f300
--- /dev/null
+++ b/pages/user/team.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+ {{item.nickname}}
+ 业务员
+ 普通用户
+ 顾问
+
+ {{item.username}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/available.vue b/pages/work/available.vue
new file mode 100644
index 0000000..db6f902
--- /dev/null
+++ b/pages/work/available.vue
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+
+
+ {{item.nickname}}
+ {{item.username}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.nickname}}
+ {{item.username}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/create.vue b/pages/work/create.vue
new file mode 100644
index 0000000..9467bac
--- /dev/null
+++ b/pages/work/create.vue
@@ -0,0 +1,211 @@
+
+
+ 创建新的订单
+ 完善创建订单用户与订单类型
+
+
+ this.$Router.push({name: 'OrderAvailable'})">
+
+
+
+
+ {{user.nickname || '请选择办理用户'}}
+
+
+
+
+
+
+ 选择业务类型
+
+
+
+
+ {{item.title || '-'}}
+ {{item.subtitle || '-'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/generate.vue b/pages/work/generate.vue
new file mode 100644
index 0000000..6978949
--- /dev/null
+++ b/pages/work/generate.vue
@@ -0,0 +1,463 @@
+
+
+
+
+
+ {{item.title}}
+
+ 移出
+
+
+
+
+
+
+
+ {{item.institution[item.institutionIndex].title}}
+
+
+
+
+
+
+
+
+
+ {{item.fromType[item.fromIndex].title}}
+
+
+
+
+
+
+
+
+
+
+ 元
+ 天
+
+
+
+
+ *{{formItem.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/index.vue b/pages/work/index.vue
new file mode 100644
index 0000000..b0f07e0
--- /dev/null
+++ b/pages/work/index.vue
@@ -0,0 +1,556 @@
+
+
+
+
+
+
+
+
+
+ {{userInfo.nickname}}{{identity.name}}
+
+
+ 创建订单
+
+
+
+
+
+
+ 业务员专属权益
+
+
+
+ {{item.title}}
+
+
+
+
+ 仅需两步即可成为业务员
+
+
+
+ 实名认证
+ 通过身份证实名认证
+
+
+
+
+
+
+ 通过业务员考试
+ 通过线上考试即可完成
+
+
+
+
+
+
+
+
+ {{privilegeText}}
+
+
+
+
+
+
+
+
+
+ 统计数据
+
+
+
+ 预约咨询单
+ -单
+
+
+
+ 已缴费
+ -单
+
+
+
+ 办理完成
+ -单
+
+
+
+ 退款中
+ -单
+
+
+
+ 完成结案
+ -元
+
+
+
+ 结案金额
+ -元
+
+
+
+
+ 订单管理
+
+
+
+ {{orderCount.a_init}}
+ 待预约
+
+
+
+ {{orderCount.a_service}}
+ 匹配服务包
+
+
+
+ {{orderCount.a_serviced}}
+ 待缴服务费
+
+
+
+ {{orderCount.b_sign}}
+ 待签约
+
+
+
+ {{orderCount.a_bank}}
+ 待完善资料
+
+
+
+ {{orderCount.b_check}}
+ 初审中
+
+
+
+ {{orderCount.b_recheck}}
+ 复审中
+
+
+
+ {{orderCount.b_process}}
+ 办理中
+
+
+
+ {{orderCount.b_confirm}}
+ 待结案
+
+
+
+ {{orderCount.b_complete}}
+ 办理完成
+
+
+
+
+ 转让订单管理
+
+
+
+ {{orderCount.transfer_out}}
+ 转出订单
+
+
+
+ {{orderCount.transfer_in}}
+ 转入订单
+
+
+
+
+ 特殊订单管理
+
+
+
+ {{orderCount.audit_bank}}
+ 修改资料
+
+
+
+ {{orderCount.diff_prices}}
+ 补差价
+
+
+
+ {{orderCount.refund}}
+ 退款订单
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/mailed.vue b/pages/work/mailed.vue
new file mode 100644
index 0000000..58591bb
--- /dev/null
+++ b/pages/work/mailed.vue
@@ -0,0 +1,304 @@
+
+
+
+
+ 收
+
+ {{address.name}}{{address.mobile}}
+ {{address.full_address}}
+
+
+
+
+
+ 邮寄物品
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{expressIndex == null ? '请选择': expressArr[expressIndex].name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/mailedInfo.vue b/pages/work/mailedInfo.vue
new file mode 100644
index 0000000..c1d1f52
--- /dev/null
+++ b/pages/work/mailedInfo.vue
@@ -0,0 +1,19 @@
+
+
+ 邮寄信息详情
+
+
+
+
+
+
diff --git a/pages/work/modifyOrder.vue b/pages/work/modifyOrder.vue
new file mode 100644
index 0000000..8acffaa
--- /dev/null
+++ b/pages/work/modifyOrder.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+ {{citem.title}}×{{citem.number}}
+
+
+
+
+ {{ item.user.nickname }}
+
+
+
+ {{ item.user.username }}
+
+
+
+ ×{{ item.services.length }}
+
+
+
+ {{item.created_at}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/orderInfo.vue b/pages/work/orderInfo.vue
new file mode 100644
index 0000000..d20a5a4
--- /dev/null
+++ b/pages/work/orderInfo.vue
@@ -0,0 +1,304 @@
+
+
+
+
+
+ {{statusText}}
+
+
+
+ {{item.title}}×{{item.number}}
+
+
+
+
+
+ ¥{{item.price}}
+
+
+
+
+ ¥{{serviceTotal}}
+
+
+
+
+ 服务包
+
+
+
+
+
+
+ {{citem.business}}({{citem.type}})
+
+
+
+ ¥{{citem.price}}
+
+
+
+
+
+
+
+ 客户信息
+
+
+ {{user.nickname || '-'}}
+
+
+
+ {{user.sex || '-'}}
+
+
+
+ {{user.username || '-'}}
+
+ 联系客户
+
+
+
+ 订单信息
+
+
+ {{order_no || '-'}}
+
+
+
+ {{created_at || '-'}}
+
+
+
+ {{total || '-'}}
+
+
+
+
+
+
+
+
diff --git a/pages/work/orders.vue b/pages/work/orders.vue
new file mode 100644
index 0000000..cd399dc
--- /dev/null
+++ b/pages/work/orders.vue
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+
+
+ 客户
+ 个人
+ {{item.order_no}}
+
+ {{item.status.text}}
+
+
+
+
+
+ {{itemType.title}}x{{itemType.number}}
+
+
+
+
+ {{citem.institution.title}}({{citem.business_type.title}})
+ ¥{{citem.price}}
+
+
+
+
+ ¥{{item.total}}
+
+
+
+ {{item.created_at}}
+
+
+
+
+
+ {{item.user.nickname}}
+
+
+ ({{item.deliver_count.num}}/{{item.deliver_count.all}})邮寄材料
+ 转让
+ 匹配
+ 签约
+ 缴费
+ 完善
+ 查看
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/perfectBasis.vue b/pages/work/perfectBasis.vue
new file mode 100644
index 0000000..bd0fd26
--- /dev/null
+++ b/pages/work/perfectBasis.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{baseInfo.marriages[baseInfo.marriage]}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{baseInfo.educations[baseInfo.education]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/perfectChoose.vue b/pages/work/perfectChoose.vue
new file mode 100644
index 0000000..b3425f2
--- /dev/null
+++ b/pages/work/perfectChoose.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+ 基础信息
+ 客户身份等基础信息
+
+ 待完善
+ 待修改
+ 已完善
+
+
+
+
+
+
+
+
+ {{item.institution.title || '-'}}
+ {{item.business_type.title || '-'}}
+
+ 待完善
+ 待修改
+ 已完善
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/perfectInstitutions.vue b/pages/work/perfectInstitutions.vue
new file mode 100644
index 0000000..ad7a9b4
--- /dev/null
+++ b/pages/work/perfectInstitutions.vue
@@ -0,0 +1,427 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.value || '选择日期'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.options[item.value]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/poorOrder.vue b/pages/work/poorOrder.vue
new file mode 100644
index 0000000..88955e5
--- /dev/null
+++ b/pages/work/poorOrder.vue
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+
+
+ {{ item.user.nickname }}
+
+
+
+ {{ item.user.username }}
+
+
+
+ ×{{ item.services.length }}
+
+
+
+ ¥{{ item.paid }}
+
+
+
+ ¥{{ item.price }}
+
+
+
+ {{item.created_at}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/refundOrder.vue b/pages/work/refundOrder.vue
new file mode 100644
index 0000000..31c9ee3
--- /dev/null
+++ b/pages/work/refundOrder.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+
+
+ 客户
+ 个人
+ {{item.order_no}}
+
+ {{item.status.text}}
+
+
+
+
+
+ {{itemType.title}}x{{itemType.number}}
+
+
+
+
+ {{citem.institution.title}}
+ ¥{{citem.price}}
+
+
+
+
+ ¥{{item.total}}
+
+
+
+ {{item.created_at}}
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/work/schemes.vue b/pages/work/schemes.vue
new file mode 100644
index 0000000..7dfe15c
--- /dev/null
+++ b/pages/work/schemes.vue
@@ -0,0 +1,206 @@
+
+
+
+
+
+
+
+
+ {{item.title}}
+ {{item.value || '-'}}
+
+
+
+
+
+
+ {{scheme.business_type.sweet_notic}}
+
+
+
+
+
+
+
diff --git a/pages/work/service.vue b/pages/work/service.vue
new file mode 100644
index 0000000..77c3c30
--- /dev/null
+++ b/pages/work/service.vue
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{citem.business}}({{citem.type}})
+
+
+
+ ¥{{citem.price}}
+
+
+
+
+ 服务包价格¥{{item.price}}
+
+
+
+
+
+
+ 选择业务
+
+
+
+
+
+ {{item.business}}({{item.type}})
+
+
+
+ {{item.title}}
+
+
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/router/index.js b/router/index.js
new file mode 100644
index 0000000..f666255
--- /dev/null
+++ b/router/index.js
@@ -0,0 +1,35 @@
+import {
+ RouterMount,
+ createRouter
+} from 'uni-simple-router';
+import store from '@/store/index'
+
+const router = createRouter({
+ platform: process.env.VUE_APP_PLATFORM,
+ routes: [...ROUTES]
+});
+
+//全局路由前置守卫
+router.beforeEach((to, from, next) => {
+ let isToken = store.getters.getToken === '' || uni.getStorageSync('token') === ''
+ if(to.auth != undefined){
+ if(to.auth && isToken){
+ next({
+ name: 'Auth',
+ NAVTYPE: 'push'
+ })
+ return
+ }
+ }
+ next();
+});
+
+// 全局路由后置守卫
+router.afterEach((to, from) => {
+
+})
+
+export {
+ router,
+ RouterMount
+}
diff --git a/scss/globa.scss b/scss/globa.scss
new file mode 100644
index 0000000..3d17381
--- /dev/null
+++ b/scss/globa.scss
@@ -0,0 +1,122 @@
+
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ */
+
+// 文字颜色
+$text-color: #333;
+$text-gray: #666;
+$text-gray-m: #999;
+$text-price: #FFAB3F;
+$main-color: #446EFE;
+
+// 边框颜色
+$border-color: #ddd;
+
+// 全局窗口色
+$window-color: #F3F6FB;
+
+// 文字尺寸
+$title-size: 32rpx;
+$title-size-lg: 30rpx;
+$title-size-m: 28rpx;
+$title-size-sm: 26rpx;
+
+// 模块圆角
+$radius: 20rpx;
+$radius-lg: 12rpx;
+$radius-m: 10rpx;
+
+// 模块边距
+$margin: 30rpx;
+$padding: 30rpx;
+
+// 0.5像素边线
+.border-solid{
+ position: relative;
+ &::after {
+ content: "";
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ height: 1rpx;
+ background-image: linear-gradient(0deg, $border-color 50%, transparent 50%);
+ }
+}
+.border-solid-empty{
+ @extend .border-solid;
+ &::after{
+ width: calc(100% - #{$margin * 2});
+ left: $margin;
+ }
+}
+
+.border{
+ position: relative;
+ &::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 200%;
+ height: 200%;
+ border: 1rpx solid $border-color;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ }
+}
+
+// 状态栏高度
+.status_bar {
+ height: var(--status-bar-height);
+}
+
+/* #ifndef APP-PLUS-NVUE */
+ // ios安全距离
+ .ios-bottom{
+ padding-bottom: env(safe-area-inset-bottom);
+ padding-bottom: constant(safe-area-inset-bottom);
+ }
+
+ .ios-left{
+ padding-left: env(safe-area-inset-left);
+ padding-left: constant(safe-area-inset-left);
+ }
+
+ .ios-right{
+ padding-right: env(safe-area-inset-right);
+ padding-right: constant(safe-area-inset-right);
+ }
+
+ .ios-top{
+ padding-top: var(--status-bar-height);
+ }
+
+ // 公共样式
+ .vertical {
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-box-pack: center;
+ }
+
+ .nowrap {
+ max-width: 100%;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+
+ .ellipsis{
+ max-width: 100%;
+ display: -webkit-box;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ }
+/* #endif */
+
diff --git a/static/CollegeResults/CollegeResults_back.png b/static/CollegeResults/CollegeResults_back.png
new file mode 100644
index 0000000..359d8e0
Binary files /dev/null and b/static/CollegeResults/CollegeResults_back.png differ
diff --git a/static/CollegeResults/CollegeResults_icon_00.png b/static/CollegeResults/CollegeResults_icon_00.png
new file mode 100644
index 0000000..db3783e
Binary files /dev/null and b/static/CollegeResults/CollegeResults_icon_00.png differ
diff --git a/static/CollegeResults/CollegeResults_icon_01.png b/static/CollegeResults/CollegeResults_icon_01.png
new file mode 100644
index 0000000..7c1201c
Binary files /dev/null and b/static/CollegeResults/CollegeResults_icon_01.png differ
diff --git a/static/background/account_back.png b/static/background/account_back.png
new file mode 100644
index 0000000..725e839
Binary files /dev/null and b/static/background/account_back.png differ
diff --git a/static/background/info_back.png b/static/background/info_back.png
new file mode 100644
index 0000000..796cafe
Binary files /dev/null and b/static/background/info_back.png differ
diff --git a/static/code/code_back.png b/static/code/code_back.png
new file mode 100644
index 0000000..63fede3
Binary files /dev/null and b/static/code/code_back.png differ
diff --git a/static/code/code_btn.png b/static/code/code_btn.png
new file mode 100644
index 0000000..148bcdb
Binary files /dev/null and b/static/code/code_btn.png differ
diff --git a/static/code/code_footer.png b/static/code/code_footer.png
new file mode 100644
index 0000000..f520f77
Binary files /dev/null and b/static/code/code_footer.png differ
diff --git a/static/code/code_header.png b/static/code/code_header.png
new file mode 100644
index 0000000..d8e216d
Binary files /dev/null and b/static/code/code_header.png differ
diff --git a/static/code/code_img_lay.png b/static/code/code_img_lay.png
new file mode 100644
index 0000000..c0a2844
Binary files /dev/null and b/static/code/code_img_lay.png differ
diff --git a/static/code/code_logo.png b/static/code/code_logo.png
new file mode 100644
index 0000000..8dcdff4
Binary files /dev/null and b/static/code/code_logo.png differ
diff --git a/static/code/code_sign.png b/static/code/code_sign.png
new file mode 100644
index 0000000..6d29f41
Binary files /dev/null and b/static/code/code_sign.png differ
diff --git a/static/gliconfont.ttf b/static/gliconfont.ttf
new file mode 100644
index 0000000..fc8deaa
Binary files /dev/null and b/static/gliconfont.ttf differ
diff --git a/static/iconfont.css b/static/iconfont.css
new file mode 100644
index 0000000..d28f3a0
--- /dev/null
+++ b/static/iconfont.css
@@ -0,0 +1,51 @@
+@font-face {
+ font-family: "iconfont"; /* Project id 2869797 */
+ src: url('@/static/iconfont.ttf');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16rpx;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-jia:before {
+ content: "\e60a";
+}
+
+.icon-dui:before {
+ content: "\e609";
+}
+
+.icon-gengduo2:before {
+ content: "\e608";
+}
+
+.icon-gengduo:before {
+ content: "\e607";
+}
+
+.icon-saoma:before {
+ content: "\e605";
+}
+
+.icon-tuandui:before {
+ content: "\e606";
+}
+
+.icon-sousuo:before {
+ content: "\e603";
+}
+
+.icon-pinglun:before {
+ content: "\e601";
+}
+
+.icon-shezhi:before {
+ content: "\e602";
+}
+
+
+
diff --git a/static/iconfont.ttf b/static/iconfont.ttf
new file mode 100644
index 0000000..898c7f9
Binary files /dev/null and b/static/iconfont.ttf differ
diff --git a/static/icons/Identity_icon.png b/static/icons/Identity_icon.png
new file mode 100644
index 0000000..6181db2
Binary files /dev/null and b/static/icons/Identity_icon.png differ
diff --git a/static/icons/diamond_icon_00.png b/static/icons/diamond_icon_00.png
new file mode 100644
index 0000000..9536bf3
Binary files /dev/null and b/static/icons/diamond_icon_00.png differ
diff --git a/static/icons/diamond_icon_01.png b/static/icons/diamond_icon_01.png
new file mode 100644
index 0000000..11967fa
Binary files /dev/null and b/static/icons/diamond_icon_01.png differ
diff --git a/static/icons/diamond_icon_02.png b/static/icons/diamond_icon_02.png
new file mode 100644
index 0000000..11ef2f1
Binary files /dev/null and b/static/icons/diamond_icon_02.png differ
diff --git a/static/icons/diamond_icon_03.png b/static/icons/diamond_icon_03.png
new file mode 100644
index 0000000..6035b70
Binary files /dev/null and b/static/icons/diamond_icon_03.png differ
diff --git a/static/icons/diamond_icon_04.png b/static/icons/diamond_icon_04.png
new file mode 100644
index 0000000..6bd07c1
Binary files /dev/null and b/static/icons/diamond_icon_04.png differ
diff --git a/static/icons/diamond_icon_05.png b/static/icons/diamond_icon_05.png
new file mode 100644
index 0000000..82b0fe8
Binary files /dev/null and b/static/icons/diamond_icon_05.png differ
diff --git a/static/icons/diamond_icon_06.png b/static/icons/diamond_icon_06.png
new file mode 100644
index 0000000..47519ea
Binary files /dev/null and b/static/icons/diamond_icon_06.png differ
diff --git a/static/icons/diamond_icon_07.png b/static/icons/diamond_icon_07.png
new file mode 100644
index 0000000..1c687fd
Binary files /dev/null and b/static/icons/diamond_icon_07.png differ
diff --git a/static/icons/diamond_icon_08.png b/static/icons/diamond_icon_08.png
new file mode 100644
index 0000000..0c4308f
Binary files /dev/null and b/static/icons/diamond_icon_08.png differ
diff --git a/static/icons/diamond_icon_09.png b/static/icons/diamond_icon_09.png
new file mode 100644
index 0000000..b490a5b
Binary files /dev/null and b/static/icons/diamond_icon_09.png differ
diff --git a/static/icons/pay_alipay.png b/static/icons/pay_alipay.png
new file mode 100644
index 0000000..a6243be
Binary files /dev/null and b/static/icons/pay_alipay.png differ
diff --git a/static/icons/pay_code.png b/static/icons/pay_code.png
new file mode 100644
index 0000000..96f0d9e
Binary files /dev/null and b/static/icons/pay_code.png differ
diff --git a/static/icons/pay_wechat.png b/static/icons/pay_wechat.png
new file mode 100644
index 0000000..07ed4bd
Binary files /dev/null and b/static/icons/pay_wechat.png differ
diff --git a/static/icons/qrcode.png b/static/icons/qrcode.png
new file mode 100644
index 0000000..21bdbdd
Binary files /dev/null and b/static/icons/qrcode.png differ
diff --git a/static/icons/quick_icon.png b/static/icons/quick_icon.png
new file mode 100644
index 0000000..4f24f4d
Binary files /dev/null and b/static/icons/quick_icon.png differ
diff --git a/static/icons/search_icon.png b/static/icons/search_icon.png
new file mode 100644
index 0000000..d9a720a
Binary files /dev/null and b/static/icons/search_icon.png differ
diff --git a/static/icons/tabs_icon_00.png b/static/icons/tabs_icon_00.png
new file mode 100644
index 0000000..8549a12
Binary files /dev/null and b/static/icons/tabs_icon_00.png differ
diff --git a/static/icons/tabs_icon_01.png b/static/icons/tabs_icon_01.png
new file mode 100644
index 0000000..cad16d6
Binary files /dev/null and b/static/icons/tabs_icon_01.png differ
diff --git a/static/icons/tabs_icon_02.png b/static/icons/tabs_icon_02.png
new file mode 100644
index 0000000..04bd0c8
Binary files /dev/null and b/static/icons/tabs_icon_02.png differ
diff --git a/static/icons/tabs_icon_03.png b/static/icons/tabs_icon_03.png
new file mode 100644
index 0000000..ab66322
Binary files /dev/null and b/static/icons/tabs_icon_03.png differ
diff --git a/static/icons/tabs_show_00.png b/static/icons/tabs_show_00.png
new file mode 100644
index 0000000..bf22c0f
Binary files /dev/null and b/static/icons/tabs_show_00.png differ
diff --git a/static/icons/tabs_show_01.png b/static/icons/tabs_show_01.png
new file mode 100644
index 0000000..7e237d4
Binary files /dev/null and b/static/icons/tabs_show_01.png differ
diff --git a/static/icons/tabs_show_02.png b/static/icons/tabs_show_02.png
new file mode 100644
index 0000000..b0fd558
Binary files /dev/null and b/static/icons/tabs_show_02.png differ
diff --git a/static/icons/tabs_show_03.png b/static/icons/tabs_show_03.png
new file mode 100644
index 0000000..1dc02ae
Binary files /dev/null and b/static/icons/tabs_show_03.png differ
diff --git a/static/icons/test_icon.png b/static/icons/test_icon.png
new file mode 100644
index 0000000..43ef3bb
Binary files /dev/null and b/static/icons/test_icon.png differ
diff --git a/static/icons/user_nav_00.png b/static/icons/user_nav_00.png
new file mode 100644
index 0000000..a6df10b
Binary files /dev/null and b/static/icons/user_nav_00.png differ
diff --git a/static/icons/user_nav_01.png b/static/icons/user_nav_01.png
new file mode 100644
index 0000000..df2ab1b
Binary files /dev/null and b/static/icons/user_nav_01.png differ
diff --git a/static/icons/user_nav_02.png b/static/icons/user_nav_02.png
new file mode 100644
index 0000000..f37ed31
Binary files /dev/null and b/static/icons/user_nav_02.png differ
diff --git a/static/icons/user_nav_03.png b/static/icons/user_nav_03.png
new file mode 100644
index 0000000..04361cd
Binary files /dev/null and b/static/icons/user_nav_03.png differ
diff --git a/static/icons/user_nav_04.png b/static/icons/user_nav_04.png
new file mode 100644
index 0000000..01fb04c
Binary files /dev/null and b/static/icons/user_nav_04.png differ
diff --git a/static/icons/user_nav_05.png b/static/icons/user_nav_05.png
new file mode 100644
index 0000000..62ce655
Binary files /dev/null and b/static/icons/user_nav_05.png differ
diff --git a/static/icons/work_icon_00.png b/static/icons/work_icon_00.png
new file mode 100644
index 0000000..f3638e0
Binary files /dev/null and b/static/icons/work_icon_00.png differ
diff --git a/static/icons/work_icon_01.png b/static/icons/work_icon_01.png
new file mode 100644
index 0000000..8142c07
Binary files /dev/null and b/static/icons/work_icon_01.png differ
diff --git a/static/icons/work_icon_02.png b/static/icons/work_icon_02.png
new file mode 100644
index 0000000..7e1305e
Binary files /dev/null and b/static/icons/work_icon_02.png differ
diff --git a/static/icons/work_icon_03.png b/static/icons/work_icon_03.png
new file mode 100644
index 0000000..528f1ee
Binary files /dev/null and b/static/icons/work_icon_03.png differ
diff --git a/static/icons/work_icon_04.png b/static/icons/work_icon_04.png
new file mode 100644
index 0000000..ec62d90
Binary files /dev/null and b/static/icons/work_icon_04.png differ
diff --git a/static/icons/work_icon_05.png b/static/icons/work_icon_05.png
new file mode 100644
index 0000000..34a9990
Binary files /dev/null and b/static/icons/work_icon_05.png differ
diff --git a/static/icons/work_icon_06.png b/static/icons/work_icon_06.png
new file mode 100644
index 0000000..e90070a
Binary files /dev/null and b/static/icons/work_icon_06.png differ
diff --git a/static/icons/work_icon_07.png b/static/icons/work_icon_07.png
new file mode 100644
index 0000000..662613a
Binary files /dev/null and b/static/icons/work_icon_07.png differ
diff --git a/static/icons/work_icon_08.png b/static/icons/work_icon_08.png
new file mode 100644
index 0000000..e3ff998
Binary files /dev/null and b/static/icons/work_icon_08.png differ
diff --git a/static/icons/work_icon_09.png b/static/icons/work_icon_09.png
new file mode 100644
index 0000000..2a0dc53
Binary files /dev/null and b/static/icons/work_icon_09.png differ
diff --git a/static/icons/work_icon_10.png b/static/icons/work_icon_10.png
new file mode 100644
index 0000000..4aa232d
Binary files /dev/null and b/static/icons/work_icon_10.png differ
diff --git a/static/icons/work_icon_11.png b/static/icons/work_icon_11.png
new file mode 100644
index 0000000..fba2021
Binary files /dev/null and b/static/icons/work_icon_11.png differ
diff --git a/static/icons/work_icon_12.png b/static/icons/work_icon_12.png
new file mode 100644
index 0000000..b472179
Binary files /dev/null and b/static/icons/work_icon_12.png differ
diff --git a/static/icons/work_icon_13.png b/static/icons/work_icon_13.png
new file mode 100644
index 0000000..dd31a53
Binary files /dev/null and b/static/icons/work_icon_13.png differ
diff --git a/static/icons/work_icon_14.png b/static/icons/work_icon_14.png
new file mode 100644
index 0000000..3f6347c
Binary files /dev/null and b/static/icons/work_icon_14.png differ
diff --git a/static/icons/work_icon_15.png b/static/icons/work_icon_15.png
new file mode 100644
index 0000000..d013fbb
Binary files /dev/null and b/static/icons/work_icon_15.png differ
diff --git a/static/icons/work_icon_16.png b/static/icons/work_icon_16.png
new file mode 100644
index 0000000..9686bf6
Binary files /dev/null and b/static/icons/work_icon_16.png differ
diff --git a/static/icons/work_icon_17.png b/static/icons/work_icon_17.png
new file mode 100644
index 0000000..3df3af6
Binary files /dev/null and b/static/icons/work_icon_17.png differ
diff --git a/static/icons/work_icon_18.png b/static/icons/work_icon_18.png
new file mode 100644
index 0000000..41f1ecf
Binary files /dev/null and b/static/icons/work_icon_18.png differ
diff --git a/static/icons/work_icon_19.png b/static/icons/work_icon_19.png
new file mode 100644
index 0000000..afd3bff
Binary files /dev/null and b/static/icons/work_icon_19.png differ
diff --git a/static/icons/work_icon_20.png b/static/icons/work_icon_20.png
new file mode 100644
index 0000000..20c196f
Binary files /dev/null and b/static/icons/work_icon_20.png differ
diff --git a/static/icons/work_icon_21.png b/static/icons/work_icon_21.png
new file mode 100644
index 0000000..5729046
Binary files /dev/null and b/static/icons/work_icon_21.png differ
diff --git a/static/icons/work_icon_22.png b/static/icons/work_icon_22.png
new file mode 100644
index 0000000..f50ebb4
Binary files /dev/null and b/static/icons/work_icon_22.png differ
diff --git a/static/icons/work_icon_23.png b/static/icons/work_icon_23.png
new file mode 100644
index 0000000..40ad747
Binary files /dev/null and b/static/icons/work_icon_23.png differ
diff --git a/static/icons/work_icon_24.png b/static/icons/work_icon_24.png
new file mode 100644
index 0000000..472d971
Binary files /dev/null and b/static/icons/work_icon_24.png differ
diff --git a/static/icons/work_icon_25.png b/static/icons/work_icon_25.png
new file mode 100644
index 0000000..a7ffe91
Binary files /dev/null and b/static/icons/work_icon_25.png differ
diff --git a/static/icons/work_icon_26.png b/static/icons/work_icon_26.png
new file mode 100644
index 0000000..1090036
Binary files /dev/null and b/static/icons/work_icon_26.png differ
diff --git a/static/imgs/banner.png b/static/imgs/banner.png
new file mode 100644
index 0000000..e2a47dc
Binary files /dev/null and b/static/imgs/banner.png differ
diff --git a/static/imgs/bonus_back.png b/static/imgs/bonus_back.png
new file mode 100644
index 0000000..b443107
Binary files /dev/null and b/static/imgs/bonus_back.png differ
diff --git a/static/imgs/card_front.png b/static/imgs/card_front.png
new file mode 100644
index 0000000..2570a2a
Binary files /dev/null and b/static/imgs/card_front.png differ
diff --git a/static/imgs/card_verso.png b/static/imgs/card_verso.png
new file mode 100644
index 0000000..13ff5ad
Binary files /dev/null and b/static/imgs/card_verso.png differ
diff --git a/static/imgs/cash_back.png b/static/imgs/cash_back.png
new file mode 100644
index 0000000..ed9552b
Binary files /dev/null and b/static/imgs/cash_back.png differ
diff --git a/static/imgs/default-active.png b/static/imgs/default-active.png
new file mode 100644
index 0000000..ecbdafc
Binary files /dev/null and b/static/imgs/default-active.png differ
diff --git a/static/imgs/famous_img.png b/static/imgs/famous_img.png
new file mode 100644
index 0000000..b927c06
Binary files /dev/null and b/static/imgs/famous_img.png differ
diff --git a/static/imgs/hot_img.png b/static/imgs/hot_img.png
new file mode 100644
index 0000000..1d7e336
Binary files /dev/null and b/static/imgs/hot_img.png differ
diff --git a/static/imgs/index-img.png b/static/imgs/index-img.png
new file mode 100644
index 0000000..445a090
Binary files /dev/null and b/static/imgs/index-img.png differ
diff --git a/static/imgs/index-pack-00.png b/static/imgs/index-pack-00.png
new file mode 100644
index 0000000..4cb0556
Binary files /dev/null and b/static/imgs/index-pack-00.png differ
diff --git a/static/imgs/index-pack-01.png b/static/imgs/index-pack-01.png
new file mode 100644
index 0000000..1c2f7cf
Binary files /dev/null and b/static/imgs/index-pack-01.png differ
diff --git a/static/imgs/logo.png b/static/imgs/logo.png
new file mode 100644
index 0000000..8950478
Binary files /dev/null and b/static/imgs/logo.png differ
diff --git a/static/imgs/new_book.png b/static/imgs/new_book.png
new file mode 100644
index 0000000..bbe68a2
Binary files /dev/null and b/static/imgs/new_book.png differ
diff --git a/static/imgs/news_img.png b/static/imgs/news_img.png
new file mode 100644
index 0000000..9b9ce08
Binary files /dev/null and b/static/imgs/news_img.png differ
diff --git a/static/imgs/notice-icon.png b/static/imgs/notice-icon.png
new file mode 100644
index 0000000..25eb219
Binary files /dev/null and b/static/imgs/notice-icon.png differ
diff --git a/static/imgs/privilege-lay-header.png b/static/imgs/privilege-lay-header.png
new file mode 100644
index 0000000..1717aa3
Binary files /dev/null and b/static/imgs/privilege-lay-header.png differ
diff --git a/static/imgs/quick_back_00.png b/static/imgs/quick_back_00.png
new file mode 100644
index 0000000..9e27505
Binary files /dev/null and b/static/imgs/quick_back_00.png differ
diff --git a/static/imgs/quick_back_01.png b/static/imgs/quick_back_01.png
new file mode 100644
index 0000000..5b332c1
Binary files /dev/null and b/static/imgs/quick_back_01.png differ
diff --git a/store/index.js b/store/index.js
new file mode 100644
index 0000000..43fec03
--- /dev/null
+++ b/store/index.js
@@ -0,0 +1,48 @@
+/**
+ * Web唐明明
+ * 匆匆数载恍如梦,岁月迢迢华发增。
+ * 碌碌无为枉半生,一朝惊醒万事空。
+ */
+
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+ state: {
+ token : uni.getStorageSync('token') || '',
+ refresh : 0,
+ available : "",
+ orderId : null,
+ },
+ getters: {
+ getToken: state => {
+ return state.token
+ },
+ getRefresh: state => {
+ return state.refresh
+ },
+ getUser: state => {
+ return state.available
+ },
+ getOrderId: state => {
+ return state.orderId
+ }
+ },
+ mutations: {
+ setToken(state, tokenString) {
+ state.token = tokenString
+ uni.setStorageSync('token', tokenString)
+ },
+ setRefresh(state, value) {
+ state.refresh = value
+ },
+ setUser(state, value) {
+ state.available = value
+ },
+ setOrderId(state, value) {
+ state.orderId = value
+ }
+ }
+})
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..4edb490
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,78 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+@import 'uview-ui/theme.scss';
+@import 'scss/globa.scss';
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;
diff --git a/uni_modules/lime-painter/changelog.md b/uni_modules/lime-painter/changelog.md
new file mode 100644
index 0000000..0c07bb5
--- /dev/null
+++ b/uni_modules/lime-painter/changelog.md
@@ -0,0 +1,157 @@
+## 1.9.3.5(2022-06-29)
+- feat: justifyContent 增加 `space-around`、`space-between`
+- feat: canvas 2d 也使用`getImageInfo`
+- fix: 修复 `text`的 `text-decoration`错位
+## 1.9.3.4(2022-06-20)
+- fix: 修复 因创建节点速度问题导致顺序出错。
+- fix: 修复 微信小程序 PC 无法显示本地图片
+- fix: 修复 flex-box 对齐问题
+- feat: 增加 `text-shadow`
+- feat: 重写 `text` 对齐方式
+- chore: 更新文档
+## 1.9.3.3(2022-06-17)
+- fix: 修复 支付宝小程序 canvas 2d 存在ctx.draw问题导致报错
+- fix: 修复 支付宝小程序 toDataURL 存在权限问题改用 `toTempFilePath`
+- fix: 修复 支付宝小程序 image size 问题导致 `objectFit` 无效
+## 1.9.3.2(2022-06-14)
+- fix: 修复 image 设置背景色不生效问题
+- fix: 修复 nvue 环境判断缺少参数问题
+## 1.9.3.1(2022-06-14)
+- fix: 修复 bottom 定位不对问题
+- fix: 修复 因小数导致计算出错换行问题
+- feat: 增加 `useCORS` h5端图片跨域 在设置请求头无效果后试一下设置这个值
+- chore: 更新文档
+## 1.9.3(2022-06-13)
+- feat: 增加 `zIndex`
+- feat: 增加 `flex-box` 该功能处于原始阶段,非常简陋。
+- tips: QQ小程序 vue3 不支持, 为 uni 官方BUG
+## 1.9.2.9(2022-06-10)
+- fix: 修复`text-align`及`margin`居中问题
+## 1.9.2.8(2022-06-10)
+- fix: 修复 Nvue `canvasToTempFilePathSync` 不生效问题
+## 1.9.2.7(2022-06-10)
+- fix: 修复 margin及padding的bug
+- fix: 修复 Nvue `isCanvasToTempFilePath` 不生效问题
+## 1.9.2.6(2022-06-09)
+- fix: 修复 Nvue 不显示
+- feat: 增加支持字体渐变
+```html
+
+```
+## 1.9.2.5(2022-06-09)
+- chore: 更变获取父级宽度的设定
+- chore: `pathType` 在canvas 2d 默认为 `url`
+## 1.9.2.4(2022-06-08)
+- fix: 修复 `pathType` 不生效问题
+## 1.9.2.3(2022-06-08)
+- fix: 修复 `canvasToTempFilePath` 漏写 `success` 参数
+## 1.9.2.2(2022-06-07)
+- chore: 更新文档
+## 1.9.2.1(2022-06-07)
+- fix: 修复 vue3 赋值给this再传入导致image无法绘制
+- fix: 修复 `canvasToTempFilePathSync` 时机问题
+- feat: canvas 2d 更改图片生成方式 `toDataURL`
+## 1.9.2(2022-05-30)
+- fix: 修复 `canvasToTempFilePathSync` 在 vue3 下只生成一次
+## 1.9.1.7(2022-05-28)
+- fix: 修复 `qrcode`显示不全问题
+## 1.9.1.6(2022-05-28)
+- fix: 修复 `canvasToTempFilePathSync` 会重复多次问题
+- fix: 修复 `view` css `backgroundImage` 图片下载失败导致 子节点不渲染
+## 1.9.1.5(2022-05-27)
+- fix: 修正支付宝小程序 canvas 2d版本号 2.7.15
+## 1.9.1.4(2022-05-22)
+- fix: 修复字节小程序无法使用xml方式
+- fix: 修复字节小程序无法使用base64(非2D情况下工具上无法显示)
+- fix: 修复支付宝小程序 `canvasToTempFilePath` 报错
+## 1.9.1.3(2022-04-29)
+- fix: 修复vue3打包后uni对象为空后的报错
+## 1.9.1.2(2022-04-25)
+- fix: 删除多余文件
+## 1.9.1.1(2022-04-25)
+- fix: 修复图片不显示问题
+## 1.9.1(2022-04-12)
+- fix: 因四舍五入导致有些机型错位
+- fix: 修复无views报错
+- chore: nvue下因ios无法读取插件内static文件,改由下载方式
+## 1.9.0(2022-03-20)
+- fix: 因无法固定尺寸导致生成图片不全
+- fix: 特定情况下text判断无效
+- chore: 本地化APP Nvue webview
+## 1.8.9(2022-02-20)
+- fix: 修复 小程序下载最多10次并发的问题
+- fix: 修复 APP端无法获取本地图片
+- fix: 修复 APP Nvue端不执行问题
+- chore: 增加图片缓存机制
+## 1.8.8.8(2022-01-27)
+- fix: 修复 主动调用尺寸问题
+## 1.8.8.6(2022-01-26)
+- fix: 修复 nvue 下无宽度时获取父级宽度
+- fix: 修复 ios app 无法渲染问题
+## 1.8.8(2022-01-23)
+- fix: 修复 主动调用时无节点问题
+- fix: 修复 `box-shadow` 颜色问题
+- fix: 修复 `transform:rotate` 角度位置问题
+- feat: 增加 `overflow:hidden`
+## 1.8.7(2022-01-07)
+- fix: 修复 image 方向为 `right` 时原始宽高问题
+- feat: 支持 view 设置背景图 `background-image: url(xxx)`
+- chore: 去掉可选链
+## 1.8.6(2021-11-28)
+- feat: 支持`view`对`inline-block`的子集使用`text-align`
+## 1.8.5.5(2021-08-17)
+- chore: 更新文档,删除 replace
+- fix: 修复 text 值为 number时报错
+## 1.8.5.4(2021-08-16)
+- fix: 字节小程序兼容
+## 1.8.5.3(2021-08-15)
+- fix: 修复线性渐变与css现实效果不一致的问题
+- chore: 更新文档
+## 1.8.5.2(2021-08-13)
+- chore: 增加`background-image`、`background-repeat` 能力,主要用于背景纹理的绘制,并不是代替`image`。例如:大面积的重复平铺的水印
+- 注意:这个功能H5暂时无法使用,因为[官方的API有BUG](https://ask.dcloud.net.cn/question/128793),待官方修复!!!
+## 1.8.5.1(2021-08-10)
+- fix: 修复因`margin`报错问题
+## 1.8.5(2021-08-09)
+- chore: 增加margin支持`auto`,以达到居中效果
+## 1.8.4(2021-08-06)
+- chore: 增加判断缓存文件条件
+- fix: 修复css 多余空格报错问题
+## 1.8.3(2021-08-04)
+- tips: 1.6.x 以下的版本升级到1.8.x后要为每个元素都加上定位:position: 'absolute'
+- fix: 修复只有一个view子元素时不计算高度的问题
+## 1.8.2(2021-08-03)
+- fix: 修复 path-type 为 `url` 无效问题
+- fix: 修复 qrcode `text` 为空时报错问题
+- fix: 修复 image `src` 动态设置时不生效问题
+- feat: 增加 css 属性 `min-width` `max-width`
+## 1.8.1(2021-08-02)
+- fix: 修复无法加载本地图片
+## 1.8.0(2021-08-02)
+- chore 文档更新
+- 使用旧版的同学不要升级!
+## 1.8.0-beta(2021-07-30)
+- ## 全新布局方式 不兼容旧版!
+- chore: 布局方式变更
+- tips: 微信canvas 2d 不支持真机调试
+## 1.6.6(2021-07-09)
+- chore: 统一命名规范,无须主动引入组件
+## 1.6.5(2021-06-08)
+- chore: 去掉console
+## 1.6.4(2021-06-07)
+- fix: 修复 数字 为纯字符串时不转换的BUG
+## 1.6.3(2021-06-06)
+- fix: 修复 PC 端放大的BUG
+## 1.6.2(2021-05-31)
+- fix: 修复 报`adaptor is not a function`错误
+- fix: 修复 text 多行高度
+- fix: 优化 默认文字的基准线
+- feat: `@progress`事件,监听绘制进度
+## 1.6.1(2021-02-28)
+- 删除多余节点
+## 1.6.0(2021-02-26)
+- 调整为uni_modules目录规范
+- 修复:transform的rotate不能为负数问题
+- 新增:`pathType` 指定生成图片返回的路径类型,可选值有 `base64`、`url`
diff --git a/uni_modules/lime-painter/components/common/relation.js b/uni_modules/lime-painter/components/common/relation.js
new file mode 100644
index 0000000..7778f04
--- /dev/null
+++ b/uni_modules/lime-painter/components/common/relation.js
@@ -0,0 +1,147 @@
+const styles = (v ='') => v.split(';').filter(v => v && !/^[\n\s]+$/.test(v)).map(v => {
+ const key = v.slice(0, v.indexOf(':'))
+ const value = v.slice(v.indexOf(':')+1)
+ return {
+ [key
+ .replace(/-([a-z])/g, function() { return arguments[1].toUpperCase()})
+ .replace(/\s+/g, '')
+ ]: value.replace(/^\s+/, '').replace(/\s+$/, '') || ''
+ }
+ })
+export function parent(parent) {
+ return {
+ provide() {
+ return {
+ [parent]: this
+ }
+ },
+ data() {
+ return {
+ el: {
+ css: {},
+ views: []
+ },
+ }
+ },
+ watch: {
+ css: {
+ handler(v) {
+ if(this.canvasId) {
+ this.el.css = (typeof v == 'object' ? v : v && Object.assign(...styles(v))) || {}
+ this.canvasWidth = this.el.css && this.el.css.width || this.canvasWidth
+ this.canvasHeight = this.el.css && this.el.css.height || this.canvasHeight
+ }
+ },
+ immediate: true
+ }
+ }
+ }
+}
+export function children(parent, options = {}) {
+ const indexKey = options.indexKey || 'index'
+ return {
+ inject: {
+ [parent]: {
+ default: null
+ }
+ },
+ watch: {
+ el: {
+ handler(v, o) {
+ if(JSON.stringify(v) != JSON.stringify(o))
+ this.bindRelation()
+ },
+ deep: true,
+ immediate: true
+ },
+ src: {
+ handler(v, o) {
+ if(v != o)
+ this.bindRelation()
+ },
+ immediate: true
+ },
+ text: {
+ handler(v, o) {
+ if(v != o) this.bindRelation()
+ },
+ immediate: true
+ },
+ css: {
+ handler(v, o) {
+ if(v != o)
+ this.el.css = (typeof v == 'object' ? v : v && Object.assign(...styles(v))) || {}
+ },
+ immediate: true
+ },
+ replace: {
+ handler(v, o) {
+ if(JSON.stringify(v) != JSON.stringify(o))
+ this.bindRelation()
+ },
+ deep: true,
+ immediate: true
+ }
+ },
+ created() {
+ if(!this._uid) {
+ this._uid = this._.uid
+ }
+ Object.defineProperty(this, 'parent', {
+ get: () => this[parent] || [],
+ })
+ Object.defineProperty(this, 'index', {
+ get: () => {
+ this.bindRelation();
+ const {parent: {el: {views=[]}={}}={}} = this
+ return views.indexOf(this.el)
+ },
+ });
+ this.el.type = this.type
+
+ this.bindRelation()
+ },
+ // #ifdef VUE3
+ beforeUnmount() {
+ this.removeEl()
+ },
+ // #endif
+ // #ifdef VUE2
+ beforeDestroy() {
+ this.removeEl()
+ },
+ // #endif
+ methods: {
+ removeEl() {
+ if (this.parent) {
+ this.parent.el.views = this.parent.el.views.filter(
+ (item) => item._uid !== this._uid
+ );
+ }
+ },
+ bindRelation() {
+ if(!this.el._uid) {
+ this.el._uid = this._uid
+ }
+ if(['text','qrcode'].includes(this.type)) {
+ this.el.text = this.$slots && this.$slots.default && this.$slots.default[0].text || `${this.text || ''}`.replace(/\\n/g, '\n')
+ }
+ if(this.type == 'image') {
+ this.el.src = this.src
+ }
+ if (!this.parent) {
+ return;
+ }
+ let views = this.parent.el.views || [];
+ if(views.indexOf(this.el) !== -1) {
+ this.parent.el.views = views.map(v => v._uid == this._uid ? this.el : v)
+ } else {
+ this.parent.el.views = [...views, this.el];
+ }
+ }
+ },
+ mounted() {
+ // this.bindRelation()
+ },
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/lime-painter/components/l-painter-image/l-painter-image.vue b/uni_modules/lime-painter/components/l-painter-image/l-painter-image.vue
new file mode 100644
index 0000000..10e1a52
--- /dev/null
+++ b/uni_modules/lime-painter/components/l-painter-image/l-painter-image.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/lime-painter/components/l-painter-qrcode/l-painter-qrcode.vue b/uni_modules/lime-painter/components/l-painter-qrcode/l-painter-qrcode.vue
new file mode 100644
index 0000000..fe4d20d
--- /dev/null
+++ b/uni_modules/lime-painter/components/l-painter-qrcode/l-painter-qrcode.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
+
diff --git a/uni_modules/lime-painter/components/l-painter-text/l-painter-text.vue b/uni_modules/lime-painter/components/l-painter-text/l-painter-text.vue
new file mode 100644
index 0000000..a4cfdcf
--- /dev/null
+++ b/uni_modules/lime-painter/components/l-painter-text/l-painter-text.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/lime-painter/components/l-painter-view/l-painter-view.vue b/uni_modules/lime-painter/components/l-painter-view/l-painter-view.vue
new file mode 100644
index 0000000..418d388
--- /dev/null
+++ b/uni_modules/lime-painter/components/l-painter-view/l-painter-view.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/lime-painter/components/l-painter/l-painter.vue b/uni_modules/lime-painter/components/l-painter/l-painter.vue
new file mode 100644
index 0000000..6792b93
--- /dev/null
+++ b/uni_modules/lime-painter/components/l-painter/l-painter.vue
@@ -0,0 +1,407 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/lime-painter/components/l-painter/nvue.js b/uni_modules/lime-painter/components/l-painter/nvue.js
new file mode 100644
index 0000000..6b67cee
--- /dev/null
+++ b/uni_modules/lime-painter/components/l-painter/nvue.js
@@ -0,0 +1,218 @@
+// #ifdef APP-NVUE
+import { sleep, getImageInfo, isBase64, useNvue, networkReg } from './utils';
+const dom = weex.requireModule('dom')
+import {version } from '../../package.json'
+
+export default {
+ data() {
+ return {
+ tempFilePath: [],
+ isInitFile: false,
+ osName: uni.getSystemInfoSync().osName
+ }
+ },
+ created() {
+ // if (this.hybrid) return
+ // useNvue('_doc/uni_modules/lime-painter/', version, this.timeout).then(res => {
+ // this.isInitFile = true
+ // })
+ },
+ methods: {
+ getParentWeith() {
+ return new Promise(resolve => {
+ dom.getComponentRect(this.$refs.limepainter, (res) => {
+ this.parentWidth = Math.ceil(res.size.width)
+ this.canvasWidth = this.canvasWidth || this.parentWidth ||300
+ this.canvasHeight = res.size.height || this.canvasHeight||150
+ resolve(res.size)
+ })
+ })
+ },
+ onPageFinish() {
+ this.webview = this.$refs.webview
+ this.webview.evalJS(`init(${this.dpr})`)
+ },
+ onMessage(e) {
+ const res = e.detail.data[0] || null;
+ if (res.event) {
+ if (res.event == 'inited') {
+ this.inited = true
+ }
+ if(res.event == 'fail'){
+ this.$emit('fail', res)
+ }
+ if (res.event == 'layoutChange') {
+ const data = typeof res.data == 'string' ? JSON.parse(res.data) : res.data
+ this.canvasWidth = Math.ceil(data.width);
+ this.canvasHeight = Math.ceil(data.height);
+ }
+ if (res.event == 'progressChange') {
+ this.progress = res.data * 1
+ }
+ if (res.event == 'file') {
+ this.tempFilePath.push(res.data)
+ if (this.tempFilePath.length > 7) {
+ this.tempFilePath.shift()
+ }
+ return
+ }
+ if (res.event == 'success') {
+ if (res.data) {
+ this.tempFilePath.push(res.data)
+ if (this.tempFilePath.length > 8) {
+ this.tempFilePath.shift()
+ }
+ if (this.isCanvasToTempFilePath) {
+ this.setFilePath(this.tempFilePath.join(''), {isEmit:true})
+ }
+ } else {
+ this.$emit('fail', 'canvas no data')
+ }
+ return
+ }
+ this.$emit(res.event, JSON.parse(res.data));
+ } else if (res.file) {
+ this.file = res.data;
+ } else{
+ console.info(res[0])
+ }
+ },
+ getWebViewInited() {
+ if (this.inited) return Promise.resolve(this.inited);
+ return new Promise((resolve) => {
+ this.$watch(
+ 'inited',
+ async val => {
+ if (val) {
+ resolve(val)
+ }
+ }, {
+ immediate: true
+ }
+ );
+ })
+ },
+ getTempFilePath() {
+ if (this.tempFilePath.length == 8) return Promise.resolve(this.tempFilePath)
+ return new Promise((resolve) => {
+ this.$watch(
+ 'tempFilePath',
+ async val => {
+ if (val.length == 8) {
+ resolve(val.join(''))
+ }
+ }
+ );
+ })
+ },
+ getWebViewDone() {
+ if (this.progress == 1) return Promise.resolve(this.progress);
+ return new Promise((resolve) => {
+ this.$watch(
+ 'progress',
+ async val => {
+ if (val == 1) {
+ this.$emit('done')
+ this.done = true
+ resolve(val)
+ }
+ }, {
+ immediate: true
+ }
+ );
+ })
+ },
+ async render(args) {
+ try {
+ await this.getSize(args)
+ const {width} = args.css || args
+ if(!width && this.parentWidth) {
+ Object.assign(args, {width: this.parentWidth})
+ }
+ const newNode = await this.calcImage(args);
+ await this.getWebViewInited()
+ this.webview.evalJS(`source(${JSON.stringify(newNode)})`)
+ await this.getWebViewDone()
+ await sleep(this.afterDelay)
+ if (this.isCanvasToTempFilePath) {
+ const params = {
+ fileType: this.fileType,
+ quality: this.quality
+ }
+ this.webview.evalJS(`save(${JSON.stringify(params)})`)
+ }
+ return Promise.resolve()
+ } catch (e) {
+ this.$emit('fail', e)
+ }
+ },
+ getfile(e){
+ let url = plus.io.convertLocalFileSystemURL( e )
+ return new Promise((resolve,reject)=>{
+ plus.io.resolveLocalFileSystemURL(url, entry => {
+ var reader = null;
+ entry.file( file => {
+ reader = new plus.io.FileReader();
+ reader.onloadend = ( read )=> {
+ resolve(read.target.result)
+ };
+ reader.readAsDataURL( file );
+ }, function ( error ) {
+ alert( error.message );
+ } );
+ },err=>{
+ resolve(e)
+ })
+ })
+ },
+ async calcImage(args) {
+ let node = JSON.parse(JSON.stringify(args))
+ const urlReg = /url\((.+)\)/
+ const {backgroundImage} = node.css||{}
+ const isBG = backgroundImage && urlReg.exec(backgroundImage)[1]
+ const url = node.url || node.src || isBG
+ if(['text', 'qrcode'].includes(node.type)) {
+ return node
+ }
+ if ((node.type === "image" || isBG) && url && !isBase64(url) && (this.osName == 'ios' ? true : !networkReg.test(url))) {
+ let {path} = await getImageInfo(url)
+ if(this.osName == 'ios') {
+ path = await this.getfile(path)
+ }
+ if (isBG) {
+ node.css.backgroundImage = `url(${path})`
+ } else {
+ node.src = path
+ }
+ } else if (node.views && node.views.length) {
+ for (let i = 0; i < node.views.length; i++) {
+ node.views[i] = await this.calcImage(node.views[i])
+ }
+ }
+ return node
+ },
+ async canvasToTempFilePath(args = {}) {
+ if (!this.inited) {
+ return this.$emit('fail', 'no init')
+ }
+ this.tempFilePath = []
+ if (args.fileType == 'jpg') {
+ args.fileType = 'jpeg'
+ }
+ this.webview.evalJS(`save(${JSON.stringify(args)})`)
+ try {
+ let tempFilePath = await this.getTempFilePath()
+ tempFilePath = await this.setFilePath(tempFilePath)
+ args.success({
+ errMsg: "canvasToTempFilePath:ok",
+ tempFilePath
+ })
+ } catch (e) {
+ args.fail({
+ error: e
+ })
+ }
+ }
+ }
+}
+// #endif
\ No newline at end of file
diff --git a/uni_modules/lime-painter/components/l-painter/painter.js b/uni_modules/lime-painter/components/l-painter/painter.js
new file mode 100644
index 0000000..9cd1e7d
--- /dev/null
+++ b/uni_modules/lime-painter/components/l-painter/painter.js
@@ -0,0 +1 @@
+var t=function(){return t=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]=360&&(s-=360);s<0&&(s+=360);if(0===(s=Math.round(s)))return{x0:Math.round(e/2)+n,y0:i+r,x1:Math.round(e/2)+n,y1:r};if(180===s)return{x0:Math.round(e/2)+n,y0:r,x1:Math.round(e/2)+n,y1:i+r};if(90===s)return{x0:n,y0:Math.round(i/2)+r,x1:e+n,y1:Math.round(i/2)+r};if(270===s)return{x0:e+n,y0:Math.round(i/2)+r,x1:n,y1:Math.round(i/2)+r};var a=Math.round(180*Math.asin(e/Math.sqrt(Math.pow(e,2)+Math.pow(i,2)))/Math.PI);if(s===a)return{x0:n,y0:i+r,x1:e+n,y1:r};if(s===180-a)return{x0:n,y0:r,x1:e+n,y1:i+r};if(s===180+a)return{x0:e+n,y0:r,x1:n,y1:i+r};if(s===360-a)return{x0:e+n,y0:i+r,x1:n,y1:r};var h=0,d=0,c=0,l=0;if(s180-a&&s<180||s>180&&s<180+a||s>360-a){var f=s*Math.PI/180,u=s360-a?i/2:-i/2,p=Math.tan(f)*u,g=s180-a&&s<180?e/2-p:-e/2-p;h=-(c=p+(v=Math.pow(Math.sin(f),2)*g)),d=-(l=u+v/Math.tan(f))}if(s>a&&s<90||s>90&&s<90+a||s>180+a&&s<270||s>270&&s<360-a){var v;f=(90-s)*Math.PI/180,p=s>a&&s<90||s>90&&s<90+a?e/2:-e/2,u=Math.tan(f)*p,g=s>a&&s<90||s>270&&s<360-a?i/2-u:-i/2-u;h=-(c=p+(v=Math.pow(Math.sin(f),2)*g)/Math.tan(f)),d=-(l=u+v)}return h=Math.round(h+e/2)+n,d=Math.round(i/2-d)+r,c=Math.round(c+e/2)+n,l=Math.round(i/2-l)+r,{x0:h,y0:d,x1:c,y1:l}}(r,t,e,i,n),a=s.x0,h=s.y0,d=s.x1,c=s.y1,l=o.createLinearGradient(a,h,d,c),f=r.match(/linear-gradient\((.+)\)/)[1],u=T(f.substring(f.indexOf(",")+1)),p=0;pt.length)&&(e=t.length);for(var i=0,n=new Array(e);i=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function H(t){return"number"==typeof t}function U(t){return"auto"===t||null===t}function Y(t){return/%$/.test(t)}var $,D=0,X=function(){function t(){A(this,"elements",[]),A(this,"afterElements",[]),A(this,"beforeElements",[]),A(this,"ids",[]),A(this,"width",0),A(this,"height",0),A(this,"top",0),A(this,"left",0),A(this,"pre",null),A(this,"offsetX",0),A(this,"offsetY",0),D++,this.id=D}var e=t.prototype;return e.fixedBind=function(t,e){void 0===e&&(e=0),this.container=e?t.parent:t.root,this.container.fixedLine=this,this.fixedAdd(t)},e.fixedAdd=function(t){this.elements.push(t);var e=t.computedStyle.zIndex;(void 0===e?0:e)>=0?this.afterElements.push(t):this.beforeElements.push(t),this.refreshLayout()},e.bind=function(t){this.container=t.parent,this.container.line=null,this.container.lines?(this.container.lines.push(this),this.pre=this.getPreLine(),this.top=this.pre.top+this.pre.height,this.left=this.container.contentSize.left):(this.top=this.container.contentSize.top,this.left=this.container.contentSize.left,this.container.lines=[this]),this.isInline=t.isInline(),this.container.line=this,this.outerWidth=t.parent&&t.parent.contentSize.width?t.parent.contentSize.width:1/0,this.add(t)},e.getPreLine=function(){return this.container.lines[this.container.lines.length-2]},e.canIEnter=function(t){return this.outerWidth||t.parent&&t.parent.contentSize.width,!((100*t.offsetSize.width+100*this.width)/100>this.outerWidth)||(this.closeLine(),!1)},e.closeLine=function(){delete this.container.line},e.add=function(t){this.ids.includes(t.id)||(this.ids.push(t.id),this.elements.push(t),this.refreshWidthHeight(t))},e.refreshWidthHeight=function(t){t.offsetSize.height>this.height&&(this.height=t.offsetSize.height),this.width+=t.offsetSize.width||0,(this.container.lineMaxWidth||0)this[this.key.height]&&(this[this.key.height]=t.offsetSize[this.key.height]),this[this.key.width]+=t.offsetSize[this.key.width];var e=Math.min(this[this.key.width],this.container.contentSize[this.key.width]);(this.container.lineMaxWidth||0)1?0:"flex-end"===t.style.alignSelf?this.container.contentSize[this.key.contentHeight]-t.contentSize[this.key.height]:"center"===t.style.alignSelf?(this.container.contentSize[this.key.contentHeight]-t.contentSize[this.key.height])/2:0},n}(X),V=g,G=p,q=u,J=v,Q=y,Z=b,K=m,et=w,it=S,nt=0,rt={left:null,top:null,width:null,height:null},ot=function(){function t(t,e,i,n){var r=this;A(this,"id",nt++),A(this,"style",{left:null,top:null,width:null,height:null}),A(this,"computedStyle",{}),A(this,"originStyle",{}),A(this,"children",{}),A(this,"layoutBox",F({},rt)),A(this,"contentSize",F({},rt)),A(this,"clientSize",F({},rt)),A(this,"borderSize",F({},rt)),A(this,"offsetSize",F({},rt)),this.ctx=n,this.root=i,e&&(this.parent=e),this.name=t.name||t.type,this.attributes=this.getAttributes(t);var o=this.getComputedStyle(t,e&&e.computedStyle);this.isAbsolute=o.position==et,this.isFixed=o.position==it,this.originStyle=o,Object.keys(o).forEach((function(t){Object.defineProperty(r.style,t,{configurable:!0,enumerable:!0,get:function(){return o[t]},set:function(e){o[t]=e}})}));var s={contentSize:F({},this.contentSize),clientSize:F({},this.clientSize),borderSize:F({},this.borderSize),offsetSize:F({},this.offsetSize)};Object.keys(s).forEach((function(t){Object.keys(r[t]).forEach((function(e){Object.defineProperty(r[t],e,{configurable:!0,enumerable:!0,get:function(){return s[t][e]},set:function(i){s[t][e]=i}})}))})),this.computedStyle=this.style}var e=t.prototype;return e.add=function(t){t.parent=this,this.children[t.id]=t},e.getChildren=function(){var t=this;return Object.keys(this.children).map((function(e){return t.children[e]}))},e.getLineRect=function(t,e){var i={width:0,height:0},n=e?e.lines:this.parent&&this.parent.lines;return n&&n.find((function(e){return e.ids.includes(t)}))||i},e.getComputedStyle=function(t,e){var i=["color","fontSize","lineHeight","verticalAlign","fontWeight","textAlign"],n=t.css,r=void 0===n?{}:n,o=t.type,s=void 0===o?q:o,a=F({},z);if([G,V,J].includes(s)&&!r.display&&(a.display=Z),e)for(var h=0;h=0&&l<0,Y=d>=0&&u<0;return i==r[0]&&(this[i].left=t.left+a+v+C+(U?2*-l:0),this[i].top=t.top+d+b+P+(Y?2*-u:0),this[i].width=t.width+(this[i].widthAdd?0:E),this[i].height=t.height+(this[i].heightAdd?0:H),this[i].widthAdd=E,this[i].heightAdd=H),i==r[1]&&(this[i].left=t.left+a+C+(U<0?-l:0),this[i].top=t.top+d+P+(Y?-u:0),this[i].width=t.width+v+m,this[i].height=t.height+b+S),i==r[2]&&(this[i].left=t.left+a+C/2+(U<0?-l:0),this[i].top=t.top+d+P/2+(Y?-u:0),this[i].width=t.width+v+m+C/2+A/2,this[i].height=t.height+b+S+L/2+P/2),i==r[3]&&(this[i].left=t.left+(U<0?-l:0),this[i].top=t.top+(Y?-u:0),this[i].width=t.width+v+m+C+A+a+l,this[i].height=t.height+b+S+L+P+u+d),this[i]},e.layoutBoxUpdate=function(t,e,i,n){var o=this;if(void 0===i&&(i=-1),"border-box"==e.boxSizing){var s=e||{},a=s.border,h=(a=void 0===a?{}:a).borderWidth,d=void 0===h?0:h,c=s.borderTop,l=(c=void 0===c?{}:c).borderTopWidth,f=void 0===l?d:l,u=s.borderBottom,p=(u=void 0===u?{}:u).borderBottomWidth,g=void 0===p?d:p,v=s.borderRight,y=(v=void 0===v?{}:v).borderRightWidth,b=void 0===y?d:y,x=s.borderLeft,m=(x=void 0===x?{}:x).borderLeftWidth,w=void 0===m?d:m,S=s.padding,z=(S=void 0===S?{}:S).paddingTop,M=void 0===z?0:z,B=S.paddingRight,k=void 0===B?0:B,I=S.paddingBottom,P=void 0===I?0:I,W=S.paddingLeft,R=void 0===W?0:W;i||(t.width-=R+k+b+w),1!==i||n||(t.height-=M+P+f+g)}this.layoutBox&&(r.forEach((function(i){return o.layoutBox[i]=o.getOffsetSize(t,e,i)})),this.layoutBox=Object.assign({},this.layoutBox,this.layoutBox.borderSize))},e.getBoxPosition2=function(){var t=this.computedStyle,e=this.fixedLine,i=this.lines,n=t.left,r=void 0===n?0:n,o=t.top,s=void 0===o?0:o,a=t.padding||{},h=a.paddingBottom,d=void 0===h?0:h,c=a.paddingRight,l=void 0===c?0:c,f=F({},this.contentSize,{left:r,top:s}),u=this.contentSize.top-this.offsetSize.top,p=this.contentSize.left-this.offsetSize.left;if(this.root.fixedLine&&!this.root.isDone){this.root.isDone=!0;for(var g,v=E(this.root.fixedLine.elements);!(g=v()).done;){var y=g.value;y.setPosition(y,this.root.offsetSize),y.getBoxPosition2()}}if(e)for(var b,x=E(e.elements);!(b=x()).done;){var m=b.value;m.setPosition(m,f),m.style.left+=r+p+l,m.style.top+=s+u+d,m.getBoxPosition2()}if(i)for(var w,S=E(i);!(w=S()).done;){w.value.layout(f.top+u,f.left+p)}return this.layoutBoxUpdate(f,t),this.layoutBox},e.getBoxState=function(t,e){return this.isBlock(t)||this.isBlock(e)},e.isBlock=function(t){return void 0===t&&(t=this),t&&t.style.display==Q},e.isFlex=function(t){return void 0===t&&(t=this),t&&t.style.display==K},e.isInFlow=function(){return!(this.isAbsolute||this.isFixed)},e.inFlexBox=function(t){return void 0===t&&(t=this),!!t.isInFlow()&&(!!t.parent&&(!(!t.parent||t.parent.style.display!==K)||void 0))},e.isInline=function(t){return void 0===t&&(t=this),t&&t.style.display==Z},e.contrastSize=function(t,e,i){var n=t;return i&&(n=Math.min(n,i)),e&&(n=Math.max(n,e)),n},e.measureText=function(t,e){var i=this.ctx.measureText(t),n=i.width,r=i.actualBoundingBoxAscent,o=i.actualBoundingBoxDescent;return{ascent:r,descent:o,width:n,fontHeight:r+o||.7*e+1}},e.getBoxWidthHeight=function(){var t=this,e=this.name,i=this.computedStyle,n=this.attributes,r=this.parent,o=void 0===r?{}:r,s=this.ctx,a=this.getChildren(),h=i.left,d=void 0===h?0:h,c=i.top,l=void 0===c?0:c,f=i.bottom,u=i.right,p=i.width,g=void 0===p?0:p,v=i.minWidth,y=i.maxWidth,b=i.minHeight,x=i.maxHeight,m=i.height,w=void 0===m?0:m,S=i.fontSize,z=void 0===S?14:S,M=i.fontWeight,B=i.fontFamily,k=i.fontStyle,I=i.position,P=i.lineClamp,R=i.lineHeight,L=i.padding,O=void 0===L?{}:L,T=i.margin,A=void 0===T?{}:T,F=i.border,j=(F=void 0===F?{}:F).borderWidth,C=void 0===j?0:j,E=i.borderRight,H=(E=void 0===E?{}:E).borderRightWidth,U=void 0===H?C:H,$=i.borderLeft,D=($=void 0===$?{}:$).borderLeftWidth,_=void 0===D?C:D,J=o.contentSize&&o.contentSize.width,Q=o.contentSize&&o.contentSize.height;if(Y(g)&&J&&(g=W(g,J)),Y(g)&&!J&&(g=null),Y(w)&&Q&&(w=W(w,Q)),Y(w)&&!Q&&(w=null),Y(v)&&J&&(v=W(v,J)),Y(y)&&J&&(y=W(y,J)),Y(b)&&Q&&(b=W(b,Q)),Y(x)&&Q&&(x=W(x,Q)),i.padding&&J)for(var Z in i.padding)Object.hasOwnProperty.call(i.padding,Z)&&(i.padding[Z]=W(i.padding[Z],J));var K=O.paddingRight,tt=void 0===K?0:K,it=O.paddingLeft,nt=void 0===it?0:it;if(i.margin&&[i.margin.marginLeft,i.margin.marginRight].includes("auto"))if(g){var rt=J&&J-g-tt-nt-_-U||0;i.margin.marginLeft==i.margin.marginRight?i.margin.marginLeft=i.margin.marginRight=rt/2:"auto"==i.margin.marginLeft?i.margin.marginLeft=rt:i.margin.marginRight=rt}else i.margin.marginLeft=i.margin.marginRight=0;var ot=A.marginRight,st=void 0===ot?0:ot,at=A.marginLeft,ht={width:g,height:w,left:0,top:0},dt=nt+tt+_+U+(void 0===at?0:at)+st;if(e==G&&!this.attributes.widths){var ct=n.text||"";s.save(),s.setFonts({fontFamily:B,fontSize:z,fontWeight:M,fontStyle:k});var lt=new Map;ct.split("\n").map((function(e){var i=e.split("").map((function(e){var i=lt.get(e);if(i)return i;var n=t.measureText(e,z).width;return lt.set(e,n),n})),n=t.measureText(e,z),r=n.fontHeight,o=n.ascent,s=n.descent;t.attributes.fontHeight=r,t.attributes.ascent=o,t.attributes.descent=s,t.attributes.widths||(t.attributes.widths=[]),t.attributes.widths.push({widths:i,total:i.reduce((function(t,e){return t+e}),0)})})),s.restore()}if(e==V&&null==g){var ft=n.width,ut=n.height;ht.width=this.contrastSize(Math.round(ft*w/ut)||0,v,y),this.layoutBoxUpdate(ht,i,0)}if(e==G&&null==g){var pt=this.attributes.widths,gt=Math.max.apply(Math,pt.map((function(t){return t.total})));if(o&&J>0&&(gt>J||this.isBlock(this))&&!this.isAbsolute&&!this.isFixed)gt=J-dt;ht.width=this.contrastSize(gt,v,y),this.layoutBoxUpdate(ht,i,0)}if(e==G&&(o.style.flex||!this.attributes.lines)){var vt=this.attributes.widths.length;this.attributes.widths.forEach((function(t){return t.widths.reduce((function(t,e,i){return t+e>ht.width?(vt++,e):t+e}),0)})),vt=P&&vt>P?P:vt,this.attributes.lines=vt}if(e==V&&null==w){var yt=n.width,bt=n.height;ht.height=this.contrastSize(W(ht.width*bt/yt)||0,b,x),this.layoutBoxUpdate(ht,i,1)}e==G&&null==w&&(R=W(R,z),ht.height=this.contrastSize(W(this.attributes.lines*R),b,x),this.layoutBoxUpdate(ht,i,1,!0)),o&&o.children&&J&&([q,G].includes(e)&&this.isFlex()||e==q&&this.isBlock(this)&&this.isInFlow())&&(ht.width=this.contrastSize(J-dt,v,y),this.layoutBoxUpdate(ht,i)),g&&!Y(g)&&(ht.width=this.contrastSize(g,v,y),this.layoutBoxUpdate(ht,i,0)),w&&!Y(w)&&(ht.height=this.contrastSize(ht.height,b,x),this.layoutBoxUpdate(ht,i,1));var xt=0;if(a.length){var mt=null;a.forEach((function(e,n){e.getBoxWidthHeight();var r=a[n+1];if(r&&r.isInFlow()&&(e.next=r),e.isInFlow()&&!e.inFlexBox()){var o=t.getBoxState(mt,e);t.line&&t.line.canIEnter(e)&&!o?t.line.add(e):(new X).bind(e),mt=e}else e.inFlexBox()?t.line&&(t.line.canIEnter(e)||"nowrap"==i.flexWrap)?t.line.add(e):(new N).bind(e):e.isFixed?t.root.fixedLine?t.root.fixedLine.fixedAdd(e):(new X).fixedBind(e):t.fixedLine?t.fixedLine.fixedAdd(e):(new X).fixedBind(e,1)})),this.lines&&(xt=this.lines.reduce((function(t,e){return t+e.height}),0))}var wt=0,St=0;if(!g&&(this.isAbsolute||this.isFixed)&&J){var zt=I==et?J:this.root.width,Mt=zt-(Y(d)?W(d,zt):d)-(Y(u)?W(u,zt):u);wt=i.left?Mt:this.lineMaxWidth}if(!w&&(null!=l?l:this.isAbsolute||this.isFixed&&Q)){var Bt=I==et?Q:this.root.height,kt=Bt-(Y(l)?W(l,Bt):l)-(Y(f)?W(f,Bt):f);St=i.top?kt:0}if(g&&!Y(g)||ht.width||(ht.width=wt||this.contrastSize((this.isBlock(this)&&!this.isInFlow()?J||o.lineMaxWidth:this.lineMaxWidth)||this.lineMaxWidth,v,y),this.layoutBoxUpdate(ht,i,0)),w||!xt&&!St||(ht.height=St||this.contrastSize(xt,b,x),this.layoutBoxUpdate(ht,i)),i.borderRadius&&this.borderSize&&this.borderSize.width)for(var Z in i.borderRadius)Object.hasOwnProperty.call(i.borderRadius,Z)&&(i.borderRadius[Z]=W(i.borderRadius[Z],this.borderSize.width));return this.layoutBox},e.layout=function(){return this.getBoxWidthHeight(),this.root.offsetSize=this.offsetSize,this.getBoxPosition2(),this.offsetSize},t}(),st=function(){var t,e,i,n,r,o,s=[0,11,15,19,23,27,31,16,18,20,22,24,26,28,20,22,24,24,26,28,28,22,24,24,26,26,28,28,24,24,26,26,26,28,28,24,26,26,26,28,28],a=[3220,1468,2713,1235,3062,1890,2119,1549,2344,2936,1117,2583,1330,2470,1667,2249,2028,3780,481,4011,142,3098,831,3445,592,2517,1776,2234,1951,2827,1070,2660,1345,3177],h=[30660,29427,32170,30877,26159,25368,27713,26998,21522,20773,24188,23371,17913,16590,20375,19104,13663,12392,16177,14854,9396,8579,11994,11245,5769,5054,7399,6608,1890,597,3340,2107],d=[1,0,19,7,1,0,16,10,1,0,13,13,1,0,9,17,1,0,34,10,1,0,28,16,1,0,22,22,1,0,16,28,1,0,55,15,1,0,44,26,2,0,17,18,2,0,13,22,1,0,80,20,2,0,32,18,2,0,24,26,4,0,9,16,1,0,108,26,2,0,43,24,2,2,15,18,2,2,11,22,2,0,68,18,4,0,27,16,4,0,19,24,4,0,15,28,2,0,78,20,4,0,31,18,2,4,14,18,4,1,13,26,2,0,97,24,2,2,38,22,4,2,18,22,4,2,14,26,2,0,116,30,3,2,36,22,4,4,16,20,4,4,12,24,2,2,68,18,4,1,43,26,6,2,19,24,6,2,15,28,4,0,81,20,1,4,50,30,4,4,22,28,3,8,12,24,2,2,92,24,6,2,36,22,4,6,20,26,7,4,14,28,4,0,107,26,8,1,37,22,8,4,20,24,12,4,11,22,3,1,115,30,4,5,40,24,11,5,16,20,11,5,12,24,5,1,87,22,5,5,41,24,5,7,24,30,11,7,12,24,5,1,98,24,7,3,45,28,15,2,19,24,3,13,15,30,1,5,107,28,10,1,46,28,1,15,22,28,2,17,14,28,5,1,120,30,9,4,43,26,17,1,22,28,2,19,14,28,3,4,113,28,3,11,44,26,17,4,21,26,9,16,13,26,3,5,107,28,3,13,41,26,15,5,24,30,15,10,15,28,4,4,116,28,17,0,42,26,17,6,22,28,19,6,16,30,2,7,111,28,17,0,46,28,7,16,24,30,34,0,13,24,4,5,121,30,4,14,47,28,11,14,24,30,16,14,15,30,6,4,117,30,6,14,45,28,11,16,24,30,30,2,16,30,8,4,106,26,8,13,47,28,7,22,24,30,22,13,15,30,10,2,114,28,19,4,46,28,28,6,22,28,33,4,16,30,8,4,122,30,22,3,45,28,8,26,23,30,12,28,15,30,3,10,117,30,3,23,45,28,4,31,24,30,11,31,15,30,7,7,116,30,21,7,45,28,1,37,23,30,19,26,15,30,5,10,115,30,19,10,47,28,15,25,24,30,23,25,15,30,13,3,115,30,2,29,46,28,42,1,24,30,23,28,15,30,17,0,115,30,10,23,46,28,10,35,24,30,19,35,15,30,17,1,115,30,14,21,46,28,29,19,24,30,11,46,15,30,13,6,115,30,14,23,46,28,44,7,24,30,59,1,16,30,12,7,121,30,12,26,47,28,39,14,24,30,22,41,15,30,6,14,121,30,6,34,47,28,46,10,24,30,2,64,15,30,17,4,122,30,29,14,46,28,49,10,24,30,24,46,15,30,4,18,122,30,13,32,46,28,48,14,24,30,42,32,15,30,20,4,117,30,40,7,47,28,43,22,24,30,10,67,15,30,19,6,118,30,18,31,47,28,34,34,24,30,20,61,15,30],c=[255,0,1,25,2,50,26,198,3,223,51,238,27,104,199,75,4,100,224,14,52,141,239,129,28,193,105,248,200,8,76,113,5,138,101,47,225,36,15,33,53,147,142,218,240,18,130,69,29,181,194,125,106,39,249,185,201,154,9,120,77,228,114,166,6,191,139,98,102,221,48,253,226,152,37,179,16,145,34,136,54,208,148,206,143,150,219,189,241,210,19,92,131,56,70,64,30,66,182,163,195,72,126,110,107,58,40,84,250,133,186,61,202,94,155,159,10,21,121,43,78,212,229,172,115,243,167,87,7,112,192,247,140,128,99,13,103,74,222,237,49,197,254,24,227,165,153,119,38,184,180,124,17,68,146,217,35,32,137,46,55,63,209,91,149,188,207,205,144,135,151,178,220,252,190,97,242,86,211,171,20,42,93,158,132,60,57,83,71,109,65,162,31,45,67,216,183,123,164,118,196,23,73,236,127,12,111,246,108,161,59,82,41,157,85,170,251,96,134,177,187,204,62,90,203,89,95,176,156,169,160,81,11,245,22,235,122,117,44,215,79,174,213,233,230,231,173,232,116,214,244,234,168,80,88,175],l=[1,2,4,8,16,32,64,128,29,58,116,232,205,135,19,38,76,152,45,90,180,117,234,201,143,3,6,12,24,48,96,192,157,39,78,156,37,74,148,53,106,212,181,119,238,193,159,35,70,140,5,10,20,40,80,160,93,186,105,210,185,111,222,161,95,190,97,194,153,47,94,188,101,202,137,15,30,60,120,240,253,231,211,187,107,214,177,127,254,225,223,163,91,182,113,226,217,175,67,134,17,34,68,136,13,26,52,104,208,189,103,206,129,31,62,124,248,237,199,147,59,118,236,197,151,51,102,204,133,23,46,92,184,109,218,169,79,158,33,66,132,21,42,84,168,77,154,41,82,164,85,170,73,146,57,114,228,213,183,115,230,209,191,99,198,145,63,126,252,229,215,179,123,246,241,255,227,219,171,75,150,49,98,196,149,55,110,220,165,87,174,65,130,25,50,100,200,141,7,14,28,56,112,224,221,167,83,166,81,162,89,178,121,242,249,239,195,155,43,86,172,69,138,9,18,36,72,144,61,122,244,245,247,243,251,235,203,139,11,22,44,88,176,125,250,233,207,131,27,54,108,216,173,71,142,0],f=[],u=[],p=[],g=[],v=[],y=2;function b(t,e){var i;t>e&&(i=t,t=e,e=i),i=e,i*=e,i+=e,i>>=1,g[i+=t]=1}function x(t,i){var n;for(p[t+e*i]=1,n=-2;n<2;n++)p[t+n+e*(i-2)]=1,p[t-2+e*(i+n+1)]=1,p[t+2+e*(i+n)]=1,p[t+n+1+e*(i+2)]=1;for(n=0;n<2;n++)b(t-1,i+n),b(t+1,i-n),b(t-n,i-1),b(t+n,i+1)}function m(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t}var w=[];function S(t,e,i,n){var r,o,s;for(r=0;re&&(i=t,t=e,e=i),i=e,i+=e*e,i>>=1,g[i+=t]}function M(t){var i,n,r,o;switch(t){case 0:for(n=0;n>1&1,i=0;i=5&&(i+=3+v[e]-5);for(e=3;et||3*v[e-3]>=4*v[e]||3*v[e+3]>=4*v[e])&&(i+=40);return i}function k(){var t,i,n,r,o,s=0,a=0;for(i=0;ie*e;)h-=e*e,d++;for(s+=10*d,t=0;t1)for(W=s[t],I=e-7;;){for(B=e-7;B>W-3&&(x(B,I),!(B6)for(W=a[t-7],P=17,B=0;B<6;B++)for(I=0;I<3;I++,P--)1&(P>11?t>>P-12:W>>P)?(p[5-B+e*(2-I+e-11)]=1,p[2-I+e-11+e*(5-B)]=1):(b(5-B,2-I+e-11),b(2-I+e-11,5-B));for(I=0;I=(B=r*(i+n)+n)-2&&(R=B-2,t>9&&R--),L=R,t>9){for(f[L+2]=0,f[L+3]=0;L--;)W=f[L],f[L+3]|=255&W<<4,f[L+2]=W>>4;f[2]|=255&R<<4,f[1]=R>>4,f[0]=64|R>>12}else{for(f[L+1]=0,f[L+2]=0;L--;)W=f[L],f[L+2]|=255&W<<4,f[L+1]=W>>4;f[1]|=255&R<<4,f[0]=64|R>>4}for(L=R+3-(t<10);L0;O--)w[O]=w[O]?w[O-1]^l[m(c[w[O]]+L)]:w[O-1];w[0]=l[m(c[w[0]]+L)]}for(L=0;L<=o;L++)w[L]=c[w[L]];for(P=B,I=0,L=0;L>=1)1&I&&(p[e-1-P+8*e]=1,P<6?p[8+e*P]=1:p[8+e*(P+1)]=1);for(P=0;P<7;P++,I>>=1)1&I&&(p[8+e*(e-7+P)]=1,P?p[6-P+8*e]=1:p[7+8*e]=1);return p}(v)},utf16to8:function(t){var e,i,n,r;for(e="",n=t.length,i=0;i=1&&r<=127?e+=t.charAt(i):r>2047?(e+=String.fromCharCode(224|r>>12&15),e+=String.fromCharCode(128|r>>6&63),e+=String.fromCharCode(128|r>>0&63)):(e+=String.fromCharCode(192|r>>6&31),e+=String.fromCharCode(128|r>>0&63));return e},draw:function(t,i,n,r,o){i.drawView(n,r);var s=i.ctx,a=n.contentSize,h=a.width,d=a.height,c=a.left,l=a.top;r.borderRadius,r.backgroundColor;var f=r.color,u=void 0===f?"#000000":f;r.border,n.contentSize.left,n.borderSize.left,n.contentSize.top,n.borderSize.top;if(y=o||y,s){s.save(),i.setOpacity(r),i.setTransform(n,r);var p=Math.min(h,d);t=this.utf16to8(t);var g=this.getFrame(t),v=p/e;s.setFillStyle(u);for(var b=0;b=s||"cover"==n&&o=s)&&(a=e.width/i.width);var h=i.width*a,d=i.height*a,c=r||[],l=c[0],f=c[1],u=/^\d+px|rpx$/.test(l)?W(l,e.width):(e.width-h)*(R(l)?W(l,1):{left:0,center:.5,right:1}[l||"center"]),p=/^\d+px|rpx$/.test(f)?W(f,e.height):(e.height-d)*(R(f)?W(f,1):{top:0,center:.5,bottom:1}[f||"center"]),g=function(t,e){return[(t-u)/a,(e-p)/a]},v=g(0,0),y=v[0],b=v[1],x=g(e.width,e.height),m=x[0],w=x[1];return{sx:Math.max(y,0),sy:Math.max(b,0),sw:Math.min(m-y,i.width),sh:Math.min(w-b,i.height),dx:Math.max(u,0),dy:Math.max(p,0),dw:Math.min(h,e.width),dh:Math.min(d,e.height)}}({objectFit:u,objectPosition:v},r.contentSize,t),o=i.sx,s=i.sy,a=i.sh,h=i.sw,d=i.dx,c=i.dy,l=i.dh,f=i.dw;B==n.MP_BAIDU?e.drawImage(t.src,d+w,c+S,f,l,o,s,h,a):e.drawImage(t.src,o,s,h,a,d+w,c+S,f,l)}else e.drawImage(t.src,w,S,x,m)},I=function(){e.restore(),L.drawView(r,o,!1,!0,!1),h(1)},P=function(t){k(t),I()},P(t),[2]}))}))}))];case 1:return h.sent(),[2]}}))}))},r.prototype.drawText=function(t,e,i,n){var r=this.ctx,o=e.borderSize,s=e.contentSize,a=e.left,h=e.top,d=s.width,c=s.height,l=s.left-o.left,f=s.top-o.top,u=i.color,p=void 0===u?"#000000":u,g=i.lineHeight,v=void 0===g?"1.4em":g,y=i.fontSize,b=void 0===y?14:y,x=i.fontWeight,m=i.fontFamily,w=i.fontStyle,S=i.textAlign,z=void 0===S?"left":S,M=i.verticalAlign,B=void 0===M?ft:M,k=i.backgroundColor,I=i.lineClamp,P=i.backgroundClip,R=i.textShadow,L=i.textDecoration;if(this.drawView(e,i,P!=ht),v=W(v,b),t){r.save(),this.setShadow({boxShadow:R}),a+=l,h+=f;var O=n.fontHeight,T=n.descent+n.ascent;switch(r.setFonts({fontFamily:m,fontSize:b,fontWeight:x,fontStyle:w}),r.setTextBaseline(T?ft:B),r.setTextAlign(z),P?this.setBackground(k,d,c,a,h):r.setFillStyle(p),z){case pt:break;case gt:a+=.5*d;break;case vt:a+=d}var A=n.lines*v,F=Math.ceil((c-A)/2);switch(F<0&&(F=0),B){case lt:break;case ft:h+=F;break;case ut:h+=2*F}var j=(v-O)/2,C=function(t){var e=r.measureText(t),i=e.actualBoundingBoxDescent,n=void 0===i?0:i,o=e.actualBoundingBoxAscent;return B==lt?{fix:T?void 0===o?0:o:0,lineY:T?2*j:j}:B==ft?{fix:T?v/2+n/4:v/2,lineY:(v-O)/2}:B==ut?{fix:T?v-n:v+j,lineY:0}:{fix:0,height:0,lineY:0}},E=function(t,e,i){var o=t;switch(z){case pt:o+=i;break;case gt:o=(t-=i/2)+i;break;case vt:o=t,t-=i}if(L){r.setLineWidth(b/13),r.beginPath();var s=.1*n.fontHeight;/\bunderline\b/.test(L)&&(r.moveTo(t,e+s),r.lineTo(o,e+s)),/\boverline\b/.test(L)&&(T||(e-=j),r.moveTo(t,e-n.fontHeight-s),r.lineTo(o,e-n.fontHeight-s)),/\bline-through\b/.test(L)&&(r.moveTo(t,e-.5*n.fontHeight),r.lineTo(o,e-.5*n.fontHeight)),r.closePath(),r.setStrokeStyle(p),r.stroke()}};if(!n.widths||1==n.widths.length&&n.widths[0].total<=s.width){var H=C(t),U=H.fix,Y=H.lineY;return r.fillText(t,a,h+U),E(a,(h+=v)-Y,n&&n.widths&&n.widths[0].total||n.text),r.restore(),void this.setBorder(e,i)}for(var $=t.split(""),D=h,X=a,_="",N=0,V=0;V<=$.length;V++){var G=$[V]||"",q="\n"===G,J=""==G,Q=_+(G=q?"":G),Z=r.measureText(Q).width;if(N>=I)break;if(X=a,Z>s.width||q||J){if(N++,_=J&&Z<=s.width?Q:_,N===I&&Z>d){for(;r.measureText("".concat(_,"...")).width>s.width&&!(_.length<=1);)_=_.substring(0,_.length-1);_+="..."}var K=C(_);U=K.fix,Y=K.lineY;if(r.fillText(_,X,h+U),E(X,(h+=v)-Y,Z),_=G,h>D+c)break}else _=Q}r.restore()}},r.prototype.source=function(t){return e(this,void 0,void 0,(function(){var e,n,r,o=this;return i(this,(function(i){switch(i.label){case 0:if(this.node=null,e=+new Date,"{}"==JSON.stringify(t))return[2];if(!t.type)for(n in t.type=ct,t.css=t.css||{},t)["views","children","type","css"].includes(n)||(t.css[n]=t[n],delete t[n]);return t.css&&!t.css.width&&(t.css||(t.css={})),[4,this.create(t)];case 1:return(r=i.sent())?(this.size=r.layout()||{},this.node=r,this.onEffectFinished().then((function(t){return o.lifecycle("onEffectSuccess",t)})).catch((function(t){return o.lifecycle("onEffectFail",t)})),console.log("布局用时:"+(+new Date-e)+"ms"),[2,this.size]):[2,console.warn("no node")]}}))}))},r.prototype.getImageInfo=function(t){return this.imageBus[t]||(this.imageBus[t]=this.createImage(t,this.useCORS)),this.imageBus[t]},r.prototype.create=function(n,r){return e(this,void 0,void 0,(function(){var e,o,s,a,h,d,c,l,f,u,p,g,v,y,b,m,w;return i(this,(function(i){switch(i.label){case 0:if(e=n.type==at,o=[ht,dt].includes(n.type),s=n.css||{},a=s.backgroundImage,h=s.display,e&&!n.src&&!n.url||o&&!n.text)return[2];if(h==x)return[2];if(o&&(n.text=String(n.text)),!(e||n.type==ct&&a))return[3,4];d=e?n.src:"",c=/url\((.+)\)/.exec(a),a&&c&&c[1]&&(d=c[1]||""),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this.getImageInfo(d)];case 2:return l=i.sent(),f=l.width,u=l.height,!(p=l.path)&&e?[2]:(p&&(n.attributes=Object.assign(n.attributes||{},{width:f,height:u,path:p,src:p,naturalSrc:d})),[3,4]);case 3:return g=i.sent(),n.type!=ct?[2]:(this.lifecycle("onEffectFail",t(t({},g),{src:d})),[3,4]);case 4:if(this.count+=1,v=new ot(n,r,this.root,this.ctx),!(y=n.views||n.children))return[3,8];b=0,i.label=5;case 5:return b /^data:image\/(\w+);base64/.test(path);
+export function sleep(delay) {
+ return new Promise(resolve => setTimeout(resolve, delay))
+}
+const isDev = ['devtools'].includes(uni.getSystemInfoSync().platform)
+// 缓存图片
+let cache = {}
+export function isNumber(value) {
+ return /^-?\d+(\.\d+)?$/.test(value);
+}
+export function toPx(value, baseSize, isDecimal = false) {
+ // 如果是数字
+ if (typeof value === 'number') {
+ return value
+ }
+ // 如果是字符串数字
+ if (isNumber(value)) {
+ return value * 1
+ }
+ // 如果有单位
+ if (typeof value === 'string') {
+ const reg = /^-?([0-9]+)?([.]{1}[0-9]+){0,1}(em|rpx|px|%)$/g
+ const results = reg.exec(value);
+ if (!value || !results) {
+ return 0;
+ }
+ const unit = results[3];
+ value = parseFloat(value);
+ let res = 0;
+ if (unit === 'rpx') {
+ res = uni.upx2px(value);
+ } else if (unit === 'px') {
+ res = value * 1;
+ } else if (unit === '%') {
+ res = value * toPx(baseSize) / 100;
+ } else if (unit === 'em') {
+ res = value * toPx(baseSize || 14);
+ }
+ return isDecimal ? res.toFixed(2) * 1 : Math.round(res);
+ }
+ return 0
+}
+
+// 计算版本
+export function compareVersion(v1, v2) {
+ v1 = v1.split('.')
+ v2 = v2.split('.')
+ const len = Math.max(v1.length, v2.length)
+ while (v1.length < len) {
+ v1.push('0')
+ }
+ while (v2.length < len) {
+ v2.push('0')
+ }
+ for (let i = 0; i < len; i++) {
+ const num1 = parseInt(v1[i], 10)
+ const num2 = parseInt(v2[i], 10)
+
+ if (num1 > num2) {
+ return 1
+ } else if (num1 < num2) {
+ return -1
+ }
+ }
+ return 0
+}
+// #ifdef MP
+export const prefix = () => {
+ // #ifdef MP-TOUTIAO
+ return tt
+ // #endif
+ // #ifdef MP-WEIXIN
+ return wx
+ // #endif
+ // #ifdef MP-BAIDU
+ return swan
+ // #endif
+ // #ifdef MP-ALIPAY
+ return my
+ // #endif
+ // #ifdef MP-QQ
+ return qq
+ // #endif
+ // #ifdef MP-360
+ return qh
+ // #endif
+}
+// #endif
+
+
+const base64ToArrayBuffer = (data) => {
+ // #ifndef MP-WEIXIN || APP-PLUS
+ /**
+ * Base64Binary.decode(base64_string);
+ * Base64Binary.decodeArrayBuffer(base64_string);
+ */
+ const Base64Binary = {
+ _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
+ /* will return a Uint8Array type */
+ decodeArrayBuffer(input) {
+ const bytes = (input.length / 4) * 3;
+ const ab = new ArrayBuffer(bytes);
+ this.decode(input, ab);
+ return ab;
+ },
+ removePaddingChars(input) {
+ const lkey = this._keyStr.indexOf(input.charAt(input.length - 1));
+ if (lkey == 64) {
+ return input.substring(0, input.length - 1);
+ }
+ return input;
+ },
+ decode(input, arrayBuffer) {
+ //get last chars to see if are valid
+ input = this.removePaddingChars(input);
+ input = this.removePaddingChars(input);
+
+ const bytes = parseInt((input.length / 4) * 3, 10);
+
+ let uarray;
+ let chr1, chr2, chr3;
+ let enc1, enc2, enc3, enc4;
+ let i = 0;
+ let j = 0;
+
+ if (arrayBuffer)
+ uarray = new Uint8Array(arrayBuffer);
+ else
+ uarray = new Uint8Array(bytes);
+
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+ for (i = 0; i < bytes; i += 3) {
+ //get the 3 octects in 4 ascii chars
+ enc1 = this._keyStr.indexOf(input.charAt(j++));
+ enc2 = this._keyStr.indexOf(input.charAt(j++));
+ enc3 = this._keyStr.indexOf(input.charAt(j++));
+ enc4 = this._keyStr.indexOf(input.charAt(j++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ uarray[i] = chr1;
+ if (enc3 != 64) uarray[i + 1] = chr2;
+ if (enc4 != 64) uarray[i + 2] = chr3;
+ }
+ return uarray;
+ }
+ }
+ return Base64Binary.decodeArrayBuffer(data)
+ // #endif
+ // #ifdef MP-WEIXIN || APP-PLUS
+ return uni.base64ToArrayBuffer(data)
+ // #endif
+}
+
+
+/**
+ * base64转路径
+ * @param {Object} base64
+ */
+export function base64ToPath(base64) {
+ const [, format] = /^data:image\/(\w+);base64,/.exec(base64) || [];
+
+ return new Promise((resolve, reject) => {
+ // #ifdef MP
+ const fs = uni.getFileSystemManager()
+ //自定义文件名
+ if (!format) {
+ reject(new Error('ERROR_BASE64SRC_PARSE'))
+ }
+ const time = new Date().getTime();
+ let pre = prefix()
+ const filePath = `${pre.env.USER_DATA_PATH}/${time}.${format}`
+ //let buffer = base64ToArrayBuffer(bodyData)
+ fs.writeFile({
+ filePath,
+ data: base64.split(',')[1], //base64.replace(/^data:\S+\/\S+;base64,/, ''),
+ encoding: 'base64',
+ // data: buffer,
+ // encoding: 'binary',
+ success() {
+ resolve(filePath)
+ },
+ fail(err) {
+ reject(err)
+ }
+ })
+ // #endif
+
+ // #ifdef H5
+ // mime类型
+ let mimeString = base64.split(',')[0].split(':')[1].split(';')[0];
+ //base64 解码
+ let byteString = atob(base64.split(',')[1]);
+ //创建缓冲数组
+ let arrayBuffer = new ArrayBuffer(byteString.length);
+ //创建视图
+ let intArray = new Uint8Array(arrayBuffer);
+ for (let i = 0; i < byteString.length; i++) {
+ intArray[i] = byteString.charCodeAt(i);
+ }
+ resolve(URL.createObjectURL(new Blob([intArray], {
+ type: mimeString
+ })))
+ // #endif
+
+ // #ifdef APP-PLUS
+ const bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now())
+ bitmap.loadBase64Data(base64, () => {
+ if (!format) {
+ reject(new Error('ERROR_BASE64SRC_PARSE'))
+ }
+ const time = new Date().getTime();
+ const filePath = `_doc/uniapp_temp/${time}.${format}`
+ bitmap.save(filePath, {},
+ () => {
+ bitmap.clear()
+ resolve(filePath)
+ },
+ (error) => {
+ bitmap.clear()
+ reject(error)
+ })
+ }, (error) => {
+ bitmap.clear()
+ reject(error)
+ })
+ // #endif
+ })
+}
+
+/**
+ * 路径转base64
+ * @param {Object} string
+ */
+export function pathToBase64(path) {
+ if (/^data:/.test(path)) return path
+ return new Promise((resolve, reject) => {
+ // #ifdef H5
+ let image = new Image();
+ image.setAttribute("crossOrigin", 'Anonymous');
+ image.onload = function() {
+ let canvas = document.createElement('canvas');
+ canvas.width = this.naturalWidth;
+ canvas.height = this.naturalHeight;
+ canvas.getContext('2d').drawImage(image, 0, 0);
+ let result = canvas.toDataURL('image/png')
+ resolve(result);
+ canvas.height = canvas.width = 0
+ }
+ image.src = path + '?v=' + Math.random()
+ image.onerror = (error) => {
+ reject(error);
+ };
+ // #endif
+
+ // #ifdef MP
+ if (uni.canIUse('getFileSystemManager')) {
+ uni.getFileSystemManager().readFile({
+ filePath: path,
+ encoding: 'base64',
+ success: (res) => {
+ resolve('data:image/png;base64,' + res.data)
+ },
+ fail: (error) => {
+ reject(error)
+ }
+ })
+ }
+ // #endif
+
+ // #ifdef APP-PLUS
+ plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), (entry) => {
+ entry.file((file) => {
+ const fileReader = new plus.io.FileReader()
+ fileReader.onload = (data) => {
+ resolve(data.target.result)
+ }
+ fileReader.onerror = (error) => {
+ reject(error)
+ }
+ fileReader.readAsDataURL(file)
+ }, reject)
+ }, reject)
+ // #endif
+ })
+}
+
+
+
+export function getImageInfo(path, useCORS) {
+ return new Promise(async (resolve, reject) => {
+ let src = path
+ if (cache[path] && cache[path].errMsg) {
+ resolve(cache[path])
+ } else {
+ try {
+ // if (!isBase64 && PLATFORM == UNI_PLATFORM.PLUS && !/^\/?(static|_doc)\//.test(src)) {
+ // src = await downloadFile(path) as string
+ // } else
+ // #ifdef MP || APP-PLUS
+ if (isBase64(path)) {
+ src = await base64ToPath(path)
+ }
+ // #endif
+ // #ifdef H5
+ if(useCORS) {
+ src = await pathToBase64(path)
+ }
+ // #endif
+
+ } catch (error) {
+ reject({
+ ...error,
+ src
+ })
+ }
+ uni.getImageInfo({
+ src,
+ success: (image) => {
+ const localReg = /^\.|^\/(?=[^\/])/;
+ // #ifdef MP-WEIXIN || MP-BAIDU || MP-QQ || MP-TOUTIAO
+ image.path = localReg.test(src) ? `/${image.path}` : image.path;
+ // #endif
+ // #ifdef H5
+ image.path = image.path.replace(/^\./, window.location.origin)
+ // #endif
+
+ if(this.canvas.createImage) {
+ const img = this.canvas.createImage()
+ img.src = image.path
+ img.onload = function() {
+ image.path = img
+ cache[path] = image
+ resolve(cache[path])
+ }
+ img.onerror = function(err) {
+ reject({err,path})
+ }
+ } else if (isDev) {
+ resolve(image)
+ } else {
+ cache[path] = image
+ resolve(cache[path])
+ }
+ },
+ fail(err) {
+ console.error({err, path})
+ reject({err,path})
+ }
+ })
+ }
+ })
+}
+
+export function downloadFile(url) {
+ if (!url) return Promise.reject({
+ err: 'no url'
+ })
+ return new Promise((resolve, reject) => {
+ if (cache[url]) {
+ return reject()
+ }
+ cache[url] = 1
+ uni.downloadFile({
+ url,
+ success(res) {
+ resolve(res)
+ },
+ fail(err) {
+ reject(err)
+ }
+ })
+ })
+}
+
+// #ifdef APP-PLUS
+const getLocalFilePath = (path) => {
+ if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path
+ .indexOf('_downloads') === 0) {
+ return path
+ }
+ if (path.indexOf('file://') === 0) {
+ return path
+ }
+ if (path.indexOf('/storage/emulated/0/') === 0) {
+ return path
+ }
+ if (path.indexOf('/') === 0) {
+ const localFilePath = plus.io.convertAbsoluteFileSystem(path)
+ if (localFilePath !== path) {
+ return localFilePath
+ } else {
+ path = path.substr(1)
+ }
+ }
+ return '_www/' + path
+}
+const getFile = (url) => {
+ return new Promise((resolve, rejcet) => {
+ plus.io.resolveLocalFileSystemURL(url, resolve, (err) => {
+ resolve(false)
+ })
+ })
+}
+const createFile = ({
+ fs,
+ url,
+ target,
+ name
+}) => {
+ return new Promise((resolve, reject) => {
+ plus.io.resolveLocalFileSystemURL(url, res1 => {
+ fs.root.getDirectory(target, {
+ create: true
+ }, fileEntry => {
+ const success = () => {
+ res1.remove()
+ resolve()
+ }
+ getFile(target + name).then(res => {
+ if (res) {
+ res.remove((res2) => {
+ res1.moveTo(fileEntry, name, success, reject)
+ })
+ }
+ res1.moveTo(fileEntry, name, success, reject)
+ })
+ })
+ }, reject)
+ })
+}
+export function useNvue(target, version, timeout) {
+ return new Promise((resolve, reject) => {
+ plus.io.requestFileSystem(plus.io.PRIVATE_DOC, async (fs) => {
+ try {
+ cache['lime-painter'] = 0
+ let names = ['uni.webview.1.5.3.js', 'painter.js', 'index.html']
+ let urls = ['https://gitee.com/dcloud/uni-app/raw/dev/dist/',
+ 'https://static-6d65bd90-8508-4d6c-abbc-a4ef5c8e49e7.bspapp.com/lime-painter/'
+ ]
+ const oldVersion = plus.storage.getItem('lime-painter')
+ const isFile = await getFile(`${target}${names[1]}`)
+ if (isFile && oldVersion && compareVersion(oldVersion, version) >= 0) {
+ resolve()
+ } else {
+ for (var i = 0; i < names.length; i++) {
+ const name = names[i]
+ const file = await downloadFile(urls[i >= 1 ? 1 : 0] + name)
+ await createFile({
+ fs,
+ url: file.tempFilePath,
+ target,
+ name: name.includes('uni.webview') ? 'uni.webview.js' : name
+ })
+ }
+ plus.storage.setItem('lime-painter', version)
+ cache['lime-painter'] = version
+ resolve()
+ }
+ } catch (e) {
+ let index = parseInt(timeout / 20)
+ while (!cache['lime-painter'] && index) {
+ await sleep(20)
+ index--
+ }
+ if (cache['lime-painter']) {
+ resolve()
+ } else {
+ reject(e)
+ }
+ }
+ }, reject)
+ })
+}
+// #endif
diff --git a/uni_modules/lime-painter/components/lime-painter/index.vue b/uni_modules/lime-painter/components/lime-painter/index.vue
new file mode 100644
index 0000000..49d20ae
--- /dev/null
+++ b/uni_modules/lime-painter/components/lime-painter/index.vue
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/uni_modules/lime-painter/package.json b/uni_modules/lime-painter/package.json
new file mode 100644
index 0000000..600dc4b
--- /dev/null
+++ b/uni_modules/lime-painter/package.json
@@ -0,0 +1,95 @@
+{
+ "id": "lime-painter",
+ "displayName": "海报画板",
+ "version": "1.9.3.5",
+ "description": "一款canvas海报组件,更优雅的海报生成方案",
+ "keywords": [
+ "海报",
+ "canvas",
+ "生成海报",
+ "生成二维码",
+ "JSON"
+],
+ "repository": "https://gitee.com/liangei/lime-painter",
+ "engines": {
+ "HBuilderX": "^3.4.14"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": "305716444"
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "u",
+ "Edge": "u",
+ "Firefox": "u",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ },
+ "name": "lime-painter",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/uni_modules/lime-painter/readme.md b/uni_modules/lime-painter/readme.md
new file mode 100644
index 0000000..18e61ab
--- /dev/null
+++ b/uni_modules/lime-painter/readme.md
@@ -0,0 +1,911 @@
+# Painter 画板 测试版
+
+> uniapp 海报画板,更优雅的海报生成方案
+> [查看更多 站点 1](https://limeui.qcoon.cn/#/painter)
+> [查看更多 站点 2](http://liangei.gitee.io/limeui/#/painter)
+> Q 群:806744170
+
+## 平台兼容
+
+| H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ 小程序 | App |
+| --- | ---------- | ------------ | ---------- | ---------- | --------- | --- |
+| √ | √ | √ | 未测 | √ | √ | √ |
+
+## 安装
+在市场导入**[海报画板](https://ext.dcloud.net.cn/plugin?id=2389)uni_modules**版本的即可,无需`import`
+
+## 代码演示
+
+### 基本用法
+
+- 插件提供 JSON 及 XML 的方式绘制海报
+- 参考 css 块状流布局模拟 css schema。
+
+
+#### 方式一 XML
+
+- 提供`l-painter-view`、`l-painter-text`、`l-painter-image`、`l-painter-qrcode`四种类型组件
+- 通过 `css` 属性绘制样式,与 style 使用方式保持一致。
+```html
+
+ //如果使用XML出现顺序错乱,可使用`template` 等所有变量完成再显示
+
+
+
+
+
+
+```
+
+#### 方式二 JSON
+
+- 在 json 里四种类型组件的`type`为`view`、`text`、`image`、`qrcode`
+- 通过 `board` 设置海报所需的 JSON 数据进行绘制或`ref`获取组件实例调用组件内的`render(json)`
+- 所有类型的 schema 都具有`css`字段,css 的 key 值使用**驼峰**如:`lineHeight`
+
+```html
+
+```
+
+```js
+data() {
+ return {
+ poster: {
+ css: {
+ // 根节点若无尺寸,自动获取父级节点
+ width: '750rpx'
+ },
+ views: [
+ {
+ css: {
+ background: "#07c160",
+ height: "120rpx",
+ width: "120rpx",
+ display: "inline-block"
+ },
+ type: "view"
+ },
+ {
+ css: {
+ background: "#1989fa",
+ height: "120rpx",
+ width: "120rpx",
+ borderTopRightRadius: "60rpx",
+ borderBottomLeftRadius: "60rpx",
+ display: "inline-block",
+ margin: "0 30rpx"
+ },
+ views: [],
+ type: "view"
+ },
+ {
+ css: {
+ background: "#ff9d00",
+ height: "120rpx",
+ width: "120rpx",
+ borderRadius: "50%",
+ display: "inline-block"
+ },
+ views: [],
+ type: "view"
+ },
+ ]
+ }
+ }
+}
+```
+
+### View 容器
+
+- 类似于 `div` 可以嵌套承载更多的 view、text、image,qrcode 共同构建一颗完整的节点树
+- 在 JSON 里具有 `views` 的数组字段,用于嵌套承载节点。
+
+#### 方式一 XML
+
+```html
+
+
+
+
+
+
+```
+
+#### 方式二 JSON
+
+```js
+{
+ css: {},
+ views: [
+ {
+ type: 'view',
+ css: {
+ background: '#f0f0f0',
+ paddingTop: '100rpx'
+ },
+ views: [
+ {
+ type: 'view',
+ css: {
+ background: '#d9d9d9',
+ width: '33.33%',
+ height: '100rpx',
+ display: 'inline-block'
+ }
+ },
+ {
+ type: 'view',
+ css: {
+ background: '#bfbfbf',
+ width: '66.66%',
+ height: '100rpx',
+ display: 'inline-block'
+ }
+ }
+ ],
+
+ }
+ ]
+}
+```
+
+### Text 文本
+
+- 通过 `text` 属性填写文本内容。
+- 支持`\n`换行符
+- 支持省略号,使用 css 的`line-clamp`设置行数,当文字内容超过会显示省略号。
+- 支持`text-decoration`
+
+#### 方式一 XML
+
+```html
+
+
+
+
+
+
+
+
+```
+
+#### 方式二 JSON
+
+```js
+// 基础用法
+{
+ type: 'text',
+ text: '登鹳雀楼\n白日依山尽,黄河入海流\n欲穷千里目,更上一层楼',
+},
+{
+ type: 'text',
+ text: '登鹳雀楼\n白日依山尽,黄河入海流\n欲穷千里目,更上一层楼',
+ css: {
+ // 设置居中对齐
+ textAlign: 'center',
+ // 设置中划线
+ textDecoration: 'line-through'
+ }
+},
+{
+ type: 'text',
+ text: '登鹳雀楼\n白日依山尽,黄河入海流\n欲穷千里目,更上一层楼',
+ css: {
+ // 设置右对齐
+ textAlign: 'right',
+ }
+},
+{
+ type: 'text',
+ text: '登鹳雀楼\n白日依山尽,黄河入海流\n欲穷千里目,更上一层楼',
+ css: {
+ // 设置行数,超出显示省略号
+ lineClamp: 3,
+ // 渐变文字
+ background: 'linear-gradient(,#ff971b 0%, #1989fa 100%)',
+ backgroundClip: 'text'
+ }
+}
+```
+
+### Image 图片
+
+- 通过 `src` 属性填写图片路径。
+- 图片路径支持:网络图片,本地 static 里的图片路径,缓存路径
+- 通过 `css` 的 `object-fit`属性可以设置图片的填充方式,可选值见下方 CSS 表格。
+- 通过 `css` 的 `object-position`配合 `object-fit` 可以设置图片的对齐方式,类似于`background-position`,详情见下方 CSS 表格。
+- 使用网络图片时:小程序需要去公众平台配置 [downloadFile](https://mp.weixin.qq.com/) 域名
+- 使用网络图片时:**H5 和 Nvue 需要决跨域问题**
+
+#### 方式一 XML
+
+```html
+
+
+
+
+
+
+
+
+
+```
+
+#### 方式二 JSON
+
+```js
+// 基础用法
+{
+ type: 'image',
+ src: 'https://m.360buyimg.com/babel/jfs/t1/196317/32/13733/288158/60f4ea39E6fb378ed/d69205b1a8ed3c97.jpg',
+ css: {
+ width: '200rpx',
+ height: '200rpx'
+ }
+},
+// 填充方式
+// css objectFit 设置 填充方式 见下方表格
+{
+ type: 'image',
+ src: 'https://m.360buyimg.com/babel/jfs/t1/196317/32/13733/288158/60f4ea39E6fb378ed/d69205b1a8ed3c97.jpg',
+ css: {
+ width: '200rpx',
+ height: '200rpx',
+ objectFit: 'contain'
+ }
+},
+// css objectPosition 设置 图片的对齐方式
+{
+ type: 'image',
+ src: 'https://m.360buyimg.com/babel/jfs/t1/196317/32/13733/288158/60f4ea39E6fb378ed/d69205b1a8ed3c97.jpg',
+ css: {
+ width: '200rpx',
+ height: '200rpx',
+ objectFit: 'contain',
+ objectPosition: '50% 50%'
+ }
+}
+```
+
+### Qrcode 二维码
+
+- 通过`text`属性填写需要生成二维码的文本。
+- 通过 `css` 里的 `color` 可设置生成码点的颜色。
+- 通过 `css` 里的 `background`可设置背景色。
+- 通过 `css `里的 `width`、`height`设置尺寸。
+
+#### 方式一 XML
+
+```html
+
+
+
+```
+
+#### 方式二 JSON
+
+```js
+{
+ type: 'qrcode',
+ text: 'limeui.qcoon.cn',
+ css: {
+ width: '200rpx',
+ height: '200rpx',
+ }
+}
+```
+
+### 生成图片
+
+- 1、通过设置`isCanvasToTempFilePath`自动生成图片并在 `@success` 事件里接收海报临时路径
+- 2、通过调用内部方法生成图片:
+
+```html
+...code
+```
+
+```js
+this.$refs.painter.canvasToTempFilePathSync({
+ fileType: "jpg",
+ // 如果返回的是base64是无法使用 saveImageToPhotosAlbum,需要设置 pathType为url
+ pathType: 'url',
+ quality: 1,
+ success: (res) => {
+ console.log(res.tempFilePath);
+ // 非H5 保存到相册
+ // H5 提示用户长按图另存
+ uni.saveImageToPhotosAlbum({
+ filePath: res.tempFilePath,
+ success: function () {
+ console.log('save success');
+ }
+ });
+ },
+});
+```
+
+### 主动调用方式
+
+- 通过获取组件实例内部的`render`函数 传递`JSON`即可
+
+```html
+
+```
+
+```js
+// 渲染
+this.$refs.painter.render(jsonSchema);
+// 生成图片
+this.$refs.painter.canvasToTempFilePathSync({
+ fileType: "jpg",
+ // 如果返回的是base64是无法使用 saveImageToPhotosAlbum,需要设置 pathType为url
+ pathType: 'url',
+ quality: 1,
+ success: (res) => {
+ console.log(res.tempFilePath);
+ // 非H5 保存到相册
+ uni.saveImageToPhotosAlbum({
+ filePath: res.tempFilePath,
+ success: function () {
+ console.log('save success');
+ }
+ });
+ },
+});
+```
+
+
+### H5跨域
+- 一般是需要后端或管理OSS资源的大佬处理
+- 一般OSS的处理方式:
+
+1、设置来源
+```cmd
+*
+```
+
+2、允许Methods
+```html
+GET
+```
+
+3、允许Headers
+```html
+access-control-allow-origin:*
+```
+
+4、最后如果还是不行,可试下给插件设置`useCORS`
+```html
+
+```
+
+
+
+### 海报示例
+
+- 提供一份示例,只把插件当成生成图片的工具,非必要不要在弹窗里使用。
+- 通过设置`isCanvasToTempFilePath`主动生成图片,再由 `@success` 事件接收海报临时路径
+- 设置`custom-style="position: fixed; left: 200%"`样式把画板移到屏幕之外,达到隐藏画板的效果。
+- **注意**:受平台影响海报画板最好不要隐藏,可能会无法生成图片。
+
+#### 方式一 XML
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+```js
+data() {
+ return {
+ path: ''
+ }
+}
+```
+
+#### 方式二 JSON
+
+```html
+
+
+```
+
+```js
+data() {
+ return {
+ path: '',
+ poster: {
+ css: {
+ width: "750rpx",
+ paddingBottom: "40rpx",
+ background: "linear-gradient(,#000 0%, #ff5000 100%)"
+ },
+ views: [
+ {
+ src: "https://fastly.jsdelivr.net/gh/liangei/image@latest/avatar-1.jpeg",
+ type: "image",
+ css: {
+ background: "#fff",
+ objectFit: "cover",
+ marginLeft: "40rpx",
+ marginTop: "40rpx",
+ width: "84rpx",
+ border: "2rpx solid #fff",
+ boxSizing: "border-box",
+ height: "84rpx",
+ borderRadius: "50%"
+ }
+ },
+ {
+ type: "view",
+ css: {
+ marginTop: "40rpx",
+ paddingLeft: "20rpx",
+ display: "inline-block"
+ },
+ views: [
+ {
+ text: "隔壁老王",
+ type: "text",
+ css: {
+ display: "block",
+ paddingBottom: "10rpx",
+ color: "#fff",
+ fontSize: "32rpx",
+ fontWeight: "bold"
+ }
+ },
+ {
+ text: "为您挑选了一个好物",
+ type: "text",
+ css: {
+ color: "rgba(255,255,255,.7)",
+ fontSize: "24rpx"
+ },
+ }
+ ],
+ },
+ {
+ css: {
+ marginLeft: "40rpx",
+ marginTop: "30rpx",
+ padding: "32rpx",
+ boxSizing: "border-box",
+ background: "#fff",
+ borderRadius: "16rpx",
+ width: "670rpx",
+ boxShadow: "0 20rpx 58rpx rgba(0,0,0,.15)"
+ },
+ views: [
+ {
+ src: "https://m.360buyimg.com/babel/jfs/t1/196317/32/13733/288158/60f4ea39E6fb378ed/d69205b1a8ed3c97.jpg",
+ type: "image",
+ css: {
+ objectFit: "cover",
+ objectPosition: "50% 50%",
+ width: "606rpx",
+ height: "606rpx"
+ },
+ }, {
+ css: {
+ marginTop: "32rpx",
+ color: "#FF0000",
+ fontWeight: "bold",
+ fontSize: "28rpx",
+ lineHeight: "1em"
+ },
+ views: [{
+ text: "¥",
+ type: "text",
+ css: {
+ verticalAlign: "bottom"
+ },
+ }, {
+ text: "39",
+ type: "text",
+ css: {
+ verticalAlign: "bottom",
+ fontSize: "58rpx"
+ },
+ }, {
+ text: ".39",
+ type: "text",
+ css: {
+ verticalAlign: "bottom"
+ },
+ }, {
+ text: "¥59.99",
+ type: "text",
+ css: {
+ verticalAlign: "bottom",
+ paddingLeft: "10rpx",
+ fontWeight: "normal",
+ textDecoration: "line-through",
+ color: "#999999"
+ }
+ }],
+
+ type: "view"
+ }, {
+ css: {
+ marginTop: "32rpx",
+ fontSize: "26rpx",
+ color: "#8c5400"
+ },
+ views: [{
+ text: "自营",
+ type: "text",
+ css: {
+ color: "#212121",
+ background: "#ffb400"
+ },
+ }, {
+ text: "30天最低价",
+ type: "text",
+ css: {
+ marginLeft: "16rpx",
+ background: "#fff4d9",
+ textDecoration: "line-through"
+ },
+ }, {
+ text: "满减优惠",
+ type: "text",
+ css: {
+ marginLeft: "16rpx",
+ background: "#fff4d9"
+ },
+ }, {
+ text: "超高好评",
+ type: "text",
+ css: {
+ marginLeft: "16rpx",
+ background: "#fff4d9"
+ },
+
+ }],
+
+ type: "view"
+ }, {
+ css: {
+ marginTop: "30rpx"
+ },
+ views: [
+ {
+ text: "360儿童电话手表9X 智能语音问答定位支付手表 4G全网通20米游泳级防水视频通话拍照手表男女孩星空蓝",
+ type: "text",
+ css: {
+ paddingRight: "32rpx",
+ boxSizing: "border-box",
+ lineClamp: 2,
+ color: "#333333",
+ lineHeight: "1.8em",
+ fontSize: "36rpx",
+ width: "478rpx"
+ },
+ }, {
+ text: "limeui.qcoon.cn",
+ type: "qrcode",
+ css: {
+ width: "128rpx",
+ height: "128rpx",
+ },
+
+ }],
+ type: "view"
+ }],
+ type: "view"
+ }
+ ]
+ }
+ }
+}
+```
+
+### Nvue
+- 必须为HBX 3.4.11及以上
+
+
+### 原生小程序
+
+- 插件里的`painter.js`支持在原生小程序中使用
+- new Painter 之后在`source`里传入 JSON
+- 再调用`render`绘制海报
+- 如需生成图片,请查看微信小程序 cavnas 的[canvasToTempFilePath](https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html)
+
+```html
+
+```
+
+```js
+import { Painter } from "./painter";
+page({
+ data: {
+ poster: {
+ css: {
+ width: "750rpx",
+ },
+ views: [
+ {
+ type: "view",
+ css: {
+ background: "#d2d4c8",
+ paddingTop: "100rpx",
+ },
+ views: [
+ {
+ type: "view",
+ css: {
+ background: "#5f7470",
+ width: "33.33%",
+ height: "100rpx",
+ display: "inline-block",
+ },
+ },
+ {
+ type: "view",
+ css: {
+ background: "#889696",
+ width: "33.33%",
+ height: "100rpx",
+ display: "inline-block",
+ },
+ },
+ {
+ type: "view",
+ css: {
+ background: "#b8bdb5",
+ width: "33.33%",
+ height: "100rpx",
+ display: "inline-block",
+ },
+ },
+ ],
+ },
+ ],
+ },
+ },
+ async onLoad() {
+ const res = await this.getCentext();
+ const painter = new Painter(res);
+ // 返回计算布局后的整个内容尺寸
+ const { width, height } = await painter.source(this.data.poster);
+ // 得到计算后的尺寸后 可给canvas尺寸赋值,达到动态响应效果
+ // 渲染
+ await painter.render();
+ },
+ // 获取canvas 2d
+ // 非2d也可以使用这里只是举个例子
+ getCentext() {
+ return new Promise((resolve) => {
+ wx.createSelectorQuery()
+ .select(`#painter`)
+ .node()
+ .exec((res) => {
+ let { node: canvas } = res[0];
+ resolve({
+ canvas,
+ context: canvas.getContext("2d"),
+ width: canvas.width,
+ height: canvas.height,
+ pixelRatio: 2,
+ });
+ });
+ });
+ },
+});
+```
+
+### 旧版(1.6.x)更新
+
+- 由于 1.8.x 版放弃了以定位的方式,所以 1.6.x 版更新之后要每个样式都加上`position: absolute`
+- 旧版的 `image` mode 模式被放弃,使用`object-fit`
+- 旧版的 `isRenderImage` 改成 `is-canvas-to-temp-filePath`
+- 旧版的 `maxLines` 改成 `line-clamp`
+
+## API
+
+### Props
+
+| 参数 | 说明 | 类型 | 默认值 |
+| -------------------------- | ------------------------------------------------------------ | ---------------- | ------------ |
+| board | JSON 方式的海报元素对象集 | object | - |
+| css | 海报最外层的样式,可以理解为`body` | object | 参数请向下看 |
+| custom-style | canvas 自定义样式 | string | |
+| is-canvas-to-temp-filePath | 是否生成图片,在`@success`事件接收图片地址 | boolean | `false` |
+| after-delay | 生成图片错乱,可延时生成图片 | number | `100` |
+| type | canvas 类型,对微信头条支付宝小程序可有效,可选值:`2d`,`''` | string | `2d` |
+| file-type | 生成图片的后缀类型, 可选值:`png`、`jpg` | string | `png` |
+| path-type | 生成图片路径类型,可选值`url`、`base64` | string | `-` |
+| pixel-ratio | 生成图片的像素密度,默认为对应手机的像素密度,`nvue`无效 | number | `-` |
+| width | **废弃** 画板的宽度,一般只用于通过内部方法时加上 | number | `` |
+| height | **废弃** 画板的高度 ,同上 | number | `` |
+
+### css
+| 属性名 | 支持的值或类型 | 默认值 |
+| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
+| (min\max)width | 支持`%`、`rpx`、`px` | - |
+| height | 同上 | - |
+| color | `string` | - |
+| position | 定位,可选值:`absolute`、`fixed` | - |
+| ↳ left、top、right、bottom | 配合`position`才生效,支持`%`、`rpx`、`px` | - |
+| margin | 可简写或各方向分别写,如:`margin-top`,支持`auto`、`rpx`、`px` | - |
+| padding | 可简写或各方向分别写,支持`rpx`、`px` | - |
+| border | 可简写或各个值分开写:`border-width`、`border-style` 、`border-color`,简写请按顺序写 | - |
+| line-clamp | `number`,超过行数显示省略号 | - |
+| vertical-align | 文字垂直对齐,可选值:`bottom`、`top`、`middle` | `middle` |
+| line-height | 文字行高,支持`rpx`、`px`、`em` | `1.4em` |
+| font-weight | 文字粗细,可选值:`normal`、`bold` | `normal` |
+| font-size | 文字大小,`string`,支持`rpx`、`px` | `14px` |
+| text-decoration | 文本修饰,可选值:`underline` 、`line-through`、`overline` | - |
+| text-align | 文本水平对齐,可选值:`right` 、`center` | `left` |
+| display | 框类型,可选值:`block`、`inline-block`、`flex`、`none`,当为`none`时是不渲染该段, `flex`功能简陋。 | - |
+| flex | 配合 display: flex; 属性定义了在分配多余空间,目前只用为数值如: flex: 1 | - |
+| align-self | 配合 display: flex; 单个项目垂直轴对齐方式: `flex-start` `flex-end` `center` | `flex-start` |
+| justify-content | 配合 display: flex; 水平轴对齐方式: `flex-start` `flex-end` `center` | `flex-start` |
+| align-items | 配合 display: flex; 垂直轴对齐方式: `flex-start` `flex-end` `center` | `flex-start` |
+| border-radius | 圆角边框,支持`%`、`rpx`、`px` | - |
+| box-sizing | 可选值:`border-box` | - |
+| box-shadow | 投影 | - |
+| background(color) | 支持渐变,但必须写百分比!如:`linear-gradient(,#ff971b 0%, #ff5000 100%)`、`radial-gradient(#0ff 15%, #f0f 60%)`,目前 radial-gradient 渐变的圆心为元素中点,半径为最长边,不支持设置 | - |
+| background-clip | 文字渐变,配合`background`背景渐变,设置`background-clip: text` 达到文字渐变效果 | - |
+| background-image | view 元素背景:`url(src)`,若只是设置背景图,请不要设置`background-repeat` | - |
+| background-repeat | 设置是否及如何重复背景纹理,可选值:`repeat`、`repeat-x`、`repeat-y`、`no-repeat` | `repeat` |
+| [object-fit](https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-fit/) | 图片元素适应容器方式,类似于`mode`,可选值:`cover`、 `contain`、 `fill`、 `none` | - |
+| [object-position](https://developer.mozilla.org/zh-CN/docs/Web/CSS/object-position) | 图片的对齐方式,配合`object-fit`使用 | - |
+
+### 图片填充模式 object-fit
+
+| 名称 | 含义 |
+| ------- | ------------------------------------------------------ |
+| contain | 保持宽高缩放图片,使图片的长边能完全显示出来 |
+| cover | 保持宽高缩放图片,使图片的短边能完全显示出来,裁剪长边 |
+| fill | 拉伸图片,使图片填满元素 |
+| none | 保持图片原有尺寸 |
+
+### 事件 Events
+
+| 事件名 | 说明 | 返回值 |
+| -------- | ---------------------------------------------------------------- | ------ |
+| success | 生成图片成功,若使用`is-canvas-to-temp-filePath` 可以接收图片地址 | path |
+| fail | 生成图片失败 | error |
+| done | 绘制成功 | |
+| progress | 绘制进度 | number |
+
+### 内部函数 Ref
+| 事件名 | 说明 | 返回值 |
+| -------- | ---------------------------------------------------------------- | ------ |
+| render(object) | 渲染器,传入JSON 绘制海报 | promise |
+| [canvasToTempFilePath](https://uniapp.dcloud.io/api/canvas/canvasToTempFilePath.html#canvastotempfilepath)(object) | 把当前画布指定区域的内容导出生成指定大小的图片,并返回文件临时路径。 | |
+| canvasToTempFilePathSync(object) | 同步接口,同上 | |
+
+
+## 常见问题
+
+- 1、H5 端使用网络图片需要解决跨域问题。
+- 2、小程序使用网络图片需要去公众平台增加下载白名单!二级域名也需要配!
+- 3、H5 端生成图片是 base64,有时显示只有一半可以使用原生标签`
`
+- 4、发生保存图片倾斜变形或提示 native buffer exceed size limit 时,使用 pixel-ratio="2"参数,降分辨率。
+- 5、h5 保存图片不需要调接口,提示用户长按图片保存。
+- 6、画板不能隐藏,包括`v-if`,`v-show`、`display:none`、`opacity:0`,另外也不要把画板放在弹窗里。如果需要隐藏画板请设置 `custom-style="position: fixed; left: 200%"`
+- 7、微信小程序 canvas 2d **不支持真机调试**,请使用真机预览方式。
+- 8、微信小程序打开调试时可以生但并闭无法生成时,这种情况一般是没有在公众号配置download域名
+- 9、HBX 3.4.5之前的版本不支持vue3
+- 10、在微信开发工具上 canvas 层级最高无法zindex,并不影响真机
+- 11、请不要导入非uni_modules插件
+- 华为手机 APP 上无法生成图片,请使用 HBX2.9.11++(已过时,忽略这条)
+- IOS APP 请勿使用 HBX2.9.3.20201014 的版本!这个版本无法生成图片。(已过时,忽略这条)
+- 苹果微信 7.0.20 存在闪退和图片无法 onload 为微信 bug(已过时,忽略这条)
+
+## 打赏
+
+如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。
+
+
+
\ No newline at end of file
diff --git a/uni_modules/lime-painter/static/index.html b/uni_modules/lime-painter/static/index.html
new file mode 100644
index 0000000..be189ba
--- /dev/null
+++ b/uni_modules/lime-painter/static/index.html
@@ -0,0 +1,119 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uni_modules/lime-painter/static/painter.js b/uni_modules/lime-painter/static/painter.js
new file mode 100644
index 0000000..8773ea6
--- /dev/null
+++ b/uni_modules/lime-painter/static/painter.js
@@ -0,0 +1 @@
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Painter={})}(this,(function(t){"use strict";var e=function(){return e=Object.assign||function(t){for(var e,i=1,n=arguments.length;i0&&r[r.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]=360&&(s-=360);s<0&&(s+=360);if(0===(s=Math.round(s)))return{x0:Math.round(e/2)+n,y0:i+r,x1:Math.round(e/2)+n,y1:r};if(180===s)return{x0:Math.round(e/2)+n,y0:r,x1:Math.round(e/2)+n,y1:i+r};if(90===s)return{x0:n,y0:Math.round(i/2)+r,x1:e+n,y1:Math.round(i/2)+r};if(270===s)return{x0:e+n,y0:Math.round(i/2)+r,x1:n,y1:Math.round(i/2)+r};var a=Math.round(180*Math.asin(e/Math.sqrt(Math.pow(e,2)+Math.pow(i,2)))/Math.PI);if(s===a)return{x0:n,y0:i+r,x1:e+n,y1:r};if(s===180-a)return{x0:n,y0:r,x1:e+n,y1:i+r};if(s===180+a)return{x0:e+n,y0:r,x1:n,y1:i+r};if(s===360-a)return{x0:e+n,y0:i+r,x1:n,y1:r};var h=0,d=0,c=0,l=0;if(s180-a&&s<180||s>180&&s<180+a||s>360-a){var f=s*Math.PI/180,u=s360-a?i/2:-i/2,p=Math.tan(f)*u,g=s180-a&&s<180?e/2-p:-e/2-p;h=-(c=p+(v=Math.pow(Math.sin(f),2)*g)),d=-(l=u+v/Math.tan(f))}if(s>a&&s<90||s>90&&s<90+a||s>180+a&&s<270||s>270&&s<360-a){var v;f=(90-s)*Math.PI/180,p=s>a&&s<90||s>90&&s<90+a?e/2:-e/2,u=Math.tan(f)*p,g=s>a&&s<90||s>270&&s<360-a?i/2-u:-i/2-u;h=-(c=p+(v=Math.pow(Math.sin(f),2)*g)/Math.tan(f)),d=-(l=u+v)}return h=Math.round(h+e/2)+n,d=Math.round(i/2-d)+r,c=Math.round(c+e/2)+n,l=Math.round(i/2-l)+r,{x0:h,y0:d,x1:c,y1:l}}(r,t,e,i,n),a=s.x0,h=s.y0,d=s.x1,c=s.y1,l=o.createLinearGradient(a,h,d,c),f=r.match(/linear-gradient\((.+)\)/)[1],u=E(f.substring(f.indexOf(",")+1)),p=0;pt.length)&&(e=t.length);for(var i=0,n=new Array(e);i=t.length?{done:!0}:{done:!1,value:t[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _(t){return"number"==typeof t}function X(t){return"auto"===t||null===t}function N(t){return/%$/.test(t)}var V,G=0,q=function(){function t(){H(this,"elements",[]),H(this,"afterElements",[]),H(this,"beforeElements",[]),H(this,"ids",[]),H(this,"width",0),H(this,"height",0),H(this,"top",0),H(this,"left",0),H(this,"pre",null),H(this,"offsetX",0),H(this,"offsetY",0),G++,this.id=G}var e=t.prototype;return e.fixedBind=function(t,e){void 0===e&&(e=0),this.container=e?t.parent:t.root,this.container.fixedLine=this,this.fixedAdd(t)},e.fixedAdd=function(t){this.elements.push(t);var e=t.computedStyle.zIndex;(void 0===e?0:e)>=0?this.afterElements.push(t):this.beforeElements.push(t),this.refreshLayout()},e.bind=function(t){this.container=t.parent,this.container.line=null,this.container.lines?(this.container.lines.push(this),this.pre=this.getPreLine(),this.top=this.pre.top+this.pre.height,this.left=this.container.contentSize.left):(this.top=this.container.contentSize.top,this.left=this.container.contentSize.left,this.container.lines=[this]),this.isInline=t.isInline(),this.container.line=this,this.outerWidth=t.parent&&t.parent.contentSize.width?t.parent.contentSize.width:1/0,this.add(t)},e.getPreLine=function(){return this.container.lines[this.container.lines.length-2]},e.canIEnter=function(t){return this.outerWidth||t.parent&&t.parent.contentSize.width,!((100*t.offsetSize.width+100*this.width)/100>this.outerWidth)||(this.closeLine(),!1)},e.closeLine=function(){delete this.container.line},e.add=function(t){this.ids.includes(t.id)||(this.ids.push(t.id),this.elements.push(t),this.refreshWidthHeight(t))},e.refreshWidthHeight=function(t){t.offsetSize.height>this.height&&(this.height=t.offsetSize.height),this.width+=t.offsetSize.width||0,(this.container.lineMaxWidth||0)this[this.key.height]&&(this[this.key.height]=t.offsetSize[this.key.height]),this[this.key.width]+=t.offsetSize[this.key.width];var e=Math.min(this[this.key.width],this.container.contentSize[this.key.width]);(this.container.lineMaxWidth||0)1?0:"flex-end"===t.style.alignSelf?this.container.contentSize[this.key.contentHeight]-t.contentSize[this.key.height]:"center"===t.style.alignSelf?(this.container.contentSize[this.key.contentHeight]-t.contentSize[this.key.height])/2:0},n}(q),Z=v,K=g,et=p,it=y,nt=b,rt=x,ot=w,st=S,at=z,ht=0,dt={left:null,top:null,width:null,height:null},ct=function(){function t(t,e,i,n){var r=this;H(this,"id",ht++),H(this,"style",{left:null,top:null,width:null,height:null}),H(this,"computedStyle",{}),H(this,"originStyle",{}),H(this,"children",{}),H(this,"layoutBox",U({},dt)),H(this,"contentSize",U({},dt)),H(this,"clientSize",U({},dt)),H(this,"borderSize",U({},dt)),H(this,"offsetSize",U({},dt)),this.ctx=n,this.root=i,e&&(this.parent=e),this.name=t.name||t.type,this.attributes=this.getAttributes(t);var o=this.getComputedStyle(t,e&&e.computedStyle);this.isAbsolute=o.position==st,this.isFixed=o.position==at,this.originStyle=o,Object.keys(o).forEach((function(t){Object.defineProperty(r.style,t,{configurable:!0,enumerable:!0,get:function(){return o[t]},set:function(e){o[t]=e}})}));var s={contentSize:U({},this.contentSize),clientSize:U({},this.clientSize),borderSize:U({},this.borderSize),offsetSize:U({},this.offsetSize)};Object.keys(s).forEach((function(t){Object.keys(r[t]).forEach((function(e){Object.defineProperty(r[t],e,{configurable:!0,enumerable:!0,get:function(){return s[t][e]},set:function(i){s[t][e]=i}})}))})),this.computedStyle=this.style}var e=t.prototype;return e.add=function(t){t.parent=this,this.children[t.id]=t},e.getChildren=function(){var t=this;return Object.keys(this.children).map((function(e){return t.children[e]}))},e.getLineRect=function(t,e){var i={width:0,height:0},n=e?e.lines:this.parent&&this.parent.lines;return n&&n.find((function(e){return e.ids.includes(t)}))||i},e.getComputedStyle=function(t,e){var i=["color","fontSize","lineHeight","verticalAlign","fontWeight","textAlign"],n=t.css,r=void 0===n?{}:n,o=t.type,s=void 0===o?et:o,a=U({},k);if([K,Z,it].includes(s)&&!r.display&&(a.display=rt),e)for(var h=0;h=0&&l<0,Y=d>=0&&u<0;return i==o[0]&&(this[i].left=t.left+a+v+C+(U?2*-l:0),this[i].top=t.top+d+b+P+(Y?2*-u:0),this[i].width=t.width+(this[i].widthAdd?0:E),this[i].height=t.height+(this[i].heightAdd?0:H),this[i].widthAdd=E,this[i].heightAdd=H),i==o[1]&&(this[i].left=t.left+a+C+(U<0?-l:0),this[i].top=t.top+d+P+(Y?-u:0),this[i].width=t.width+v+m,this[i].height=t.height+b+S),i==o[2]&&(this[i].left=t.left+a+C/2+(U<0?-l:0),this[i].top=t.top+d+P/2+(Y?-u:0),this[i].width=t.width+v+m+C/2+A/2,this[i].height=t.height+b+S+L/2+P/2),i==o[3]&&(this[i].left=t.left+(U<0?-l:0),this[i].top=t.top+(Y?-u:0),this[i].width=t.width+v+m+C+A+a+l,this[i].height=t.height+b+S+L+P+u+d),this[i]},e.layoutBoxUpdate=function(t,e,i,n){var r=this;if(void 0===i&&(i=-1),"border-box"==e.boxSizing){var s=e||{},a=s.border,h=(a=void 0===a?{}:a).borderWidth,d=void 0===h?0:h,c=s.borderTop,l=(c=void 0===c?{}:c).borderTopWidth,f=void 0===l?d:l,u=s.borderBottom,p=(u=void 0===u?{}:u).borderBottomWidth,g=void 0===p?d:p,v=s.borderRight,y=(v=void 0===v?{}:v).borderRightWidth,b=void 0===y?d:y,x=s.borderLeft,m=(x=void 0===x?{}:x).borderLeftWidth,w=void 0===m?d:m,S=s.padding,z=(S=void 0===S?{}:S).paddingTop,M=void 0===z?0:z,B=S.paddingRight,k=void 0===B?0:B,I=S.paddingBottom,P=void 0===I?0:I,W=S.paddingLeft,R=void 0===W?0:W;i||(t.width-=R+k+b+w),1!==i||n||(t.height-=M+P+f+g)}this.layoutBox&&(o.forEach((function(i){return r.layoutBox[i]=r.getOffsetSize(t,e,i)})),this.layoutBox=Object.assign({},this.layoutBox,this.layoutBox.borderSize))},e.getBoxPosition2=function(){var t=this.computedStyle,e=this.fixedLine,i=this.lines,n=t.left,r=void 0===n?0:n,o=t.top,s=void 0===o?0:o,a=t.padding||{},h=a.paddingBottom,d=void 0===h?0:h,c=a.paddingRight,l=void 0===c?0:c,f=U({},this.contentSize,{left:r,top:s}),u=this.contentSize.top-this.offsetSize.top,p=this.contentSize.left-this.offsetSize.left;if(this.root.fixedLine&&!this.root.isDone){this.root.isDone=!0;for(var g,v=D(this.root.fixedLine.elements);!(g=v()).done;){var y=g.value;y.setPosition(y,this.root.offsetSize),y.getBoxPosition2()}}if(e)for(var b,x=D(e.elements);!(b=x()).done;){var m=b.value;m.setPosition(m,f),m.style.left+=r+p+l,m.style.top+=s+u+d,m.getBoxPosition2()}if(i)for(var w,S=D(i);!(w=S()).done;){w.value.layout(f.top+u,f.left+p)}return this.layoutBoxUpdate(f,t),this.layoutBox},e.getBoxState=function(t,e){return this.isBlock(t)||this.isBlock(e)},e.isBlock=function(t){return void 0===t&&(t=this),t&&t.style.display==nt},e.isFlex=function(t){return void 0===t&&(t=this),t&&t.style.display==ot},e.isInFlow=function(){return!(this.isAbsolute||this.isFixed)},e.inFlexBox=function(t){return void 0===t&&(t=this),!!t.isInFlow()&&(!!t.parent&&(!(!t.parent||t.parent.style.display!==ot)||void 0))},e.isInline=function(t){return void 0===t&&(t=this),t&&t.style.display==rt},e.contrastSize=function(t,e,i){var n=t;return i&&(n=Math.min(n,i)),e&&(n=Math.max(n,e)),n},e.measureText=function(t,e){var i=this.ctx.measureText(t),n=i.width,r=i.actualBoundingBoxAscent,o=i.actualBoundingBoxDescent;return{ascent:r,descent:o,width:n,fontHeight:r+o||.7*e+1}},e.getBoxWidthHeight=function(){var t=this,e=this.name,i=this.computedStyle,n=this.attributes,r=this.parent,o=void 0===r?{}:r,s=this.ctx,a=this.getChildren(),h=i.left,d=void 0===h?0:h,c=i.top,l=void 0===c?0:c,f=i.bottom,u=i.right,p=i.width,g=void 0===p?0:p,v=i.minWidth,y=i.maxWidth,b=i.minHeight,x=i.maxHeight,m=i.height,w=void 0===m?0:m,S=i.fontSize,z=void 0===S?14:S,M=i.fontWeight,B=i.fontFamily,k=i.fontStyle,I=i.position,P=i.lineClamp,W=i.lineHeight,R=i.padding,L=void 0===R?{}:R,O=i.margin,T=void 0===O?{}:O,F=i.border,j=(F=void 0===F?{}:F).borderWidth,C=void 0===j?0:j,E=i.borderRight,H=(E=void 0===E?{}:E).borderRightWidth,U=void 0===H?C:H,Y=i.borderLeft,$=(Y=void 0===Y?{}:Y).borderLeftWidth,D=void 0===$?C:$,_=o.contentSize&&o.contentSize.width,X=o.contentSize&&o.contentSize.height;if(N(g)&&_&&(g=A(g,_)),N(g)&&!_&&(g=null),N(w)&&X&&(w=A(w,X)),N(w)&&!X&&(w=null),N(v)&&_&&(v=A(v,_)),N(y)&&_&&(y=A(y,_)),N(b)&&X&&(b=A(b,X)),N(x)&&X&&(x=A(x,X)),i.padding&&_)for(var V in i.padding)Object.hasOwnProperty.call(i.padding,V)&&(i.padding[V]=A(i.padding[V],_));var G=L.paddingRight,J=void 0===G?0:G,tt=L.paddingLeft,it=void 0===tt?0:tt;if(i.margin&&[i.margin.marginLeft,i.margin.marginRight].includes("auto"))if(g){var nt=_&&_-g-J-it-D-U||0;i.margin.marginLeft==i.margin.marginRight?i.margin.marginLeft=i.margin.marginRight=nt/2:"auto"==i.margin.marginLeft?i.margin.marginLeft=nt:i.margin.marginRight=nt}else i.margin.marginLeft=i.margin.marginRight=0;var rt=T.marginRight,ot=void 0===rt?0:rt,at=T.marginLeft,ht={width:g,height:w,left:0,top:0},dt=it+J+D+U+(void 0===at?0:at)+ot;if(e==K&&!this.attributes.widths){var ct=n.text||"";s.save(),s.setFonts({fontFamily:B,fontSize:z,fontWeight:M,fontStyle:k});var lt=new Map;ct.split("\n").map((function(e){var i=e.split("").map((function(e){var i=lt.get(e);if(i)return i;var n=t.measureText(e,z).width;return lt.set(e,n),n})),n=t.measureText(e,z),r=n.fontHeight,o=n.ascent,s=n.descent;t.attributes.fontHeight=r,t.attributes.ascent=o,t.attributes.descent=s,t.attributes.widths||(t.attributes.widths=[]),t.attributes.widths.push({widths:i,total:i.reduce((function(t,e){return t+e}),0)})})),s.restore()}if(e==Z&&null==g){var ft=n.width,ut=n.height;ht.width=this.contrastSize(Math.round(ft*w/ut)||0,v,y),this.layoutBoxUpdate(ht,i,0)}if(e==K&&null==g){var pt=this.attributes.widths,gt=Math.max.apply(Math,pt.map((function(t){return t.total})));if(o&&_>0&&(gt>_||this.isBlock(this))&&!this.isAbsolute&&!this.isFixed)gt=_-dt;ht.width=this.contrastSize(gt,v,y),this.layoutBoxUpdate(ht,i,0)}if(e==K&&(o.style.flex||!this.attributes.lines)){var vt=this.attributes.widths.length;this.attributes.widths.forEach((function(t){return t.widths.reduce((function(t,e,i){return t+e>ht.width?(vt++,e):t+e}),0)})),vt=P&&vt>P?P:vt,this.attributes.lines=vt}if(e==Z&&null==w){var yt=n.width,bt=n.height;ht.height=this.contrastSize(A(ht.width*bt/yt)||0,b,x),this.layoutBoxUpdate(ht,i,1)}e==K&&null==w&&(W=A(W,z),ht.height=this.contrastSize(A(this.attributes.lines*W),b,x),this.layoutBoxUpdate(ht,i,1,!0)),o&&o.children&&_&&([et,K].includes(e)&&this.isFlex()||e==et&&this.isBlock(this)&&this.isInFlow())&&(ht.width=this.contrastSize(_-dt,v,y),this.layoutBoxUpdate(ht,i)),g&&!N(g)&&(ht.width=this.contrastSize(g,v,y),this.layoutBoxUpdate(ht,i,0)),w&&!N(w)&&(ht.height=this.contrastSize(ht.height,b,x),this.layoutBoxUpdate(ht,i,1));var xt=0;if(a.length){var mt=null;a.forEach((function(e,n){e.getBoxWidthHeight();var r=a[n+1];if(r&&r.isInFlow()&&(e.next=r),e.isInFlow()&&!e.inFlexBox()){var o=t.getBoxState(mt,e);t.line&&t.line.canIEnter(e)&&!o?t.line.add(e):(new q).bind(e),mt=e}else e.inFlexBox()?t.line&&(t.line.canIEnter(e)||"nowrap"==i.flexWrap)?t.line.add(e):(new Q).bind(e):e.isFixed?t.root.fixedLine?t.root.fixedLine.fixedAdd(e):(new q).fixedBind(e):t.fixedLine?t.fixedLine.fixedAdd(e):(new q).fixedBind(e,1)})),this.lines&&(xt=this.lines.reduce((function(t,e){return t+e.height}),0))}var wt=0,St=0;if(!g&&(this.isAbsolute||this.isFixed)&&_){var zt=I==st?_:this.root.width,Mt=zt-(N(d)?A(d,zt):d)-(N(u)?A(u,zt):u);wt=i.left?Mt:this.lineMaxWidth}if(!w&&(null!=l?l:this.isAbsolute||this.isFixed&&X)){var Bt=I==st?X:this.root.height,kt=Bt-(N(l)?A(l,Bt):l)-(N(f)?A(f,Bt):f);St=i.top?kt:0}if(g&&!N(g)||ht.width||(ht.width=wt||this.contrastSize((this.isBlock(this)&&!this.isInFlow()?_||o.lineMaxWidth:this.lineMaxWidth)||this.lineMaxWidth,v,y),this.layoutBoxUpdate(ht,i,0)),w||!xt&&!St||(ht.height=St||this.contrastSize(xt,b,x),this.layoutBoxUpdate(ht,i)),i.borderRadius&&this.borderSize&&this.borderSize.width)for(var V in i.borderRadius)Object.hasOwnProperty.call(i.borderRadius,V)&&(i.borderRadius[V]=A(i.borderRadius[V],this.borderSize.width));return this.layoutBox},e.layout=function(){return this.getBoxWidthHeight(),this.root.offsetSize=this.offsetSize,this.getBoxPosition2(),this.offsetSize},t}(),lt=function(){var t,e,i,n,r,o,s=[0,11,15,19,23,27,31,16,18,20,22,24,26,28,20,22,24,24,26,28,28,22,24,24,26,26,28,28,24,24,26,26,26,28,28,24,26,26,26,28,28],a=[3220,1468,2713,1235,3062,1890,2119,1549,2344,2936,1117,2583,1330,2470,1667,2249,2028,3780,481,4011,142,3098,831,3445,592,2517,1776,2234,1951,2827,1070,2660,1345,3177],h=[30660,29427,32170,30877,26159,25368,27713,26998,21522,20773,24188,23371,17913,16590,20375,19104,13663,12392,16177,14854,9396,8579,11994,11245,5769,5054,7399,6608,1890,597,3340,2107],d=[1,0,19,7,1,0,16,10,1,0,13,13,1,0,9,17,1,0,34,10,1,0,28,16,1,0,22,22,1,0,16,28,1,0,55,15,1,0,44,26,2,0,17,18,2,0,13,22,1,0,80,20,2,0,32,18,2,0,24,26,4,0,9,16,1,0,108,26,2,0,43,24,2,2,15,18,2,2,11,22,2,0,68,18,4,0,27,16,4,0,19,24,4,0,15,28,2,0,78,20,4,0,31,18,2,4,14,18,4,1,13,26,2,0,97,24,2,2,38,22,4,2,18,22,4,2,14,26,2,0,116,30,3,2,36,22,4,4,16,20,4,4,12,24,2,2,68,18,4,1,43,26,6,2,19,24,6,2,15,28,4,0,81,20,1,4,50,30,4,4,22,28,3,8,12,24,2,2,92,24,6,2,36,22,4,6,20,26,7,4,14,28,4,0,107,26,8,1,37,22,8,4,20,24,12,4,11,22,3,1,115,30,4,5,40,24,11,5,16,20,11,5,12,24,5,1,87,22,5,5,41,24,5,7,24,30,11,7,12,24,5,1,98,24,7,3,45,28,15,2,19,24,3,13,15,30,1,5,107,28,10,1,46,28,1,15,22,28,2,17,14,28,5,1,120,30,9,4,43,26,17,1,22,28,2,19,14,28,3,4,113,28,3,11,44,26,17,4,21,26,9,16,13,26,3,5,107,28,3,13,41,26,15,5,24,30,15,10,15,28,4,4,116,28,17,0,42,26,17,6,22,28,19,6,16,30,2,7,111,28,17,0,46,28,7,16,24,30,34,0,13,24,4,5,121,30,4,14,47,28,11,14,24,30,16,14,15,30,6,4,117,30,6,14,45,28,11,16,24,30,30,2,16,30,8,4,106,26,8,13,47,28,7,22,24,30,22,13,15,30,10,2,114,28,19,4,46,28,28,6,22,28,33,4,16,30,8,4,122,30,22,3,45,28,8,26,23,30,12,28,15,30,3,10,117,30,3,23,45,28,4,31,24,30,11,31,15,30,7,7,116,30,21,7,45,28,1,37,23,30,19,26,15,30,5,10,115,30,19,10,47,28,15,25,24,30,23,25,15,30,13,3,115,30,2,29,46,28,42,1,24,30,23,28,15,30,17,0,115,30,10,23,46,28,10,35,24,30,19,35,15,30,17,1,115,30,14,21,46,28,29,19,24,30,11,46,15,30,13,6,115,30,14,23,46,28,44,7,24,30,59,1,16,30,12,7,121,30,12,26,47,28,39,14,24,30,22,41,15,30,6,14,121,30,6,34,47,28,46,10,24,30,2,64,15,30,17,4,122,30,29,14,46,28,49,10,24,30,24,46,15,30,4,18,122,30,13,32,46,28,48,14,24,30,42,32,15,30,20,4,117,30,40,7,47,28,43,22,24,30,10,67,15,30,19,6,118,30,18,31,47,28,34,34,24,30,20,61,15,30],c=[255,0,1,25,2,50,26,198,3,223,51,238,27,104,199,75,4,100,224,14,52,141,239,129,28,193,105,248,200,8,76,113,5,138,101,47,225,36,15,33,53,147,142,218,240,18,130,69,29,181,194,125,106,39,249,185,201,154,9,120,77,228,114,166,6,191,139,98,102,221,48,253,226,152,37,179,16,145,34,136,54,208,148,206,143,150,219,189,241,210,19,92,131,56,70,64,30,66,182,163,195,72,126,110,107,58,40,84,250,133,186,61,202,94,155,159,10,21,121,43,78,212,229,172,115,243,167,87,7,112,192,247,140,128,99,13,103,74,222,237,49,197,254,24,227,165,153,119,38,184,180,124,17,68,146,217,35,32,137,46,55,63,209,91,149,188,207,205,144,135,151,178,220,252,190,97,242,86,211,171,20,42,93,158,132,60,57,83,71,109,65,162,31,45,67,216,183,123,164,118,196,23,73,236,127,12,111,246,108,161,59,82,41,157,85,170,251,96,134,177,187,204,62,90,203,89,95,176,156,169,160,81,11,245,22,235,122,117,44,215,79,174,213,233,230,231,173,232,116,214,244,234,168,80,88,175],l=[1,2,4,8,16,32,64,128,29,58,116,232,205,135,19,38,76,152,45,90,180,117,234,201,143,3,6,12,24,48,96,192,157,39,78,156,37,74,148,53,106,212,181,119,238,193,159,35,70,140,5,10,20,40,80,160,93,186,105,210,185,111,222,161,95,190,97,194,153,47,94,188,101,202,137,15,30,60,120,240,253,231,211,187,107,214,177,127,254,225,223,163,91,182,113,226,217,175,67,134,17,34,68,136,13,26,52,104,208,189,103,206,129,31,62,124,248,237,199,147,59,118,236,197,151,51,102,204,133,23,46,92,184,109,218,169,79,158,33,66,132,21,42,84,168,77,154,41,82,164,85,170,73,146,57,114,228,213,183,115,230,209,191,99,198,145,63,126,252,229,215,179,123,246,241,255,227,219,171,75,150,49,98,196,149,55,110,220,165,87,174,65,130,25,50,100,200,141,7,14,28,56,112,224,221,167,83,166,81,162,89,178,121,242,249,239,195,155,43,86,172,69,138,9,18,36,72,144,61,122,244,245,247,243,251,235,203,139,11,22,44,88,176,125,250,233,207,131,27,54,108,216,173,71,142,0],f=[],u=[],p=[],g=[],v=[],y=2;function b(t,e){var i;t>e&&(i=t,t=e,e=i),i=e,i*=e,i+=e,i>>=1,g[i+=t]=1}function x(t,i){var n;for(p[t+e*i]=1,n=-2;n<2;n++)p[t+n+e*(i-2)]=1,p[t-2+e*(i+n+1)]=1,p[t+2+e*(i+n)]=1,p[t+n+1+e*(i+2)]=1;for(n=0;n<2;n++)b(t-1,i+n),b(t+1,i-n),b(t-n,i-1),b(t+n,i+1)}function m(t){for(;t>=255;)t=((t-=255)>>8)+(255&t);return t}var w=[];function S(t,e,i,n){var r,o,s;for(r=0;re&&(i=t,t=e,e=i),i=e,i+=e*e,i>>=1,g[i+=t]}function M(t){var i,n,r,o;switch(t){case 0:for(n=0;n>1&1,i=0;i=5&&(i+=3+v[e]-5);for(e=3;et||3*v[e-3]>=4*v[e]||3*v[e+3]>=4*v[e])&&(i+=40);return i}function k(){var t,i,n,r,o,s=0,a=0;for(i=0;ie*e;)h-=e*e,d++;for(s+=10*d,t=0;t1)for(W=s[t],I=e-7;;){for(B=e-7;B>W-3&&(x(B,I),!(B6)for(W=a[t-7],P=17,B=0;B<6;B++)for(I=0;I<3;I++,P--)1&(P>11?t>>P-12:W>>P)?(p[5-B+e*(2-I+e-11)]=1,p[2-I+e-11+e*(5-B)]=1):(b(5-B,2-I+e-11),b(2-I+e-11,5-B));for(I=0;I=(B=r*(i+n)+n)-2&&(R=B-2,t>9&&R--),L=R,t>9){for(f[L+2]=0,f[L+3]=0;L--;)W=f[L],f[L+3]|=255&W<<4,f[L+2]=W>>4;f[2]|=255&R<<4,f[1]=R>>4,f[0]=64|R>>12}else{for(f[L+1]=0,f[L+2]=0;L--;)W=f[L],f[L+2]|=255&W<<4,f[L+1]=W>>4;f[1]|=255&R<<4,f[0]=64|R>>4}for(L=R+3-(t<10);L0;O--)w[O]=w[O]?w[O-1]^l[m(c[w[O]]+L)]:w[O-1];w[0]=l[m(c[w[0]]+L)]}for(L=0;L<=o;L++)w[L]=c[w[L]];for(P=B,I=0,L=0;L>=1)1&I&&(p[e-1-P+8*e]=1,P<6?p[8+e*P]=1:p[8+e*(P+1)]=1);for(P=0;P<7;P++,I>>=1)1&I&&(p[8+e*(e-7+P)]=1,P?p[6-P+8*e]=1:p[7+8*e]=1);return p}(v)},utf16to8:function(t){var e,i,n,r;for(e="",n=t.length,i=0;i=1&&r<=127?e+=t.charAt(i):r>2047?(e+=String.fromCharCode(224|r>>12&15),e+=String.fromCharCode(128|r>>6&63),e+=String.fromCharCode(128|r>>0&63)):(e+=String.fromCharCode(192|r>>6&31),e+=String.fromCharCode(128|r>>0&63));return e},draw:function(t,i,n,r,o){i.drawView(n,r);var s=i.ctx,a=n.contentSize,h=a.width,d=a.height,c=a.left,l=a.top;r.borderRadius,r.backgroundColor;var f=r.color,u=void 0===f?"#000000":f;r.border,n.contentSize.left,n.borderSize.left,n.contentSize.top,n.borderSize.top;if(y=o||y,s){s.save(),i.setOpacity(r),i.setTransform(n,r);var p=Math.min(h,d);t=this.utf16to8(t);var g=this.getFrame(t),v=p/e;s.setFillStyle(u);for(var b=0;b=s||"cover"==n&&o=s)&&(a=e.width/i.width);var h=i.width*a,d=i.height*a,c=r||[],l=c[0],f=c[1],u=/^\d+px|rpx$/.test(l)?A(l,e.width):(e.width-h)*(F(l)?A(l,1):{left:0,center:.5,right:1}[l||"center"]),p=/^\d+px|rpx$/.test(f)?A(f,e.height):(e.height-d)*(F(f)?A(f,1):{top:0,center:.5,bottom:1}[f||"center"]),g=function(t,e){return[(t-u)/a,(e-p)/a]},v=g(0,0),y=v[0],b=v[1],x=g(e.width,e.height),m=x[0],w=x[1];return{sx:Math.max(y,0),sy:Math.max(b,0),sw:Math.min(m-y,i.width),sh:Math.min(w-b,i.height),dx:Math.max(u,0),dy:Math.max(p,0),dw:Math.min(h,e.width),dh:Math.min(d,e.height)}}({objectFit:u,objectPosition:v},e.contentSize,t),o=n.sx,s=n.sy,a=n.sh,h=n.sw,d=n.dx,c=n.dy,l=n.dh,f=n.dw;R==r.MP_BAIDU?i.drawImage(t.src,d+w,c+S,f,l,o,s,h,a):i.drawImage(t.src,o,s,h,a,d+w,c+S,f,l)}else i.drawImage(t.src,w,S,x,m)},P=function(){i.restore(),L.drawView(e,o,!1,!0,!1),h(1)},W=function(t){I(t),P()},W(t),[2]}))}))}))];case 1:return h.sent(),[2]}}))}))},t.prototype.drawText=function(t,e,i,n){var r=this.ctx,o=e.borderSize,s=e.contentSize,a=e.left,h=e.top,d=s.width,c=s.height,l=s.left-o.left,f=s.top-o.top,u=i.color,p=void 0===u?"#000000":u,g=i.lineHeight,v=void 0===g?"1.4em":g,y=i.fontSize,b=void 0===y?14:y,x=i.fontWeight,m=i.fontFamily,w=i.fontStyle,S=i.textAlign,z=void 0===S?"left":S,M=i.verticalAlign,B=void 0===M?yt:M,k=i.backgroundColor,I=i.lineClamp,P=i.backgroundClip,W=i.textShadow,R=i.textDecoration;if(this.drawView(e,i,P!=ut),v=A(v,b),t){r.save(),this.setShadow({boxShadow:W}),a+=l,h+=f;var L=n.fontHeight,O=n.descent+n.ascent;switch(r.setFonts({fontFamily:m,fontSize:b,fontWeight:x,fontStyle:w}),r.setTextBaseline(O?yt:B),r.setTextAlign(z),P?this.setBackground(k,d,c,a,h):r.setFillStyle(p),z){case xt:break;case mt:a+=.5*d;break;case wt:a+=d}var T=n.lines*v,F=Math.ceil((c-T)/2);switch(F<0&&(F=0),B){case vt:break;case yt:h+=F;break;case bt:h+=2*F}var j=(v-L)/2,C=function(t){var e=r.measureText(t),i=e.actualBoundingBoxDescent,n=void 0===i?0:i,o=e.actualBoundingBoxAscent;return B==vt?{fix:O?void 0===o?0:o:0,lineY:O?2*j:j}:B==yt?{fix:O?v/2+n/4:v/2,lineY:(v-L)/2}:B==bt?{fix:O?v-n:v+j,lineY:0}:{fix:0,height:0,lineY:0}},E=function(t,e,i){var o=t;switch(z){case xt:o+=i;break;case mt:o=(t-=i/2)+i;break;case wt:o=t,t-=i}if(R){r.setLineWidth(b/13),r.beginPath();var s=.1*n.fontHeight;/\bunderline\b/.test(R)&&(r.moveTo(t,e+s),r.lineTo(o,e+s)),/\boverline\b/.test(R)&&(O||(e-=j),r.moveTo(t,e-n.fontHeight-s),r.lineTo(o,e-n.fontHeight-s)),/\bline-through\b/.test(R)&&(r.moveTo(t,e-.5*n.fontHeight),r.lineTo(o,e-.5*n.fontHeight)),r.closePath(),r.setStrokeStyle(p),r.stroke()}};if(!n.widths||1==n.widths.length&&n.widths[0].total<=s.width){var H=C(t),U=H.fix,Y=H.lineY;return r.fillText(t,a,h+U),E(a,(h+=v)-Y,n&&n.widths&&n.widths[0].total||n.text),r.restore(),void this.setBorder(e,i)}for(var $=t.split(""),D=h,_=a,X="",N=0,V=0;V<=$.length;V++){var G=$[V]||"",q="\n"===G,J=""==G,Q=X+(G=q?"":G),Z=r.measureText(Q).width;if(N>=I)break;if(_=a,Z>s.width||q||J){if(N++,X=J&&Z<=s.width?Q:X,N===I&&Z>d){for(;r.measureText("".concat(X,"...")).width>s.width&&!(X.length<=1);)X=X.substring(0,X.length-1);X+="..."}var K=C(X);U=K.fix,Y=K.lineY;if(r.fillText(X,_,h+U),E(_,(h+=v)-Y,Z),X=G,h>D+c)break}else X=Q}r.restore()}},t.prototype.source=function(t){return i(this,void 0,void 0,(function(){var e,i,r,o=this;return n(this,(function(n){switch(n.label){case 0:if(this.node=null,e=+new Date,"{}"==JSON.stringify(t))return[2];if(!t.type)for(i in t.type=gt,t.css=t.css||{},t)["views","children","type","css"].includes(i)||(t.css[i]=t[i],delete t[i]);return t.css&&!t.css.width&&(t.css||(t.css={})),[4,this.create(t)];case 1:return(r=n.sent())?(this.size=r.layout()||{},this.node=r,this.onEffectFinished().then((function(t){return o.lifecycle("onEffectSuccess",t)})).catch((function(t){return o.lifecycle("onEffectFail",t)})),console.log("布局用时:"+(+new Date-e)+"ms"),[2,this.size]):[2,console.warn("no node")]}}))}))},t.prototype.getImageInfo=function(t){return this.imageBus[t]||(this.imageBus[t]=this.createImage(t,this.useCORS)),this.imageBus[t]},t.prototype.create=function(t,r){return i(this,void 0,void 0,(function(){var i,o,s,a,h,d,c,l,f,u,p,g,v,y,b,x,w;return n(this,(function(n){switch(n.label){case 0:if(i=t.type==ft,o=[ut,pt].includes(t.type),s=t.css||{},a=s.backgroundImage,h=s.display,i&&!t.src&&!t.url||o&&!t.text)return[2];if(h==m)return[2];if(o&&(t.text=String(t.text)),!(i||t.type==gt&&a))return[3,4];d=i?t.src:"",c=/url\((.+)\)/.exec(a),a&&c&&c[1]&&(d=c[1]||""),n.label=1;case 1:return n.trys.push([1,3,,4]),[4,this.getImageInfo(d)];case 2:return l=n.sent(),f=l.width,u=l.height,!(p=l.path)&&i?[2]:(p&&(t.attributes=Object.assign(t.attributes||{},{width:f,height:u,path:p,src:p,naturalSrc:d})),[3,4]);case 3:return g=n.sent(),t.type!=gt?[2]:(this.lifecycle("onEffectFail",e(e({},g),{src:d})),[3,4]);case 4:if(this.count+=1,v=new ct(t,r,this.root,this.ctx),!(y=t.views||t.children))return[3,8];b=0,n.label=5;case 5:return b0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("navigateTo",{url:encodeURI(n)})},navigateBack:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.delta;r("navigateBack",{delta:parseInt(n)||1})},switchTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("switchTab",{url:encodeURI(n)})},reLaunch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("reLaunch",{url:encodeURI(n)})},redirectTo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.url;r("redirectTo",{url:encodeURI(n)})},getEnv:function(e){o()?e({nvue:!0}):window.plus?e({plus:!0}):e({h5:!0})},postMessage:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r("postMessage",e.data||{})}},d=/uni-app/i.test(navigator.userAgent),s=/Html5Plus/i.test(navigator.userAgent),w=/complete|loaded|interactive/;var u=window.my&&navigator.userAgent.indexOf("AlipayClient")>-1;var g=window.swan&&window.swan.webView&&/swan/i.test(navigator.userAgent);var c=window.qq&&window.qq.miniProgram&&/QQ/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var v=window.tt&&window.tt.miniProgram&&/toutiaomicroapp/i.test(navigator.userAgent);var m=window.wx&&window.wx.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var p=window.qa&&/quickapp/i.test(navigator.userAgent);var f=window.ks&&window.ks.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);var l=window.tt&&window.tt.miniProgram&&/Lark|Feishu/i.test(navigator.userAgent);var _=window.jd&&window.jd.miniProgram&&/micromessenger/i.test(navigator.userAgent)&&/miniProgram/i.test(navigator.userAgent);for(var E,b=function(){window.UniAppJSBridge=!0,document.dispatchEvent(new CustomEvent("UniAppJSBridgeReady",{bubbles:!0,cancelable:!0}))},h=[function(e){if(d||s)return window.__dcloud_weex_postMessage||window.__dcloud_weex_?document.addEventListener("DOMContentLoaded",e):window.plus&&w.test(document.readyState)?setTimeout(e,0):document.addEventListener("plusready",e),a},function(e){if(m)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.wx.miniProgram},function(e){if(c)return window.QQJSBridge&&window.QQJSBridge.invoke?setTimeout(e,0):document.addEventListener("QQJSBridgeReady",e),window.qq.miniProgram},function(e){if(u){document.addEventListener("DOMContentLoaded",e);var n=window.my;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(g)return document.addEventListener("DOMContentLoaded",e),window.swan.webView},function(e){if(v)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(p){window.QaJSBridge&&window.QaJSBridge.invoke?setTimeout(e,0):document.addEventListener("QaJSBridgeReady",e);var n=window.qa;return{navigateTo:n.navigateTo,navigateBack:n.navigateBack,switchTab:n.switchTab,reLaunch:n.reLaunch,redirectTo:n.redirectTo,postMessage:n.postMessage,getEnv:n.getEnv}}},function(e){if(f)return window.WeixinJSBridge&&window.WeixinJSBridge.invoke?setTimeout(e,0):document.addEventListener("WeixinJSBridgeReady",e),window.ks.miniProgram},function(e){if(l)return document.addEventListener("DOMContentLoaded",e),window.tt.miniProgram},function(e){if(_)return window.JDJSBridgeReady&&window.JDJSBridgeReady.invoke?setTimeout(e,0):document.addEventListener("JDJSBridgeReady",e),window.jd.miniProgram},function(e){return document.addEventListener("DOMContentLoaded",e),a}],y=0;y {
+ if (this.disable) {
+ return
+ }
+ const keyName = Object.keys(keyNames).find(key => {
+ const keyName = $event.key
+ const value = keyNames[key]
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
+ })
+ if (keyName) {
+ // 避免和其他按键事件冲突
+ setTimeout(() => {
+ this.$emit(keyName, {})
+ }, 0)
+ }
+ }
+ document.addEventListener('keyup', listener)
+ this.$once('hook:beforeDestroy', () => {
+ document.removeEventListener('keyup', listener)
+ })
+ },
+ render: () => {}
+}
+// #endif
diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
new file mode 100644
index 0000000..fb3a9e1
--- /dev/null
+++ b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
@@ -0,0 +1,548 @@
+
+
+
+
+
+ {{errorMessage}}
+
+
+
+
+
+
+ {{item.text}}{{split}}
+
+
+
+ {{placeholder}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{popupTitle}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
new file mode 100644
index 0000000..555d2c5
--- /dev/null
+++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js
@@ -0,0 +1,563 @@
+export default {
+ props: {
+ localdata: {
+ type: [Array, Object],
+ default () {
+ return []
+ }
+ },
+ spaceInfo: {
+ type: Object,
+ default () {
+ return {}
+ }
+ },
+ collection: {
+ type: String,
+ default: ''
+ },
+ action: {
+ type: String,
+ default: ''
+ },
+ field: {
+ type: String,
+ default: ''
+ },
+ orderby: {
+ type: String,
+ default: ''
+ },
+ where: {
+ type: [String, Object],
+ default: ''
+ },
+ pageData: {
+ type: String,
+ default: 'add'
+ },
+ pageCurrent: {
+ type: Number,
+ default: 1
+ },
+ pageSize: {
+ type: Number,
+ default: 20
+ },
+ getcount: {
+ type: [Boolean, String],
+ default: false
+ },
+ getone: {
+ type: [Boolean, String],
+ default: false
+ },
+ gettree: {
+ type: [Boolean, String],
+ default: false
+ },
+ manual: {
+ type: Boolean,
+ default: false
+ },
+ value: {
+ type: [Array, String, Number],
+ default () {
+ return []
+ }
+ },
+ modelValue: {
+ type: [Array, String, Number],
+ default () {
+ return []
+ }
+ },
+ preload: {
+ type: Boolean,
+ default: false
+ },
+ stepSearh: {
+ type: Boolean,
+ default: true
+ },
+ selfField: {
+ type: String,
+ default: ''
+ },
+ parentField: {
+ type: String,
+ default: ''
+ },
+ multiple: {
+ type: Boolean,
+ default: false
+ },
+ map: {
+ type: Object,
+ default() {
+ return {
+ text: "text",
+ value: "value"
+ }
+ }
+ }
+ },
+ data() {
+ return {
+ loading: false,
+ errorMessage: '',
+ loadMore: {
+ contentdown: '',
+ contentrefresh: '',
+ contentnomore: ''
+ },
+ dataList: [],
+ selected: [],
+ selectedIndex: 0,
+ page: {
+ current: this.pageCurrent,
+ size: this.pageSize,
+ count: 0
+ }
+ }
+ },
+ computed: {
+ isLocaldata() {
+ return !this.collection.length
+ },
+ postField() {
+ let fields = [this.field];
+ if (this.parentField) {
+ fields.push(`${this.parentField} as parent_value`);
+ }
+ return fields.join(',');
+ },
+ dataValue() {
+ let isModelValue = Array.isArray(this.modelValue) ? (this.modelValue.length > 0) : (this.modelValue !== null || this.modelValue !== undefined)
+ return isModelValue ? this.modelValue : this.value
+ },
+ hasValue() {
+ if (typeof this.dataValue === 'number') {
+ return true
+ }
+ return (this.dataValue != null) && (this.dataValue.length > 0)
+ }
+ },
+ created() {
+ this.$watch(() => {
+ var al = [];
+ ['pageCurrent',
+ 'pageSize',
+ 'spaceInfo',
+ 'value',
+ 'modelValue',
+ 'localdata',
+ 'collection',
+ 'action',
+ 'field',
+ 'orderby',
+ 'where',
+ 'getont',
+ 'getcount',
+ 'gettree'
+ ].forEach(key => {
+ al.push(this[key])
+ });
+ return al
+ }, (newValue, oldValue) => {
+ let needReset = false
+ for (let i = 2; i < newValue.length; i++) {
+ if (newValue[i] != oldValue[i]) {
+ needReset = true
+ break
+ }
+ }
+ if (newValue[0] != oldValue[0]) {
+ this.page.current = this.pageCurrent
+ }
+ this.page.size = this.pageSize
+
+ this.onPropsChange()
+ })
+ this._treeData = []
+ },
+ methods: {
+ onPropsChange() {
+ this._treeData = []
+ },
+ getCommand(options = {}) {
+ /* eslint-disable no-undef */
+ let db = uniCloud.database(this.spaceInfo)
+
+ const action = options.action || this.action
+ if (action) {
+ db = db.action(action)
+ }
+
+ const collection = options.collection || this.collection
+ db = db.collection(collection)
+
+ const where = options.where || this.where
+ if (!(!where || !Object.keys(where).length)) {
+ db = db.where(where)
+ }
+
+ const field = options.field || this.field
+ if (field) {
+ db = db.field(field)
+ }
+
+ const orderby = options.orderby || this.orderby
+ if (orderby) {
+ db = db.orderBy(orderby)
+ }
+
+ const current = options.pageCurrent !== undefined ? options.pageCurrent : this.page.current
+ const size = options.pageSize !== undefined ? options.pageSize : this.page.size
+ const getCount = options.getcount !== undefined ? options.getcount : this.getcount
+ const getTree = options.gettree !== undefined ? options.gettree : this.gettree
+
+ const getOptions = {
+ getCount,
+ getTree
+ }
+ if (options.getTreePath) {
+ getOptions.getTreePath = options.getTreePath
+ }
+
+ db = db.skip(size * (current - 1)).limit(size).get(getOptions)
+
+ return db
+ },
+ getNodeData(callback) {
+ if (this.loading) {
+ return
+ }
+ this.loading = true
+ this.getCommand({
+ field: this.postField,
+ where: this._pathWhere()
+ }).then((res) => {
+ this.loading = false
+ this.selected = res.result.data
+ callback && callback()
+ }).catch((err) => {
+ this.loading = false
+ this.errorMessage = err
+ })
+ },
+ getTreePath(callback) {
+ if (this.loading) {
+ return
+ }
+ this.loading = true
+
+ this.getCommand({
+ field: this.postField,
+ getTreePath: {
+ startWith: `${this.selfField}=='${this.dataValue}'`
+ }
+ }).then((res) => {
+ this.loading = false
+ let treePath = []
+ this._extractTreePath(res.result.data, treePath)
+ this.selected = treePath
+ callback && callback()
+ }).catch((err) => {
+ this.loading = false
+ this.errorMessage = err
+ })
+ },
+ loadData() {
+ if (this.isLocaldata) {
+ this._processLocalData()
+ return
+ }
+
+ if (this.dataValue != null) {
+ this._loadNodeData((data) => {
+ this._treeData = data
+ this._updateBindData()
+ this._updateSelected()
+ })
+ return
+ }
+
+ if (this.stepSearh) {
+ this._loadNodeData((data) => {
+ this._treeData = data
+ this._updateBindData()
+ })
+ } else {
+ this._loadAllData((data) => {
+ this._treeData = []
+ this._extractTree(data, this._treeData, null)
+ this._updateBindData()
+ })
+ }
+ },
+ _loadAllData(callback) {
+ if (this.loading) {
+ return
+ }
+ this.loading = true
+
+ this.getCommand({
+ field: this.postField,
+ gettree: true,
+ startwith: `${this.selfField}=='${this.dataValue}'`
+ }).then((res) => {
+ this.loading = false
+ callback(res.result.data)
+ this.onDataChange()
+ }).catch((err) => {
+ this.loading = false
+ this.errorMessage = err
+ })
+ },
+ _loadNodeData(callback, pw) {
+ if (this.loading) {
+ return
+ }
+ this.loading = true
+
+ this.getCommand({
+ field: this.postField,
+ where: pw || this._postWhere(),
+ pageSize: 500
+ }).then((res) => {
+ this.loading = false
+ callback(res.result.data)
+ this.onDataChange()
+ }).catch((err) => {
+ this.loading = false
+ this.errorMessage = err
+ })
+ },
+ _pathWhere() {
+ let result = []
+ let where_field = this._getParentNameByField();
+ if (where_field) {
+ result.push(`${where_field} == '${this.dataValue}'`)
+ }
+
+ if (this.where) {
+ return `(${this.where}) && (${result.join(' || ')})`
+ }
+
+ return result.join(' || ')
+ },
+ _postWhere() {
+ let result = []
+ let selected = this.selected
+ let parentField = this.parentField
+ if (parentField) {
+ result.push(`${parentField} == null || ${parentField} == ""`)
+ }
+ if (selected.length) {
+ for (var i = 0; i < selected.length - 1; i++) {
+ result.push(`${parentField} == '${selected[i].value}'`)
+ }
+ }
+
+ let where = []
+ if (this.where) {
+ where.push(`(${this.where})`)
+ }
+ if (result.length) {
+ where.push(`(${result.join(' || ')})`)
+ }
+
+ return where.join(' && ')
+ },
+ _nodeWhere() {
+ let result = []
+ let selected = this.selected
+ if (selected.length) {
+ result.push(`${this.parentField} == '${selected[selected.length - 1].value}'`)
+ }
+
+ if (this.where) {
+ return `(${this.where}) && (${result.join(' || ')})`
+ }
+
+ return result.join(' || ')
+ },
+ _getParentNameByField() {
+ const fields = this.field.split(',');
+ let where_field = null;
+ for (let i = 0; i < fields.length; i++) {
+ const items = fields[i].split('as');
+ if (items.length < 2) {
+ continue;
+ }
+ if (items[1].trim() === 'value') {
+ where_field = items[0].trim();
+ break;
+ }
+ }
+ return where_field
+ },
+ _isTreeView() {
+ return (this.parentField && this.selfField)
+ },
+ _updateSelected() {
+ var dl = this.dataList
+ var sl = this.selected
+ let textField = this.map.text
+ let valueField = this.map.value
+ for (var i = 0; i < sl.length; i++) {
+ var value = sl[i].value
+ var dl2 = dl[i]
+ for (var j = 0; j < dl2.length; j++) {
+ var item2 = dl2[j]
+ if (item2[valueField] === value) {
+ sl[i].text = item2[textField]
+ break
+ }
+ }
+ }
+ },
+ _updateBindData(node) {
+ const {
+ dataList,
+ hasNodes
+ } = this._filterData(this._treeData, this.selected)
+
+ let isleaf = this._stepSearh === false && !hasNodes
+
+ if (node) {
+ node.isleaf = isleaf
+ }
+
+ this.dataList = dataList
+ this.selectedIndex = dataList.length - 1
+
+ if (!isleaf && this.selected.length < dataList.length) {
+ this.selected.push({
+ value: null,
+ text: "请选择"
+ })
+ }
+
+ return {
+ isleaf,
+ hasNodes
+ }
+ },
+ _filterData(data, paths) {
+ let dataList = []
+ let hasNodes = true
+
+ dataList.push(data.filter((item) => {
+ return (item.parent_value === null || item.parent_value === undefined || item.parent_value === '')
+ }))
+ for (let i = 0; i < paths.length; i++) {
+ var value = paths[i].value
+ var nodes = data.filter((item) => {
+ return item.parent_value === value
+ })
+
+ if (nodes.length) {
+ dataList.push(nodes)
+ } else {
+ hasNodes = false
+ }
+ }
+
+ return {
+ dataList,
+ hasNodes
+ }
+ },
+ _extractTree(nodes, result, parent_value) {
+ let list = result || []
+ let valueField = this.map.value
+ for (let i = 0; i < nodes.length; i++) {
+ let node = nodes[i]
+
+ let child = {}
+ for (let key in node) {
+ if (key !== 'children') {
+ child[key] = node[key]
+ }
+ }
+ if (parent_value !== null && parent_value !== undefined && parent_value !== '') {
+ child.parent_value = parent_value
+ }
+ result.push(child)
+
+ let children = node.children
+ if (children) {
+ this._extractTree(children, result, node[valueField])
+ }
+ }
+ },
+ _extractTreePath(nodes, result) {
+ let list = result || []
+ for (let i = 0; i < nodes.length; i++) {
+ let node = nodes[i]
+
+ let child = {}
+ for (let key in node) {
+ if (key !== 'children') {
+ child[key] = node[key]
+ }
+ }
+ result.push(child)
+
+ let children = node.children
+ if (children) {
+ this._extractTreePath(children, result)
+ }
+ }
+ },
+ _findNodePath(key, nodes, path = []) {
+ let textField = this.map.text
+ let valueField = this.map.value
+ for (let i = 0; i < nodes.length; i++) {
+ let node = nodes[i]
+ let children = node.children
+ let text = node[textField]
+ let value = node[valueField]
+
+ path.push({
+ value,
+ text
+ })
+
+ if (value === key) {
+ return path
+ }
+
+ if (children) {
+ const p = this._findNodePath(key, children, path)
+ if (p.length) {
+ return p
+ }
+ }
+
+ path.pop()
+ }
+ return []
+ },
+ _processLocalData() {
+ this._treeData = []
+ this._extractTree(this.localdata, this._treeData)
+
+ var inputValue = this.dataValue
+ if (inputValue === undefined) {
+ return
+ }
+
+ if (Array.isArray(inputValue)) {
+ inputValue = inputValue[inputValue.length - 1]
+ if (typeof inputValue === 'object' && inputValue[this.map.value]) {
+ inputValue = inputValue[this.map.value]
+ }
+ }
+
+ this.selected = this._findNodePath(inputValue, this.localdata)
+ }
+ }
+}
diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
new file mode 100644
index 0000000..0990868
--- /dev/null
+++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
@@ -0,0 +1,335 @@
+
+
+
+
+
+
+ {{item.text}}
+
+
+
+
+
+
+
+
+ {{item[map.text]}}
+
+
+
+
+
+
+
+
+
+ {{errorMessage}}
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-data-picker/package.json b/uni_modules/uni-data-picker/package.json
new file mode 100644
index 0000000..3724c68
--- /dev/null
+++ b/uni_modules/uni-data-picker/package.json
@@ -0,0 +1,90 @@
+{
+ "id": "uni-data-picker",
+ "displayName": "uni-data-picker 数据驱动的picker选择器",
+ "version": "1.0.9",
+ "description": "单列、多列级联选择器,常用于省市区城市选择、公司部门选择、多级分类等场景",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "picker",
+ "级联",
+ "省市区",
+ ""
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-load-more",
+ "uni-icons",
+ "uni-scss"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-data-picker/readme.md b/uni_modules/uni-data-picker/readme.md
new file mode 100644
index 0000000..a6bf10f
--- /dev/null
+++ b/uni_modules/uni-data-picker/readme.md
@@ -0,0 +1,22 @@
+## DataPicker 级联选择
+> **组件名:uni-data-picker**
+> 代码块: `uDataPicker`
+> 关联组件:`uni-data-pickerview`、`uni-load-more`。
+
+
+`` 是一个选择类[datacom组件](https://uniapp.dcloud.net.cn/component/datacom)。
+
+支持单列、和多列级联选择。列数没有限制,如果屏幕显示不全,顶部tab区域会左右滚动。
+
+候选数据支持一次性加载完毕,也支持懒加载,比如示例图中,选择了“北京”后,动态加载北京的区县数据。
+
+`` 组件尤其适用于地址选择、分类选择等选择类。
+
+`` 支持本地数据、云端静态数据(json),uniCloud云数据库数据。
+
+`` 可以通过JQL直连uniCloud云数据库,配套[DB Schema](https://uniapp.dcloud.net.cn/uniCloud/schema),可在schema2code中自动生成前端页面,还支持服务器端校验。
+
+在uniCloud数据表中新建表“uni-id-address”和“opendb-city-china”,这2个表的schema自带foreignKey关联。在“uni-id-address”表的表结构页面使用schema2code生成前端页面,会自动生成地址管理的维护页面,自动从“opendb-city-china”表包含的中国所有省市区信息里选择地址。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-picker)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md
new file mode 100644
index 0000000..6449885
--- /dev/null
+++ b/uni_modules/uni-icons/changelog.md
@@ -0,0 +1,22 @@
+## 1.3.5(2022-01-24)
+- 优化 size 属性可以传入不带单位的字符串数值
+## 1.3.4(2022-01-24)
+- 优化 size 支持其他单位
+## 1.3.3(2022-01-17)
+- 修复 nvue 有些图标不显示的bug,兼容老版本图标
+## 1.3.2(2021-12-01)
+- 优化 示例可复制图标名称
+## 1.3.1(2021-11-23)
+- 优化 兼容旧组件 type 值
+## 1.3.0(2021-11-19)
+- 新增 更多图标
+- 优化 自定义图标使用方式
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
+## 1.1.7(2021-11-08)
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.5(2021-05-12)
+- 新增 组件示例地址
+## 1.1.4(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-icons/components/uni-icons/icons.js b/uni_modules/uni-icons/components/uni-icons/icons.js
new file mode 100644
index 0000000..7889936
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/icons.js
@@ -0,0 +1,1169 @@
+export default {
+ "id": "2852637",
+ "name": "uniui图标库",
+ "font_family": "uniicons",
+ "css_prefix_text": "uniui-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "25027049",
+ "name": "yanse",
+ "font_class": "color",
+ "unicode": "e6cf",
+ "unicode_decimal": 59087
+ },
+ {
+ "icon_id": "25027048",
+ "name": "wallet",
+ "font_class": "wallet",
+ "unicode": "e6b1",
+ "unicode_decimal": 59057
+ },
+ {
+ "icon_id": "25015720",
+ "name": "settings-filled",
+ "font_class": "settings-filled",
+ "unicode": "e6ce",
+ "unicode_decimal": 59086
+ },
+ {
+ "icon_id": "25015434",
+ "name": "shimingrenzheng-filled",
+ "font_class": "auth-filled",
+ "unicode": "e6cc",
+ "unicode_decimal": 59084
+ },
+ {
+ "icon_id": "24934246",
+ "name": "shop-filled",
+ "font_class": "shop-filled",
+ "unicode": "e6cd",
+ "unicode_decimal": 59085
+ },
+ {
+ "icon_id": "24934159",
+ "name": "staff-filled-01",
+ "font_class": "staff-filled",
+ "unicode": "e6cb",
+ "unicode_decimal": 59083
+ },
+ {
+ "icon_id": "24932461",
+ "name": "VIP-filled",
+ "font_class": "vip-filled",
+ "unicode": "e6c6",
+ "unicode_decimal": 59078
+ },
+ {
+ "icon_id": "24932462",
+ "name": "plus_circle_fill",
+ "font_class": "plus-filled",
+ "unicode": "e6c7",
+ "unicode_decimal": 59079
+ },
+ {
+ "icon_id": "24932463",
+ "name": "folder_add-filled",
+ "font_class": "folder-add-filled",
+ "unicode": "e6c8",
+ "unicode_decimal": 59080
+ },
+ {
+ "icon_id": "24932464",
+ "name": "yanse-filled",
+ "font_class": "color-filled",
+ "unicode": "e6c9",
+ "unicode_decimal": 59081
+ },
+ {
+ "icon_id": "24932465",
+ "name": "tune-filled",
+ "font_class": "tune-filled",
+ "unicode": "e6ca",
+ "unicode_decimal": 59082
+ },
+ {
+ "icon_id": "24932455",
+ "name": "a-rilidaka-filled",
+ "font_class": "calendar-filled",
+ "unicode": "e6c0",
+ "unicode_decimal": 59072
+ },
+ {
+ "icon_id": "24932456",
+ "name": "notification-filled",
+ "font_class": "notification-filled",
+ "unicode": "e6c1",
+ "unicode_decimal": 59073
+ },
+ {
+ "icon_id": "24932457",
+ "name": "wallet-filled",
+ "font_class": "wallet-filled",
+ "unicode": "e6c2",
+ "unicode_decimal": 59074
+ },
+ {
+ "icon_id": "24932458",
+ "name": "paihangbang-filled",
+ "font_class": "medal-filled",
+ "unicode": "e6c3",
+ "unicode_decimal": 59075
+ },
+ {
+ "icon_id": "24932459",
+ "name": "gift-filled",
+ "font_class": "gift-filled",
+ "unicode": "e6c4",
+ "unicode_decimal": 59076
+ },
+ {
+ "icon_id": "24932460",
+ "name": "fire-filled",
+ "font_class": "fire-filled",
+ "unicode": "e6c5",
+ "unicode_decimal": 59077
+ },
+ {
+ "icon_id": "24928001",
+ "name": "refreshempty",
+ "font_class": "refreshempty",
+ "unicode": "e6bf",
+ "unicode_decimal": 59071
+ },
+ {
+ "icon_id": "24926853",
+ "name": "location-ellipse",
+ "font_class": "location-filled",
+ "unicode": "e6af",
+ "unicode_decimal": 59055
+ },
+ {
+ "icon_id": "24926735",
+ "name": "person-filled",
+ "font_class": "person-filled",
+ "unicode": "e69d",
+ "unicode_decimal": 59037
+ },
+ {
+ "icon_id": "24926703",
+ "name": "personadd-filled",
+ "font_class": "personadd-filled",
+ "unicode": "e698",
+ "unicode_decimal": 59032
+ },
+ {
+ "icon_id": "24923351",
+ "name": "back",
+ "font_class": "back",
+ "unicode": "e6b9",
+ "unicode_decimal": 59065
+ },
+ {
+ "icon_id": "24923352",
+ "name": "forward",
+ "font_class": "forward",
+ "unicode": "e6ba",
+ "unicode_decimal": 59066
+ },
+ {
+ "icon_id": "24923353",
+ "name": "arrowthinright",
+ "font_class": "arrow-right",
+ "unicode": "e6bb",
+ "unicode_decimal": 59067
+ },
+ {
+ "icon_id": "24923353",
+ "name": "arrowthinright",
+ "font_class": "arrowthinright",
+ "unicode": "e6bb",
+ "unicode_decimal": 59067
+ },
+ {
+ "icon_id": "24923354",
+ "name": "arrowthinleft",
+ "font_class": "arrow-left",
+ "unicode": "e6bc",
+ "unicode_decimal": 59068
+ },
+ {
+ "icon_id": "24923354",
+ "name": "arrowthinleft",
+ "font_class": "arrowthinleft",
+ "unicode": "e6bc",
+ "unicode_decimal": 59068
+ },
+ {
+ "icon_id": "24923355",
+ "name": "arrowthinup",
+ "font_class": "arrow-up",
+ "unicode": "e6bd",
+ "unicode_decimal": 59069
+ },
+ {
+ "icon_id": "24923355",
+ "name": "arrowthinup",
+ "font_class": "arrowthinup",
+ "unicode": "e6bd",
+ "unicode_decimal": 59069
+ },
+ {
+ "icon_id": "24923356",
+ "name": "arrowthindown",
+ "font_class": "arrow-down",
+ "unicode": "e6be",
+ "unicode_decimal": 59070
+ },{
+ "icon_id": "24923356",
+ "name": "arrowthindown",
+ "font_class": "arrowthindown",
+ "unicode": "e6be",
+ "unicode_decimal": 59070
+ },
+ {
+ "icon_id": "24923349",
+ "name": "arrowdown",
+ "font_class": "bottom",
+ "unicode": "e6b8",
+ "unicode_decimal": 59064
+ },{
+ "icon_id": "24923349",
+ "name": "arrowdown",
+ "font_class": "arrowdown",
+ "unicode": "e6b8",
+ "unicode_decimal": 59064
+ },
+ {
+ "icon_id": "24923346",
+ "name": "arrowright",
+ "font_class": "right",
+ "unicode": "e6b5",
+ "unicode_decimal": 59061
+ },
+ {
+ "icon_id": "24923346",
+ "name": "arrowright",
+ "font_class": "arrowright",
+ "unicode": "e6b5",
+ "unicode_decimal": 59061
+ },
+ {
+ "icon_id": "24923347",
+ "name": "arrowup",
+ "font_class": "top",
+ "unicode": "e6b6",
+ "unicode_decimal": 59062
+ },
+ {
+ "icon_id": "24923347",
+ "name": "arrowup",
+ "font_class": "arrowup",
+ "unicode": "e6b6",
+ "unicode_decimal": 59062
+ },
+ {
+ "icon_id": "24923348",
+ "name": "arrowleft",
+ "font_class": "left",
+ "unicode": "e6b7",
+ "unicode_decimal": 59063
+ },
+ {
+ "icon_id": "24923348",
+ "name": "arrowleft",
+ "font_class": "arrowleft",
+ "unicode": "e6b7",
+ "unicode_decimal": 59063
+ },
+ {
+ "icon_id": "24923334",
+ "name": "eye",
+ "font_class": "eye",
+ "unicode": "e651",
+ "unicode_decimal": 58961
+ },
+ {
+ "icon_id": "24923335",
+ "name": "eye-filled",
+ "font_class": "eye-filled",
+ "unicode": "e66a",
+ "unicode_decimal": 58986
+ },
+ {
+ "icon_id": "24923336",
+ "name": "eye-slash",
+ "font_class": "eye-slash",
+ "unicode": "e6b3",
+ "unicode_decimal": 59059
+ },
+ {
+ "icon_id": "24923337",
+ "name": "eye-slash-filled",
+ "font_class": "eye-slash-filled",
+ "unicode": "e6b4",
+ "unicode_decimal": 59060
+ },
+ {
+ "icon_id": "24923305",
+ "name": "info-filled",
+ "font_class": "info-filled",
+ "unicode": "e649",
+ "unicode_decimal": 58953
+ },
+ {
+ "icon_id": "24923299",
+ "name": "reload-01",
+ "font_class": "reload",
+ "unicode": "e6b2",
+ "unicode_decimal": 59058
+ },
+ {
+ "icon_id": "24923195",
+ "name": "mic_slash_fill",
+ "font_class": "micoff-filled",
+ "unicode": "e6b0",
+ "unicode_decimal": 59056
+ },
+ {
+ "icon_id": "24923165",
+ "name": "map-pin-ellipse",
+ "font_class": "map-pin-ellipse",
+ "unicode": "e6ac",
+ "unicode_decimal": 59052
+ },
+ {
+ "icon_id": "24923166",
+ "name": "map-pin",
+ "font_class": "map-pin",
+ "unicode": "e6ad",
+ "unicode_decimal": 59053
+ },
+ {
+ "icon_id": "24923167",
+ "name": "location",
+ "font_class": "location",
+ "unicode": "e6ae",
+ "unicode_decimal": 59054
+ },
+ {
+ "icon_id": "24923064",
+ "name": "starhalf",
+ "font_class": "starhalf",
+ "unicode": "e683",
+ "unicode_decimal": 59011
+ },
+ {
+ "icon_id": "24923065",
+ "name": "star",
+ "font_class": "star",
+ "unicode": "e688",
+ "unicode_decimal": 59016
+ },
+ {
+ "icon_id": "24923066",
+ "name": "star-filled",
+ "font_class": "star-filled",
+ "unicode": "e68f",
+ "unicode_decimal": 59023
+ },
+ {
+ "icon_id": "24899646",
+ "name": "a-rilidaka",
+ "font_class": "calendar",
+ "unicode": "e6a0",
+ "unicode_decimal": 59040
+ },
+ {
+ "icon_id": "24899647",
+ "name": "fire",
+ "font_class": "fire",
+ "unicode": "e6a1",
+ "unicode_decimal": 59041
+ },
+ {
+ "icon_id": "24899648",
+ "name": "paihangbang",
+ "font_class": "medal",
+ "unicode": "e6a2",
+ "unicode_decimal": 59042
+ },
+ {
+ "icon_id": "24899649",
+ "name": "font",
+ "font_class": "font",
+ "unicode": "e6a3",
+ "unicode_decimal": 59043
+ },
+ {
+ "icon_id": "24899650",
+ "name": "gift",
+ "font_class": "gift",
+ "unicode": "e6a4",
+ "unicode_decimal": 59044
+ },
+ {
+ "icon_id": "24899651",
+ "name": "link",
+ "font_class": "link",
+ "unicode": "e6a5",
+ "unicode_decimal": 59045
+ },
+ {
+ "icon_id": "24899652",
+ "name": "notification",
+ "font_class": "notification",
+ "unicode": "e6a6",
+ "unicode_decimal": 59046
+ },
+ {
+ "icon_id": "24899653",
+ "name": "staff",
+ "font_class": "staff",
+ "unicode": "e6a7",
+ "unicode_decimal": 59047
+ },
+ {
+ "icon_id": "24899654",
+ "name": "VIP",
+ "font_class": "vip",
+ "unicode": "e6a8",
+ "unicode_decimal": 59048
+ },
+ {
+ "icon_id": "24899655",
+ "name": "folder_add",
+ "font_class": "folder-add",
+ "unicode": "e6a9",
+ "unicode_decimal": 59049
+ },
+ {
+ "icon_id": "24899656",
+ "name": "tune",
+ "font_class": "tune",
+ "unicode": "e6aa",
+ "unicode_decimal": 59050
+ },
+ {
+ "icon_id": "24899657",
+ "name": "shimingrenzheng",
+ "font_class": "auth",
+ "unicode": "e6ab",
+ "unicode_decimal": 59051
+ },
+ {
+ "icon_id": "24899565",
+ "name": "person",
+ "font_class": "person",
+ "unicode": "e699",
+ "unicode_decimal": 59033
+ },
+ {
+ "icon_id": "24899566",
+ "name": "email-filled",
+ "font_class": "email-filled",
+ "unicode": "e69a",
+ "unicode_decimal": 59034
+ },
+ {
+ "icon_id": "24899567",
+ "name": "phone-filled",
+ "font_class": "phone-filled",
+ "unicode": "e69b",
+ "unicode_decimal": 59035
+ },
+ {
+ "icon_id": "24899568",
+ "name": "phone",
+ "font_class": "phone",
+ "unicode": "e69c",
+ "unicode_decimal": 59036
+ },
+ {
+ "icon_id": "24899570",
+ "name": "email",
+ "font_class": "email",
+ "unicode": "e69e",
+ "unicode_decimal": 59038
+ },
+ {
+ "icon_id": "24899571",
+ "name": "personadd",
+ "font_class": "personadd",
+ "unicode": "e69f",
+ "unicode_decimal": 59039
+ },
+ {
+ "icon_id": "24899558",
+ "name": "chatboxes-filled",
+ "font_class": "chatboxes-filled",
+ "unicode": "e692",
+ "unicode_decimal": 59026
+ },
+ {
+ "icon_id": "24899559",
+ "name": "contact",
+ "font_class": "contact",
+ "unicode": "e693",
+ "unicode_decimal": 59027
+ },
+ {
+ "icon_id": "24899560",
+ "name": "chatbubble-filled",
+ "font_class": "chatbubble-filled",
+ "unicode": "e694",
+ "unicode_decimal": 59028
+ },
+ {
+ "icon_id": "24899561",
+ "name": "contact-filled",
+ "font_class": "contact-filled",
+ "unicode": "e695",
+ "unicode_decimal": 59029
+ },
+ {
+ "icon_id": "24899562",
+ "name": "chatboxes",
+ "font_class": "chatboxes",
+ "unicode": "e696",
+ "unicode_decimal": 59030
+ },
+ {
+ "icon_id": "24899563",
+ "name": "chatbubble",
+ "font_class": "chatbubble",
+ "unicode": "e697",
+ "unicode_decimal": 59031
+ },
+ {
+ "icon_id": "24881290",
+ "name": "upload-filled",
+ "font_class": "upload-filled",
+ "unicode": "e68e",
+ "unicode_decimal": 59022
+ },
+ {
+ "icon_id": "24881292",
+ "name": "upload",
+ "font_class": "upload",
+ "unicode": "e690",
+ "unicode_decimal": 59024
+ },
+ {
+ "icon_id": "24881293",
+ "name": "weixin",
+ "font_class": "weixin",
+ "unicode": "e691",
+ "unicode_decimal": 59025
+ },
+ {
+ "icon_id": "24881274",
+ "name": "compose",
+ "font_class": "compose",
+ "unicode": "e67f",
+ "unicode_decimal": 59007
+ },
+ {
+ "icon_id": "24881275",
+ "name": "qq",
+ "font_class": "qq",
+ "unicode": "e680",
+ "unicode_decimal": 59008
+ },
+ {
+ "icon_id": "24881276",
+ "name": "download-filled",
+ "font_class": "download-filled",
+ "unicode": "e681",
+ "unicode_decimal": 59009
+ },
+ {
+ "icon_id": "24881277",
+ "name": "pengyouquan",
+ "font_class": "pyq",
+ "unicode": "e682",
+ "unicode_decimal": 59010
+ },
+ {
+ "icon_id": "24881279",
+ "name": "sound",
+ "font_class": "sound",
+ "unicode": "e684",
+ "unicode_decimal": 59012
+ },
+ {
+ "icon_id": "24881280",
+ "name": "trash-filled",
+ "font_class": "trash-filled",
+ "unicode": "e685",
+ "unicode_decimal": 59013
+ },
+ {
+ "icon_id": "24881281",
+ "name": "sound-filled",
+ "font_class": "sound-filled",
+ "unicode": "e686",
+ "unicode_decimal": 59014
+ },
+ {
+ "icon_id": "24881282",
+ "name": "trash",
+ "font_class": "trash",
+ "unicode": "e687",
+ "unicode_decimal": 59015
+ },
+ {
+ "icon_id": "24881284",
+ "name": "videocam-filled",
+ "font_class": "videocam-filled",
+ "unicode": "e689",
+ "unicode_decimal": 59017
+ },
+ {
+ "icon_id": "24881285",
+ "name": "spinner-cycle",
+ "font_class": "spinner-cycle",
+ "unicode": "e68a",
+ "unicode_decimal": 59018
+ },
+ {
+ "icon_id": "24881286",
+ "name": "weibo",
+ "font_class": "weibo",
+ "unicode": "e68b",
+ "unicode_decimal": 59019
+ },
+ {
+ "icon_id": "24881288",
+ "name": "videocam",
+ "font_class": "videocam",
+ "unicode": "e68c",
+ "unicode_decimal": 59020
+ },
+ {
+ "icon_id": "24881289",
+ "name": "download",
+ "font_class": "download",
+ "unicode": "e68d",
+ "unicode_decimal": 59021
+ },
+ {
+ "icon_id": "24879601",
+ "name": "help",
+ "font_class": "help",
+ "unicode": "e679",
+ "unicode_decimal": 59001
+ },
+ {
+ "icon_id": "24879602",
+ "name": "navigate-filled",
+ "font_class": "navigate-filled",
+ "unicode": "e67a",
+ "unicode_decimal": 59002
+ },
+ {
+ "icon_id": "24879603",
+ "name": "plusempty",
+ "font_class": "plusempty",
+ "unicode": "e67b",
+ "unicode_decimal": 59003
+ },
+ {
+ "icon_id": "24879604",
+ "name": "smallcircle",
+ "font_class": "smallcircle",
+ "unicode": "e67c",
+ "unicode_decimal": 59004
+ },
+ {
+ "icon_id": "24879605",
+ "name": "minus-filled",
+ "font_class": "minus-filled",
+ "unicode": "e67d",
+ "unicode_decimal": 59005
+ },
+ {
+ "icon_id": "24879606",
+ "name": "micoff",
+ "font_class": "micoff",
+ "unicode": "e67e",
+ "unicode_decimal": 59006
+ },
+ {
+ "icon_id": "24879588",
+ "name": "closeempty",
+ "font_class": "closeempty",
+ "unicode": "e66c",
+ "unicode_decimal": 58988
+ },
+ {
+ "icon_id": "24879589",
+ "name": "clear",
+ "font_class": "clear",
+ "unicode": "e66d",
+ "unicode_decimal": 58989
+ },
+ {
+ "icon_id": "24879590",
+ "name": "navigate",
+ "font_class": "navigate",
+ "unicode": "e66e",
+ "unicode_decimal": 58990
+ },
+ {
+ "icon_id": "24879591",
+ "name": "minus",
+ "font_class": "minus",
+ "unicode": "e66f",
+ "unicode_decimal": 58991
+ },
+ {
+ "icon_id": "24879592",
+ "name": "image",
+ "font_class": "image",
+ "unicode": "e670",
+ "unicode_decimal": 58992
+ },
+ {
+ "icon_id": "24879593",
+ "name": "mic",
+ "font_class": "mic",
+ "unicode": "e671",
+ "unicode_decimal": 58993
+ },
+ {
+ "icon_id": "24879594",
+ "name": "paperplane",
+ "font_class": "paperplane",
+ "unicode": "e672",
+ "unicode_decimal": 58994
+ },
+ {
+ "icon_id": "24879595",
+ "name": "close",
+ "font_class": "close",
+ "unicode": "e673",
+ "unicode_decimal": 58995
+ },
+ {
+ "icon_id": "24879596",
+ "name": "help-filled",
+ "font_class": "help-filled",
+ "unicode": "e674",
+ "unicode_decimal": 58996
+ },
+ {
+ "icon_id": "24879597",
+ "name": "plus-filled",
+ "font_class": "paperplane-filled",
+ "unicode": "e675",
+ "unicode_decimal": 58997
+ },
+ {
+ "icon_id": "24879598",
+ "name": "plus",
+ "font_class": "plus",
+ "unicode": "e676",
+ "unicode_decimal": 58998
+ },
+ {
+ "icon_id": "24879599",
+ "name": "mic-filled",
+ "font_class": "mic-filled",
+ "unicode": "e677",
+ "unicode_decimal": 58999
+ },
+ {
+ "icon_id": "24879600",
+ "name": "image-filled",
+ "font_class": "image-filled",
+ "unicode": "e678",
+ "unicode_decimal": 59000
+ },
+ {
+ "icon_id": "24855900",
+ "name": "locked-filled",
+ "font_class": "locked-filled",
+ "unicode": "e668",
+ "unicode_decimal": 58984
+ },
+ {
+ "icon_id": "24855901",
+ "name": "info",
+ "font_class": "info",
+ "unicode": "e669",
+ "unicode_decimal": 58985
+ },
+ {
+ "icon_id": "24855903",
+ "name": "locked",
+ "font_class": "locked",
+ "unicode": "e66b",
+ "unicode_decimal": 58987
+ },
+ {
+ "icon_id": "24855884",
+ "name": "camera-filled",
+ "font_class": "camera-filled",
+ "unicode": "e658",
+ "unicode_decimal": 58968
+ },
+ {
+ "icon_id": "24855885",
+ "name": "chat-filled",
+ "font_class": "chat-filled",
+ "unicode": "e659",
+ "unicode_decimal": 58969
+ },
+ {
+ "icon_id": "24855886",
+ "name": "camera",
+ "font_class": "camera",
+ "unicode": "e65a",
+ "unicode_decimal": 58970
+ },
+ {
+ "icon_id": "24855887",
+ "name": "circle",
+ "font_class": "circle",
+ "unicode": "e65b",
+ "unicode_decimal": 58971
+ },
+ {
+ "icon_id": "24855888",
+ "name": "checkmarkempty",
+ "font_class": "checkmarkempty",
+ "unicode": "e65c",
+ "unicode_decimal": 58972
+ },
+ {
+ "icon_id": "24855889",
+ "name": "chat",
+ "font_class": "chat",
+ "unicode": "e65d",
+ "unicode_decimal": 58973
+ },
+ {
+ "icon_id": "24855890",
+ "name": "circle-filled",
+ "font_class": "circle-filled",
+ "unicode": "e65e",
+ "unicode_decimal": 58974
+ },
+ {
+ "icon_id": "24855891",
+ "name": "flag",
+ "font_class": "flag",
+ "unicode": "e65f",
+ "unicode_decimal": 58975
+ },
+ {
+ "icon_id": "24855892",
+ "name": "flag-filled",
+ "font_class": "flag-filled",
+ "unicode": "e660",
+ "unicode_decimal": 58976
+ },
+ {
+ "icon_id": "24855893",
+ "name": "gear-filled",
+ "font_class": "gear-filled",
+ "unicode": "e661",
+ "unicode_decimal": 58977
+ },
+ {
+ "icon_id": "24855894",
+ "name": "home",
+ "font_class": "home",
+ "unicode": "e662",
+ "unicode_decimal": 58978
+ },
+ {
+ "icon_id": "24855895",
+ "name": "home-filled",
+ "font_class": "home-filled",
+ "unicode": "e663",
+ "unicode_decimal": 58979
+ },
+ {
+ "icon_id": "24855896",
+ "name": "gear",
+ "font_class": "gear",
+ "unicode": "e664",
+ "unicode_decimal": 58980
+ },
+ {
+ "icon_id": "24855897",
+ "name": "smallcircle-filled",
+ "font_class": "smallcircle-filled",
+ "unicode": "e665",
+ "unicode_decimal": 58981
+ },
+ {
+ "icon_id": "24855898",
+ "name": "map-filled",
+ "font_class": "map-filled",
+ "unicode": "e666",
+ "unicode_decimal": 58982
+ },
+ {
+ "icon_id": "24855899",
+ "name": "map",
+ "font_class": "map",
+ "unicode": "e667",
+ "unicode_decimal": 58983
+ },
+ {
+ "icon_id": "24855825",
+ "name": "refresh-filled",
+ "font_class": "refresh-filled",
+ "unicode": "e656",
+ "unicode_decimal": 58966
+ },
+ {
+ "icon_id": "24855826",
+ "name": "refresh",
+ "font_class": "refresh",
+ "unicode": "e657",
+ "unicode_decimal": 58967
+ },
+ {
+ "icon_id": "24855808",
+ "name": "cloud-upload",
+ "font_class": "cloud-upload",
+ "unicode": "e645",
+ "unicode_decimal": 58949
+ },
+ {
+ "icon_id": "24855809",
+ "name": "cloud-download-filled",
+ "font_class": "cloud-download-filled",
+ "unicode": "e646",
+ "unicode_decimal": 58950
+ },
+ {
+ "icon_id": "24855810",
+ "name": "cloud-download",
+ "font_class": "cloud-download",
+ "unicode": "e647",
+ "unicode_decimal": 58951
+ },
+ {
+ "icon_id": "24855811",
+ "name": "cloud-upload-filled",
+ "font_class": "cloud-upload-filled",
+ "unicode": "e648",
+ "unicode_decimal": 58952
+ },
+ {
+ "icon_id": "24855813",
+ "name": "redo",
+ "font_class": "redo",
+ "unicode": "e64a",
+ "unicode_decimal": 58954
+ },
+ {
+ "icon_id": "24855814",
+ "name": "images-filled",
+ "font_class": "images-filled",
+ "unicode": "e64b",
+ "unicode_decimal": 58955
+ },
+ {
+ "icon_id": "24855815",
+ "name": "undo-filled",
+ "font_class": "undo-filled",
+ "unicode": "e64c",
+ "unicode_decimal": 58956
+ },
+ {
+ "icon_id": "24855816",
+ "name": "more",
+ "font_class": "more",
+ "unicode": "e64d",
+ "unicode_decimal": 58957
+ },
+ {
+ "icon_id": "24855817",
+ "name": "more-filled",
+ "font_class": "more-filled",
+ "unicode": "e64e",
+ "unicode_decimal": 58958
+ },
+ {
+ "icon_id": "24855818",
+ "name": "undo",
+ "font_class": "undo",
+ "unicode": "e64f",
+ "unicode_decimal": 58959
+ },
+ {
+ "icon_id": "24855819",
+ "name": "images",
+ "font_class": "images",
+ "unicode": "e650",
+ "unicode_decimal": 58960
+ },
+ {
+ "icon_id": "24855821",
+ "name": "paperclip",
+ "font_class": "paperclip",
+ "unicode": "e652",
+ "unicode_decimal": 58962
+ },
+ {
+ "icon_id": "24855822",
+ "name": "settings",
+ "font_class": "settings",
+ "unicode": "e653",
+ "unicode_decimal": 58963
+ },
+ {
+ "icon_id": "24855823",
+ "name": "search",
+ "font_class": "search",
+ "unicode": "e654",
+ "unicode_decimal": 58964
+ },
+ {
+ "icon_id": "24855824",
+ "name": "redo-filled",
+ "font_class": "redo-filled",
+ "unicode": "e655",
+ "unicode_decimal": 58965
+ },
+ {
+ "icon_id": "24841702",
+ "name": "list",
+ "font_class": "list",
+ "unicode": "e644",
+ "unicode_decimal": 58948
+ },
+ {
+ "icon_id": "24841489",
+ "name": "mail-open-filled",
+ "font_class": "mail-open-filled",
+ "unicode": "e63a",
+ "unicode_decimal": 58938
+ },
+ {
+ "icon_id": "24841491",
+ "name": "hand-thumbsdown-filled",
+ "font_class": "hand-down-filled",
+ "unicode": "e63c",
+ "unicode_decimal": 58940
+ },
+ {
+ "icon_id": "24841492",
+ "name": "hand-thumbsdown",
+ "font_class": "hand-down",
+ "unicode": "e63d",
+ "unicode_decimal": 58941
+ },
+ {
+ "icon_id": "24841493",
+ "name": "hand-thumbsup-filled",
+ "font_class": "hand-up-filled",
+ "unicode": "e63e",
+ "unicode_decimal": 58942
+ },
+ {
+ "icon_id": "24841494",
+ "name": "hand-thumbsup",
+ "font_class": "hand-up",
+ "unicode": "e63f",
+ "unicode_decimal": 58943
+ },
+ {
+ "icon_id": "24841496",
+ "name": "heart-filled",
+ "font_class": "heart-filled",
+ "unicode": "e641",
+ "unicode_decimal": 58945
+ },
+ {
+ "icon_id": "24841498",
+ "name": "mail-open",
+ "font_class": "mail-open",
+ "unicode": "e643",
+ "unicode_decimal": 58947
+ },
+ {
+ "icon_id": "24841488",
+ "name": "heart",
+ "font_class": "heart",
+ "unicode": "e639",
+ "unicode_decimal": 58937
+ },
+ {
+ "icon_id": "24839963",
+ "name": "loop",
+ "font_class": "loop",
+ "unicode": "e633",
+ "unicode_decimal": 58931
+ },
+ {
+ "icon_id": "24839866",
+ "name": "pulldown",
+ "font_class": "pulldown",
+ "unicode": "e632",
+ "unicode_decimal": 58930
+ },
+ {
+ "icon_id": "24813798",
+ "name": "scan",
+ "font_class": "scan",
+ "unicode": "e62a",
+ "unicode_decimal": 58922
+ },
+ {
+ "icon_id": "24813786",
+ "name": "bars",
+ "font_class": "bars",
+ "unicode": "e627",
+ "unicode_decimal": 58919
+ },
+ {
+ "icon_id": "24813788",
+ "name": "cart-filled",
+ "font_class": "cart-filled",
+ "unicode": "e629",
+ "unicode_decimal": 58921
+ },
+ {
+ "icon_id": "24813790",
+ "name": "checkbox",
+ "font_class": "checkbox",
+ "unicode": "e62b",
+ "unicode_decimal": 58923
+ },
+ {
+ "icon_id": "24813791",
+ "name": "checkbox-filled",
+ "font_class": "checkbox-filled",
+ "unicode": "e62c",
+ "unicode_decimal": 58924
+ },
+ {
+ "icon_id": "24813794",
+ "name": "shop",
+ "font_class": "shop",
+ "unicode": "e62f",
+ "unicode_decimal": 58927
+ },
+ {
+ "icon_id": "24813795",
+ "name": "headphones",
+ "font_class": "headphones",
+ "unicode": "e630",
+ "unicode_decimal": 58928
+ },
+ {
+ "icon_id": "24813796",
+ "name": "cart",
+ "font_class": "cart",
+ "unicode": "e631",
+ "unicode_decimal": 58929
+ }
+ ]
+}
diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue
new file mode 100644
index 0000000..a87f68e
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue
@@ -0,0 +1,96 @@
+
+
+ {{unicode}}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css
new file mode 100644
index 0000000..2f56eab
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uniicons.css
@@ -0,0 +1,663 @@
+.uniui-color:before {
+ content: "\e6cf";
+}
+
+.uniui-wallet:before {
+ content: "\e6b1";
+}
+
+.uniui-settings-filled:before {
+ content: "\e6ce";
+}
+
+.uniui-auth-filled:before {
+ content: "\e6cc";
+}
+
+.uniui-shop-filled:before {
+ content: "\e6cd";
+}
+
+.uniui-staff-filled:before {
+ content: "\e6cb";
+}
+
+.uniui-vip-filled:before {
+ content: "\e6c6";
+}
+
+.uniui-plus-filled:before {
+ content: "\e6c7";
+}
+
+.uniui-folder-add-filled:before {
+ content: "\e6c8";
+}
+
+.uniui-color-filled:before {
+ content: "\e6c9";
+}
+
+.uniui-tune-filled:before {
+ content: "\e6ca";
+}
+
+.uniui-calendar-filled:before {
+ content: "\e6c0";
+}
+
+.uniui-notification-filled:before {
+ content: "\e6c1";
+}
+
+.uniui-wallet-filled:before {
+ content: "\e6c2";
+}
+
+.uniui-medal-filled:before {
+ content: "\e6c3";
+}
+
+.uniui-gift-filled:before {
+ content: "\e6c4";
+}
+
+.uniui-fire-filled:before {
+ content: "\e6c5";
+}
+
+.uniui-refreshempty:before {
+ content: "\e6bf";
+}
+
+.uniui-location-filled:before {
+ content: "\e6af";
+}
+
+.uniui-person-filled:before {
+ content: "\e69d";
+}
+
+.uniui-personadd-filled:before {
+ content: "\e698";
+}
+
+.uniui-back:before {
+ content: "\e6b9";
+}
+
+.uniui-forward:before {
+ content: "\e6ba";
+}
+
+.uniui-arrow-right:before {
+ content: "\e6bb";
+}
+
+.uniui-arrowthinright:before {
+ content: "\e6bb";
+}
+
+.uniui-arrow-left:before {
+ content: "\e6bc";
+}
+
+.uniui-arrowthinleft:before {
+ content: "\e6bc";
+}
+
+.uniui-arrow-up:before {
+ content: "\e6bd";
+}
+
+.uniui-arrowthinup:before {
+ content: "\e6bd";
+}
+
+.uniui-arrow-down:before {
+ content: "\e6be";
+}
+
+.uniui-arrowthindown:before {
+ content: "\e6be";
+}
+
+.uniui-bottom:before {
+ content: "\e6b8";
+}
+
+.uniui-arrowdown:before {
+ content: "\e6b8";
+}
+
+.uniui-right:before {
+ content: "\e6b5";
+}
+
+.uniui-arrowright:before {
+ content: "\e6b5";
+}
+
+.uniui-top:before {
+ content: "\e6b6";
+}
+
+.uniui-arrowup:before {
+ content: "\e6b6";
+}
+
+.uniui-left:before {
+ content: "\e6b7";
+}
+
+.uniui-arrowleft:before {
+ content: "\e6b7";
+}
+
+.uniui-eye:before {
+ content: "\e651";
+}
+
+.uniui-eye-filled:before {
+ content: "\e66a";
+}
+
+.uniui-eye-slash:before {
+ content: "\e6b3";
+}
+
+.uniui-eye-slash-filled:before {
+ content: "\e6b4";
+}
+
+.uniui-info-filled:before {
+ content: "\e649";
+}
+
+.uniui-reload:before {
+ content: "\e6b2";
+}
+
+.uniui-micoff-filled:before {
+ content: "\e6b0";
+}
+
+.uniui-map-pin-ellipse:before {
+ content: "\e6ac";
+}
+
+.uniui-map-pin:before {
+ content: "\e6ad";
+}
+
+.uniui-location:before {
+ content: "\e6ae";
+}
+
+.uniui-starhalf:before {
+ content: "\e683";
+}
+
+.uniui-star:before {
+ content: "\e688";
+}
+
+.uniui-star-filled:before {
+ content: "\e68f";
+}
+
+.uniui-calendar:before {
+ content: "\e6a0";
+}
+
+.uniui-fire:before {
+ content: "\e6a1";
+}
+
+.uniui-medal:before {
+ content: "\e6a2";
+}
+
+.uniui-font:before {
+ content: "\e6a3";
+}
+
+.uniui-gift:before {
+ content: "\e6a4";
+}
+
+.uniui-link:before {
+ content: "\e6a5";
+}
+
+.uniui-notification:before {
+ content: "\e6a6";
+}
+
+.uniui-staff:before {
+ content: "\e6a7";
+}
+
+.uniui-vip:before {
+ content: "\e6a8";
+}
+
+.uniui-folder-add:before {
+ content: "\e6a9";
+}
+
+.uniui-tune:before {
+ content: "\e6aa";
+}
+
+.uniui-auth:before {
+ content: "\e6ab";
+}
+
+.uniui-person:before {
+ content: "\e699";
+}
+
+.uniui-email-filled:before {
+ content: "\e69a";
+}
+
+.uniui-phone-filled:before {
+ content: "\e69b";
+}
+
+.uniui-phone:before {
+ content: "\e69c";
+}
+
+.uniui-email:before {
+ content: "\e69e";
+}
+
+.uniui-personadd:before {
+ content: "\e69f";
+}
+
+.uniui-chatboxes-filled:before {
+ content: "\e692";
+}
+
+.uniui-contact:before {
+ content: "\e693";
+}
+
+.uniui-chatbubble-filled:before {
+ content: "\e694";
+}
+
+.uniui-contact-filled:before {
+ content: "\e695";
+}
+
+.uniui-chatboxes:before {
+ content: "\e696";
+}
+
+.uniui-chatbubble:before {
+ content: "\e697";
+}
+
+.uniui-upload-filled:before {
+ content: "\e68e";
+}
+
+.uniui-upload:before {
+ content: "\e690";
+}
+
+.uniui-weixin:before {
+ content: "\e691";
+}
+
+.uniui-compose:before {
+ content: "\e67f";
+}
+
+.uniui-qq:before {
+ content: "\e680";
+}
+
+.uniui-download-filled:before {
+ content: "\e681";
+}
+
+.uniui-pyq:before {
+ content: "\e682";
+}
+
+.uniui-sound:before {
+ content: "\e684";
+}
+
+.uniui-trash-filled:before {
+ content: "\e685";
+}
+
+.uniui-sound-filled:before {
+ content: "\e686";
+}
+
+.uniui-trash:before {
+ content: "\e687";
+}
+
+.uniui-videocam-filled:before {
+ content: "\e689";
+}
+
+.uniui-spinner-cycle:before {
+ content: "\e68a";
+}
+
+.uniui-weibo:before {
+ content: "\e68b";
+}
+
+.uniui-videocam:before {
+ content: "\e68c";
+}
+
+.uniui-download:before {
+ content: "\e68d";
+}
+
+.uniui-help:before {
+ content: "\e679";
+}
+
+.uniui-navigate-filled:before {
+ content: "\e67a";
+}
+
+.uniui-plusempty:before {
+ content: "\e67b";
+}
+
+.uniui-smallcircle:before {
+ content: "\e67c";
+}
+
+.uniui-minus-filled:before {
+ content: "\e67d";
+}
+
+.uniui-micoff:before {
+ content: "\e67e";
+}
+
+.uniui-closeempty:before {
+ content: "\e66c";
+}
+
+.uniui-clear:before {
+ content: "\e66d";
+}
+
+.uniui-navigate:before {
+ content: "\e66e";
+}
+
+.uniui-minus:before {
+ content: "\e66f";
+}
+
+.uniui-image:before {
+ content: "\e670";
+}
+
+.uniui-mic:before {
+ content: "\e671";
+}
+
+.uniui-paperplane:before {
+ content: "\e672";
+}
+
+.uniui-close:before {
+ content: "\e673";
+}
+
+.uniui-help-filled:before {
+ content: "\e674";
+}
+
+.uniui-paperplane-filled:before {
+ content: "\e675";
+}
+
+.uniui-plus:before {
+ content: "\e676";
+}
+
+.uniui-mic-filled:before {
+ content: "\e677";
+}
+
+.uniui-image-filled:before {
+ content: "\e678";
+}
+
+.uniui-locked-filled:before {
+ content: "\e668";
+}
+
+.uniui-info:before {
+ content: "\e669";
+}
+
+.uniui-locked:before {
+ content: "\e66b";
+}
+
+.uniui-camera-filled:before {
+ content: "\e658";
+}
+
+.uniui-chat-filled:before {
+ content: "\e659";
+}
+
+.uniui-camera:before {
+ content: "\e65a";
+}
+
+.uniui-circle:before {
+ content: "\e65b";
+}
+
+.uniui-checkmarkempty:before {
+ content: "\e65c";
+}
+
+.uniui-chat:before {
+ content: "\e65d";
+}
+
+.uniui-circle-filled:before {
+ content: "\e65e";
+}
+
+.uniui-flag:before {
+ content: "\e65f";
+}
+
+.uniui-flag-filled:before {
+ content: "\e660";
+}
+
+.uniui-gear-filled:before {
+ content: "\e661";
+}
+
+.uniui-home:before {
+ content: "\e662";
+}
+
+.uniui-home-filled:before {
+ content: "\e663";
+}
+
+.uniui-gear:before {
+ content: "\e664";
+}
+
+.uniui-smallcircle-filled:before {
+ content: "\e665";
+}
+
+.uniui-map-filled:before {
+ content: "\e666";
+}
+
+.uniui-map:before {
+ content: "\e667";
+}
+
+.uniui-refresh-filled:before {
+ content: "\e656";
+}
+
+.uniui-refresh:before {
+ content: "\e657";
+}
+
+.uniui-cloud-upload:before {
+ content: "\e645";
+}
+
+.uniui-cloud-download-filled:before {
+ content: "\e646";
+}
+
+.uniui-cloud-download:before {
+ content: "\e647";
+}
+
+.uniui-cloud-upload-filled:before {
+ content: "\e648";
+}
+
+.uniui-redo:before {
+ content: "\e64a";
+}
+
+.uniui-images-filled:before {
+ content: "\e64b";
+}
+
+.uniui-undo-filled:before {
+ content: "\e64c";
+}
+
+.uniui-more:before {
+ content: "\e64d";
+}
+
+.uniui-more-filled:before {
+ content: "\e64e";
+}
+
+.uniui-undo:before {
+ content: "\e64f";
+}
+
+.uniui-images:before {
+ content: "\e650";
+}
+
+.uniui-paperclip:before {
+ content: "\e652";
+}
+
+.uniui-settings:before {
+ content: "\e653";
+}
+
+.uniui-search:before {
+ content: "\e654";
+}
+
+.uniui-redo-filled:before {
+ content: "\e655";
+}
+
+.uniui-list:before {
+ content: "\e644";
+}
+
+.uniui-mail-open-filled:before {
+ content: "\e63a";
+}
+
+.uniui-hand-down-filled:before {
+ content: "\e63c";
+}
+
+.uniui-hand-down:before {
+ content: "\e63d";
+}
+
+.uniui-hand-up-filled:before {
+ content: "\e63e";
+}
+
+.uniui-hand-up:before {
+ content: "\e63f";
+}
+
+.uniui-heart-filled:before {
+ content: "\e641";
+}
+
+.uniui-mail-open:before {
+ content: "\e643";
+}
+
+.uniui-heart:before {
+ content: "\e639";
+}
+
+.uniui-loop:before {
+ content: "\e633";
+}
+
+.uniui-pulldown:before {
+ content: "\e632";
+}
+
+.uniui-scan:before {
+ content: "\e62a";
+}
+
+.uniui-bars:before {
+ content: "\e627";
+}
+
+.uniui-cart-filled:before {
+ content: "\e629";
+}
+
+.uniui-checkbox:before {
+ content: "\e62b";
+}
+
+.uniui-checkbox-filled:before {
+ content: "\e62c";
+}
+
+.uniui-shop:before {
+ content: "\e62f";
+}
+
+.uniui-headphones:before {
+ content: "\e630";
+}
+
+.uniui-cart:before {
+ content: "\e631";
+}
diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf
new file mode 100644
index 0000000..835f33b
Binary files /dev/null and b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf differ
diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json
new file mode 100644
index 0000000..d1c4e77
--- /dev/null
+++ b/uni_modules/uni-icons/package.json
@@ -0,0 +1,86 @@
+{
+ "id": "uni-icons",
+ "displayName": "uni-icons 图标",
+ "version": "1.3.5",
+ "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "icon",
+ "图标"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.2.14"
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md
new file mode 100644
index 0000000..86234ba
--- /dev/null
+++ b/uni_modules/uni-icons/readme.md
@@ -0,0 +1,8 @@
+## Icons 图标
+> **组件名:uni-icons**
+> 代码块: `uIcons`
+
+用于展示 icons 图标 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md
new file mode 100644
index 0000000..8f03f1d
--- /dev/null
+++ b/uni_modules/uni-load-more/changelog.md
@@ -0,0 +1,19 @@
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
new file mode 100644
index 0000000..6f45b0e
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "Pull up to show more",
+ "uni-load-more.contentrefresh": "loading...",
+ "uni-load-more.contentnomore": "No more data"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
new file mode 100644
index 0000000..fa8f0f3
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
new file mode 100644
index 0000000..3a14ca0
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "上拉显示更多",
+ "uni-load-more.contentrefresh": "正在加载...",
+ "uni-load-more.contentnomore": "没有更多数据了"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
new file mode 100644
index 0000000..ee99b06
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "上拉顯示更多",
+ "uni-load-more.contentrefresh": "正在加載...",
+ "uni-load-more.contentnomore": "沒有更多數據了"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
new file mode 100644
index 0000000..ededbc2
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
@@ -0,0 +1,399 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ status === 'more' ? contentdownText : status === 'loading' ? contentrefreshText : contentnomoreText }}
+
+
+
+
+
+
diff --git a/uni_modules/uni-load-more/package.json b/uni_modules/uni-load-more/package.json
new file mode 100644
index 0000000..2fa6f04
--- /dev/null
+++ b/uni_modules/uni-load-more/package.json
@@ -0,0 +1,86 @@
+{
+ "id": "uni-load-more",
+ "displayName": "uni-load-more 加载更多",
+ "version": "1.3.3",
+ "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "加载更多",
+ "load-more"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-load-more/readme.md b/uni_modules/uni-load-more/readme.md
new file mode 100644
index 0000000..54dc1fa
--- /dev/null
+++ b/uni_modules/uni-load-more/readme.md
@@ -0,0 +1,14 @@
+
+
+### LoadMore 加载更多
+> **组件名:uni-load-more**
+> 代码块: `uLoadMore`
+
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态。
+
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md
new file mode 100644
index 0000000..b863bb0
--- /dev/null
+++ b/uni_modules/uni-scss/changelog.md
@@ -0,0 +1,8 @@
+## 1.0.3(2022-01-21)
+- 优化 组件示例
+## 1.0.2(2021-11-22)
+- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题
+## 1.0.1(2021-11-22)
+- 修复 vue3中scss语法兼容问题
+## 1.0.0(2021-11-18)
+- init
diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss
new file mode 100644
index 0000000..1744a5f
--- /dev/null
+++ b/uni_modules/uni-scss/index.scss
@@ -0,0 +1 @@
+@import './styles/index.scss';
diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json
new file mode 100644
index 0000000..7cc0ccb
--- /dev/null
+++ b/uni_modules/uni-scss/package.json
@@ -0,0 +1,82 @@
+{
+ "id": "uni-scss",
+ "displayName": "uni-scss 辅助样式",
+ "version": "1.0.3",
+ "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。",
+ "keywords": [
+ "uni-scss",
+ "uni-ui",
+ "辅助样式"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "category": [
+ "JS SDK",
+ "通用 SDK"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "n",
+ "联盟": "n"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md
new file mode 100644
index 0000000..b7d1c25
--- /dev/null
+++ b/uni_modules/uni-scss/readme.md
@@ -0,0 +1,4 @@
+`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss
new file mode 100644
index 0000000..ffac4fe
--- /dev/null
+++ b/uni_modules/uni-scss/styles/index.scss
@@ -0,0 +1,7 @@
+@import './setting/_variables.scss';
+@import './setting/_border.scss';
+@import './setting/_color.scss';
+@import './setting/_space.scss';
+@import './setting/_radius.scss';
+@import './setting/_text.scss';
+@import './setting/_styles.scss';
diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss
new file mode 100644
index 0000000..12a11c3
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_border.scss
@@ -0,0 +1,3 @@
+.uni-border {
+ border: 1px $uni-border-1 solid;
+}
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss
new file mode 100644
index 0000000..1ededd9
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_color.scss
@@ -0,0 +1,66 @@
+
+// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐
+// @mixin get-styles($k,$c) {
+// @if $k == size or $k == weight{
+// font-#{$k}:#{$c}
+// }@else{
+// #{$k}:#{$c}
+// }
+// }
+$uni-ui-color:(
+ // 主色
+ primary: $uni-primary,
+ primary-disable: $uni-primary-disable,
+ primary-light: $uni-primary-light,
+ // 辅助色
+ success: $uni-success,
+ success-disable: $uni-success-disable,
+ success-light: $uni-success-light,
+ warning: $uni-warning,
+ warning-disable: $uni-warning-disable,
+ warning-light: $uni-warning-light,
+ error: $uni-error,
+ error-disable: $uni-error-disable,
+ error-light: $uni-error-light,
+ info: $uni-info,
+ info-disable: $uni-info-disable,
+ info-light: $uni-info-light,
+ // 中性色
+ main-color: $uni-main-color,
+ base-color: $uni-base-color,
+ secondary-color: $uni-secondary-color,
+ extra-color: $uni-extra-color,
+ // 背景色
+ bg-color: $uni-bg-color,
+ // 边框颜色
+ border-1: $uni-border-1,
+ border-2: $uni-border-2,
+ border-3: $uni-border-3,
+ border-4: $uni-border-4,
+ // 黑色
+ black:$uni-black,
+ // 白色
+ white:$uni-white,
+ // 透明
+ transparent:$uni-transparent
+) !default;
+@each $key, $child in $uni-ui-color {
+ .uni-#{"" + $key} {
+ color: $child;
+ }
+ .uni-#{"" + $key}-bg {
+ background-color: $child;
+ }
+}
+.uni-shadow-sm {
+ box-shadow: $uni-shadow-sm;
+}
+.uni-shadow-base {
+ box-shadow: $uni-shadow-base;
+}
+.uni-shadow-lg {
+ box-shadow: $uni-shadow-lg;
+}
+.uni-mask {
+ background-color:$uni-mask;
+}
diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss
new file mode 100644
index 0000000..9a0428b
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_radius.scss
@@ -0,0 +1,55 @@
+@mixin radius($r,$d:null ,$important: false){
+ $radius-value:map-get($uni-radius, $r) if($important, !important, null);
+ // Key exists within the $uni-radius variable
+ @if (map-has-key($uni-radius, $r) and $d){
+ @if $d == t {
+ border-top-left-radius:$radius-value;
+ border-top-right-radius:$radius-value;
+ }@else if $d == r {
+ border-top-right-radius:$radius-value;
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == b {
+ border-bottom-left-radius:$radius-value;
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == l {
+ border-top-left-radius:$radius-value;
+ border-bottom-left-radius:$radius-value;
+ }@else if $d == tl {
+ border-top-left-radius:$radius-value;
+ }@else if $d == tr {
+ border-top-right-radius:$radius-value;
+ }@else if $d == br {
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == bl {
+ border-bottom-left-radius:$radius-value;
+ }
+ }@else{
+ border-radius:$radius-value;
+ }
+}
+
+@each $key, $child in $uni-radius {
+ @if($key){
+ .uni-radius-#{"" + $key} {
+ @include radius($key)
+ }
+ }@else{
+ .uni-radius {
+ @include radius($key)
+ }
+ }
+}
+
+@each $direction in t, r, b, l,tl, tr, br, bl {
+ @each $key, $child in $uni-radius {
+ @if($key){
+ .uni-radius-#{"" + $direction}-#{"" + $key} {
+ @include radius($key,$direction,false)
+ }
+ }@else{
+ .uni-radius-#{$direction} {
+ @include radius($key,$direction,false)
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss
new file mode 100644
index 0000000..3c89528
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_space.scss
@@ -0,0 +1,56 @@
+
+@mixin fn($space,$direction,$size,$n) {
+ @if $n {
+ #{$space}-#{$direction}: #{$size*$uni-space-root}px
+ } @else {
+ #{$space}-#{$direction}: #{-$size*$uni-space-root}px
+ }
+}
+@mixin get-styles($direction,$i,$space,$n){
+ @if $direction == t {
+ @include fn($space, top,$i,$n);
+ }
+ @if $direction == r {
+ @include fn($space, right,$i,$n);
+ }
+ @if $direction == b {
+ @include fn($space, bottom,$i,$n);
+ }
+ @if $direction == l {
+ @include fn($space, left,$i,$n);
+ }
+ @if $direction == x {
+ @include fn($space, left,$i,$n);
+ @include fn($space, right,$i,$n);
+ }
+ @if $direction == y {
+ @include fn($space, top,$i,$n);
+ @include fn($space, bottom,$i,$n);
+ }
+ @if $direction == a {
+ @if $n {
+ #{$space}:#{$i*$uni-space-root}px;
+ } @else {
+ #{$space}:#{-$i*$uni-space-root}px;
+ }
+ }
+}
+
+@each $orientation in m,p {
+ $space: margin;
+ @if $orientation == m {
+ $space: margin;
+ } @else {
+ $space: padding;
+ }
+ @for $i from 0 through 16 {
+ @each $direction in t, r, b, l, x, y, a {
+ .uni-#{$orientation}#{$direction}-#{$i} {
+ @include get-styles($direction,$i,$space,true);
+ }
+ .uni-#{$orientation}#{$direction}-n#{$i} {
+ @include get-styles($direction,$i,$space,false);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss
new file mode 100644
index 0000000..689afec
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_styles.scss
@@ -0,0 +1,167 @@
+/* #ifndef APP-NVUE */
+
+$-color-white:#fff;
+$-color-black:#000;
+@mixin base-style($color) {
+ color: #fff;
+ background-color: $color;
+ border-color: mix($-color-black, $color, 8%);
+ &:not([hover-class]):active {
+ background: mix($-color-black, $color, 10%);
+ border-color: mix($-color-black, $color, 20%);
+ color: $-color-white;
+ outline: none;
+ }
+}
+@mixin is-color($color) {
+ @include base-style($color);
+ &[loading] {
+ @include base-style($color);
+ &::before {
+ margin-right:5px;
+ }
+ }
+ &[disabled] {
+ &,
+ &[loading],
+ &:not([hover-class]):active {
+ color: $-color-white;
+ border-color: mix(darken($color,10%), $-color-white);
+ background-color: mix($color, $-color-white);
+ }
+ }
+
+}
+@mixin base-plain-style($color) {
+ color:$color;
+ background-color: mix($-color-white, $color, 90%);
+ border-color: mix($-color-white, $color, 70%);
+ &:not([hover-class]):active {
+ background: mix($-color-white, $color, 80%);
+ color: $color;
+ outline: none;
+ border-color: mix($-color-white, $color, 50%);
+ }
+}
+@mixin is-plain($color){
+ &[plain] {
+ @include base-plain-style($color);
+ &[loading] {
+ @include base-plain-style($color);
+ &::before {
+ margin-right:5px;
+ }
+ }
+ &[disabled] {
+ &,
+ &:active {
+ color: mix($-color-white, $color, 40%);
+ background-color: mix($-color-white, $color, 90%);
+ border-color: mix($-color-white, $color, 80%);
+ }
+ }
+ }
+}
+
+
+.uni-btn {
+ margin: 5px;
+ color: #393939;
+ border:1px solid #ccc;
+ font-size: 16px;
+ font-weight: 200;
+ background-color: #F9F9F9;
+ // TODO 暂时处理边框隐藏一边的问题
+ overflow: visible;
+ &::after{
+ border: none;
+ }
+
+ &:not([type]),&[type=default] {
+ color: #999;
+ &[loading] {
+ background: none;
+ &::before {
+ margin-right:5px;
+ }
+ }
+
+
+
+ &[disabled]{
+ color: mix($-color-white, #999, 60%);
+ &,
+ &[loading],
+ &:active {
+ color: mix($-color-white, #999, 60%);
+ background-color: mix($-color-white,$-color-black , 98%);
+ border-color: mix($-color-white, #999, 85%);
+ }
+ }
+
+ &[plain] {
+ color: #999;
+ background: none;
+ border-color: $uni-border-1;
+ &:not([hover-class]):active {
+ background: none;
+ color: mix($-color-white, $-color-black, 80%);
+ border-color: mix($-color-white, $-color-black, 90%);
+ outline: none;
+ }
+ &[disabled]{
+ &,
+ &[loading],
+ &:active {
+ background: none;
+ color: mix($-color-white, #999, 60%);
+ border-color: mix($-color-white, #999, 85%);
+ }
+ }
+ }
+ }
+
+ &:not([hover-class]):active {
+ color: mix($-color-white, $-color-black, 50%);
+ }
+
+ &[size=mini] {
+ font-size: 16px;
+ font-weight: 200;
+ border-radius: 8px;
+ }
+
+
+
+ &.uni-btn-small {
+ font-size: 14px;
+ }
+ &.uni-btn-mini {
+ font-size: 12px;
+ }
+
+ &.uni-btn-radius {
+ border-radius: 999px;
+ }
+ &[type=primary] {
+ @include is-color($uni-primary);
+ @include is-plain($uni-primary)
+ }
+ &[type=success] {
+ @include is-color($uni-success);
+ @include is-plain($uni-success)
+ }
+ &[type=error] {
+ @include is-color($uni-error);
+ @include is-plain($uni-error)
+ }
+ &[type=warning] {
+ @include is-color($uni-warning);
+ @include is-plain($uni-warning)
+ }
+ &[type=info] {
+ @include is-color($uni-info);
+ @include is-plain($uni-info)
+ }
+}
+/* #endif */
diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss
new file mode 100644
index 0000000..a34d08f
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_text.scss
@@ -0,0 +1,24 @@
+@mixin get-styles($k,$c) {
+ @if $k == size or $k == weight{
+ font-#{$k}:#{$c}
+ }@else{
+ #{$k}:#{$c}
+ }
+}
+
+@each $key, $child in $uni-headings {
+ /* #ifndef APP-NVUE */
+ .uni-#{$key} {
+ @each $k, $c in $child {
+ @include get-styles($k,$c)
+ }
+ }
+ /* #endif */
+ /* #ifdef APP-NVUE */
+ .container .uni-#{$key} {
+ @each $k, $c in $child {
+ @include get-styles($k,$c)
+ }
+ }
+ /* #endif */
+}
diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss
new file mode 100644
index 0000000..557d3d7
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_variables.scss
@@ -0,0 +1,146 @@
+// @use "sass:math";
+@import '../tools/functions.scss';
+// 间距基础倍数
+$uni-space-root: 2 !default;
+// 边框半径默认值
+$uni-radius-root:5px !default;
+$uni-radius: () !default;
+// 边框半径断点
+$uni-radius: map-deep-merge(
+ (
+ 0: 0,
+ // TODO 当前版本暂时不支持 sm 属性
+ // 'sm': math.div($uni-radius-root, 2),
+ null: $uni-radius-root,
+ 'lg': $uni-radius-root * 2,
+ 'xl': $uni-radius-root * 6,
+ 'pill': 9999px,
+ 'circle': 50%
+ ),
+ $uni-radius
+);
+// 字体家族
+$body-font-family: 'Roboto', sans-serif !default;
+// 文本
+$heading-font-family: $body-font-family !default;
+$uni-headings: () !default;
+$letterSpacing: -0.01562em;
+$uni-headings: map-deep-merge(
+ (
+ 'h1': (
+ size: 32px,
+ weight: 300,
+ line-height: 50px,
+ // letter-spacing:-0.01562em
+ ),
+ 'h2': (
+ size: 28px,
+ weight: 300,
+ line-height: 40px,
+ // letter-spacing: -0.00833em
+ ),
+ 'h3': (
+ size: 24px,
+ weight: 400,
+ line-height: 32px,
+ // letter-spacing: normal
+ ),
+ 'h4': (
+ size: 20px,
+ weight: 400,
+ line-height: 30px,
+ // letter-spacing: 0.00735em
+ ),
+ 'h5': (
+ size: 16px,
+ weight: 400,
+ line-height: 24px,
+ // letter-spacing: normal
+ ),
+ 'h6': (
+ size: 14px,
+ weight: 500,
+ line-height: 18px,
+ // letter-spacing: 0.0125em
+ ),
+ 'subtitle': (
+ size: 12px,
+ weight: 400,
+ line-height: 20px,
+ // letter-spacing: 0.00937em
+ ),
+ 'body': (
+ font-size: 14px,
+ font-weight: 400,
+ line-height: 22px,
+ // letter-spacing: 0.03125em
+ ),
+ 'caption': (
+ 'size': 12px,
+ 'weight': 400,
+ 'line-height': 20px,
+ // 'letter-spacing': 0.03333em,
+ // 'text-transform': false
+ )
+ ),
+ $uni-headings
+);
+
+
+
+// 主色
+$uni-primary: #2979ff !default;
+$uni-primary-disable:lighten($uni-primary,20%) !default;
+$uni-primary-light: lighten($uni-primary,25%) !default;
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37 !default;
+$uni-success-disable:lighten($uni-success,20%) !default;
+$uni-success-light: lighten($uni-success,25%) !default;
+
+$uni-warning: #f3a73f !default;
+$uni-warning-disable:lighten($uni-warning,20%) !default;
+$uni-warning-light: lighten($uni-warning,25%) !default;
+
+$uni-error: #e43d33 !default;
+$uni-error-disable:lighten($uni-error,20%) !default;
+$uni-error-light: lighten($uni-error,25%) !default;
+
+$uni-info: #8f939c !default;
+$uni-info-disable:lighten($uni-info,20%) !default;
+$uni-info-light: lighten($uni-info,25%) !default;
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a !default; // 主要文字
+$uni-base-color: #6a6a6a !default; // 常规文字
+$uni-secondary-color: #909399 !default; // 次要文字
+$uni-extra-color: #c7c7c7 !default; // 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0 !default;
+$uni-border-2: #EDEDED !default;
+$uni-border-3: #DCDCDC !default;
+$uni-border-4: #B9B9B9 !default;
+
+// 常规色
+$uni-black: #000000 !default;
+$uni-white: #ffffff !default;
+$uni-transparent: rgba($color: #000000, $alpha: 0) !default;
+
+// 背景色
+$uni-bg-color: #f7f7f7 !default;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px !default;
+$uni-spacing-base: 15px !default;
+$uni-spacing-lg: 30px !default;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default;
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default;
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default;
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4) !default;
diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss
new file mode 100644
index 0000000..ac6f63e
--- /dev/null
+++ b/uni_modules/uni-scss/styles/tools/functions.scss
@@ -0,0 +1,19 @@
+// 合并 map
+@function map-deep-merge($parent-map, $child-map){
+ $result: $parent-map;
+ @each $key, $child in $child-map {
+ $parent-has-key: map-has-key($result, $key);
+ $parent-value: map-get($result, $key);
+ $parent-type: type-of($parent-value);
+ $child-type: type-of($child);
+ $parent-is-map: $parent-type == map;
+ $child-is-map: $child-type == map;
+
+ @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){
+ $result: map-merge($result, ( $key: $child ));
+ }@else {
+ $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) ));
+ }
+ }
+ @return $result;
+};
diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss
new file mode 100644
index 0000000..80ee62f
--- /dev/null
+++ b/uni_modules/uni-scss/theme.scss
@@ -0,0 +1,31 @@
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+// 主色
+$uni-primary: #2979ff;
+// 辅助色
+$uni-success: #4cd964;
+// 警告色
+$uni-warning: #f0ad4e;
+// 错误色
+$uni-error: #dd524d;
+// 描述色
+$uni-info: #909399;
+// 中性色
+$uni-main-color: #303133;
+$uni-base-color: #606266;
+$uni-secondary-color: #909399;
+$uni-extra-color: #C0C4CC;
+// 背景色
+$uni-bg-color: #f5f5f5;
+// 边框颜色
+$uni-border-1: #DCDFE6;
+$uni-border-2: #E4E7ED;
+$uni-border-3: #EBEEF5;
+$uni-border-4: #F2F6FC;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss
new file mode 100644
index 0000000..1c062d4
--- /dev/null
+++ b/uni_modules/uni-scss/variables.scss
@@ -0,0 +1,62 @@
+@import './styles/setting/_variables.scss';
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+
+// 主色
+$uni-primary: #2979ff;
+$uni-primary-disable:mix(#fff,$uni-primary,50%);
+$uni-primary-light: mix(#fff,$uni-primary,80%);
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37;
+$uni-success-disable:mix(#fff,$uni-success,50%);
+$uni-success-light: mix(#fff,$uni-success,80%);
+
+$uni-warning: #f3a73f;
+$uni-warning-disable:mix(#fff,$uni-warning,50%);
+$uni-warning-light: mix(#fff,$uni-warning,80%);
+
+$uni-error: #e43d33;
+$uni-error-disable:mix(#fff,$uni-error,50%);
+$uni-error-light: mix(#fff,$uni-error,80%);
+
+$uni-info: #8f939c;
+$uni-info-disable:mix(#fff,$uni-info,50%);
+$uni-info-light: mix(#fff,$uni-info,80%);
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a; // 主要文字
+$uni-base-color: #6a6a6a; // 常规文字
+$uni-secondary-color: #909399; // 次要文字
+$uni-extra-color: #c7c7c7; // 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0;
+$uni-border-2: #EDEDED;
+$uni-border-3: #DCDCDC;
+$uni-border-4: #B9B9B9;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
+
+// 背景色
+$uni-bg-color: #f7f7f7;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px;
+$uni-spacing-base: 15px;
+$uni-spacing-lg: 30px;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5);
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2);
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5);
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4);
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..078324c
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,22 @@
+
+const TransformPages = require('uni-read-pages')
+
+const {
+ webpack
+} = new TransformPages()
+
+module.exports = {
+ transpileDependencies: ['uview-ui'],
+ configureWebpack: {
+ plugins: [
+ new webpack.DefinePlugin({
+ ROUTES: webpack.DefinePlugin.runtimeValue(() => {
+ const tfPages = new TransformPages({
+ includes: ['path', 'name', 'aliasPath', 'auth']
+ });
+ return JSON.stringify(tfPages.routes)
+ }, true)
+ })
+ ]
+ }
+}
diff --git a/yarn-error.log b/yarn-error.log
new file mode 100644
index 0000000..ac11941
--- /dev/null
+++ b/yarn-error.log
@@ -0,0 +1,34 @@
+Arguments:
+ /usr/local/bin/node /usr/local/bin/yarn add vuex@2.x
+
+PATH:
+ /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/tmoct5/flutter/bin
+
+Yarn version:
+ 1.22.17
+
+Node version:
+ 16.13.2
+
+Platform:
+ darwin x64
+
+Trace:
+ Error: https://registry.yarnpkg.com/uni-read-pages: ETIMEDOUT
+ at Timeout._onTimeout (/usr/local/lib/node_modules/yarn/lib/cli.js:141543:19)
+ at listOnTimeout (node:internal/timers:557:17)
+ at processTimers (node:internal/timers:500:7)
+
+npm manifest:
+ {
+ "dependencies": {
+ "uni-read-pages": "^1.0.5",
+ "uni-simple-router": "^2.0.7"
+ }
+ }
+
+yarn manifest:
+ No manifest
+
+Lockfile:
+ No lockfile
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000..746284a
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,222 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@babel/parser@^7.16.4", "@babel/parser@^7.18.4":
+ "integrity" "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA=="
+ "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz"
+ "version" "7.20.5"
+
+"@vue/compiler-core@3.2.45":
+ "integrity" "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A=="
+ "resolved" "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@babel/parser" "^7.16.4"
+ "@vue/shared" "3.2.45"
+ "estree-walker" "^2.0.2"
+ "source-map" "^0.6.1"
+
+"@vue/compiler-dom@3.2.45":
+ "integrity" "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw=="
+ "resolved" "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@vue/compiler-core" "3.2.45"
+ "@vue/shared" "3.2.45"
+
+"@vue/compiler-sfc@2.7.14":
+ "integrity" "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA=="
+ "resolved" "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz"
+ "version" "2.7.14"
+ dependencies:
+ "@babel/parser" "^7.18.4"
+ "postcss" "^8.4.14"
+ "source-map" "^0.6.1"
+
+"@vue/compiler-sfc@3.2.45":
+ "integrity" "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q=="
+ "resolved" "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@babel/parser" "^7.16.4"
+ "@vue/compiler-core" "3.2.45"
+ "@vue/compiler-dom" "3.2.45"
+ "@vue/compiler-ssr" "3.2.45"
+ "@vue/reactivity-transform" "3.2.45"
+ "@vue/shared" "3.2.45"
+ "estree-walker" "^2.0.2"
+ "magic-string" "^0.25.7"
+ "postcss" "^8.1.10"
+ "source-map" "^0.6.1"
+
+"@vue/compiler-ssr@3.2.45":
+ "integrity" "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ=="
+ "resolved" "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@vue/compiler-dom" "3.2.45"
+ "@vue/shared" "3.2.45"
+
+"@vue/devtools-api@^6.0.0-beta.11":
+ "integrity" "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ=="
+ "resolved" "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz"
+ "version" "6.4.5"
+
+"@vue/reactivity-transform@3.2.45":
+ "integrity" "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ=="
+ "resolved" "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@babel/parser" "^7.16.4"
+ "@vue/compiler-core" "3.2.45"
+ "@vue/shared" "3.2.45"
+ "estree-walker" "^2.0.2"
+ "magic-string" "^0.25.7"
+
+"@vue/reactivity@3.2.45":
+ "integrity" "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A=="
+ "resolved" "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@vue/shared" "3.2.45"
+
+"@vue/runtime-core@3.2.45":
+ "integrity" "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A=="
+ "resolved" "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@vue/reactivity" "3.2.45"
+ "@vue/shared" "3.2.45"
+
+"@vue/runtime-dom@3.2.45":
+ "integrity" "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA=="
+ "resolved" "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@vue/runtime-core" "3.2.45"
+ "@vue/shared" "3.2.45"
+ "csstype" "^2.6.8"
+
+"@vue/server-renderer@3.2.45":
+ "integrity" "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g=="
+ "resolved" "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@vue/compiler-ssr" "3.2.45"
+ "@vue/shared" "3.2.45"
+
+"@vue/shared@3.2.45":
+ "integrity" "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
+ "resolved" "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz"
+ "version" "3.2.45"
+
+"core-js@^2.6.5":
+ "integrity" "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+ "resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz"
+ "version" "2.6.12"
+
+"csstype@^2.6.8":
+ "integrity" "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
+ "resolved" "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz"
+ "version" "2.6.21"
+
+"csstype@^3.1.0":
+ "integrity" "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw=="
+ "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz"
+ "version" "3.1.1"
+
+"estree-walker@^2.0.2":
+ "integrity" "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ "resolved" "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
+ "version" "2.0.2"
+
+"magic-string@^0.25.7":
+ "integrity" "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ=="
+ "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz"
+ "version" "0.25.9"
+ dependencies:
+ "sourcemap-codec" "^1.4.8"
+
+"nanoid@^3.3.4":
+ "integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
+ "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz"
+ "version" "3.3.4"
+
+"picocolors@^1.0.0":
+ "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
+ "version" "1.0.0"
+
+"postcss@^8.1.10", "postcss@^8.4.14":
+ "integrity" "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g=="
+ "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz"
+ "version" "8.4.20"
+ dependencies:
+ "nanoid" "^3.3.4"
+ "picocolors" "^1.0.0"
+ "source-map-js" "^1.0.2"
+
+"source-map-js@^1.0.2":
+ "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
+ "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
+ "version" "1.0.2"
+
+"source-map@^0.6.1":
+ "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
+ "version" "0.6.1"
+
+"sourcemap-codec@^1.4.8":
+ "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
+ "resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
+ "version" "1.4.8"
+
+"uni-read-pages@^1.0.5":
+ "integrity" "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA=="
+ "resolved" "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz"
+ "version" "1.0.5"
+
+"uni-simple-router@^2.0.7":
+ "integrity" "sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA=="
+ "resolved" "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.7.tgz"
+ "version" "2.0.7"
+
+"uview-ui@^2.0.31":
+ "integrity" "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw=="
+ "resolved" "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz"
+ "version" "2.0.31"
+
+"vue-canvas-poster@^1.2.1":
+ "integrity" "sha512-YY5ygbeQSqhiJyj6QXYgSRZ6Ywhvi1gVsfcvBIoCx4Yq9E/gAV32uOhnZz45qsklP86uGc9ypKJAXiX6Dzrdxw=="
+ "resolved" "https://registry.npmjs.org/vue-canvas-poster/-/vue-canvas-poster-1.2.1.tgz"
+ "version" "1.2.1"
+ dependencies:
+ "core-js" "^2.6.5"
+ "vue" "^2.6.10"
+
+"vue@^2.6.10":
+ "integrity" "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ=="
+ "resolved" "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz"
+ "version" "2.7.14"
+ dependencies:
+ "@vue/compiler-sfc" "2.7.14"
+ "csstype" "^3.1.0"
+
+"vue@^3.2.0", "vue@3.2.45":
+ "integrity" "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA=="
+ "resolved" "https://registry.npmjs.org/vue/-/vue-3.2.45.tgz"
+ "version" "3.2.45"
+ dependencies:
+ "@vue/compiler-dom" "3.2.45"
+ "@vue/compiler-sfc" "3.2.45"
+ "@vue/runtime-dom" "3.2.45"
+ "@vue/server-renderer" "3.2.45"
+ "@vue/shared" "3.2.45"
+
+"vuex@^4.0.2":
+ "integrity" "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ=="
+ "resolved" "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz"
+ "version" "4.1.0"
+ dependencies:
+ "@vue/devtools-api" "^6.0.0-beta.11"