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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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` 等所有变量完成再显示 +