Compare commits

...

10 Commits

Author SHA1 Message Date
LiuZhengYu 00735ea718 官网调整 2026-04-15 19:12:35 +08:00
众产-王坤 a34a4f1390 update260119 2026-01-19 11:39:57 +08:00
众产-王坤 ab69be8818 up260118 2026-01-18 17:01:04 +08:00
众产-王坤 3152785e0c up251126 2025-11-26 16:31:56 +08:00
众产-王坤 6333f9bc60 fromdao251126 2025-11-26 13:14:01 +08:00
众产-王坤 b045a8d3db fromdao251122 2025-11-22 01:24:46 +08:00
众产-王坤 c8741c9253 update251118 2025-11-17 08:01:41 +08:00
众产-王坤 5d23fe6469 fromdao251117 2025-11-17 05:51:28 +08:00
众产-王坤 5d6bdcb1e3 dao251108 2025-11-08 21:44:59 +08:00
众产-王坤 02fd685a67 update251108 2025-11-08 21:31:32 +08:00
400 changed files with 32450 additions and 7034 deletions

2
.gitignore vendored
View File

@ -28,4 +28,4 @@ web/ud/2028/*
**/unpackage/ **/unpackage/
**/tmp/ **/tmp/
web.ini web.ini
gitup.bat

10
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 已忽略包含查询文件的默认文件夹
/queries/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/

9
.idea/ciyon.iml Normal file
View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

6
.idea/misc.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="25" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ciyon.iml" filepath="$PROJECT_DIR$/.idea/ciyon.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@ -108,22 +108,62 @@
# 在线演示 # 在线演示
https://ciyon.ciy.cn/ https://ciyon.ciy.cn/
https://ciyon.ciy.cn/admin/
https://ciyon.ciy.cn/admin/ # Windows开发环境部署
[详见教程](https://ciyon.ciy.cn/docs/#100)
# 环境部署建议 部署软件: Nginx、PHP、MariaDB、Golang
建议安装: Git、python3、node.js
开发IDE: VSCode(Cursor/Claude Code/Antigravity)、UniAPP、微信开发者工具
开发工具: Navicat、WinSCP5、Google Chrome、S3 Browser、Apifox
效率工具: XMind、WPS Office、Everything、ToDesk
网络工具: SocketTool、MQTT-Explorer
安装Nginx # Linux生产环境部署
统一处理80/443端口 [详见教程](https://ciyon.ciy.cn/docs/#102)
操作系统: Debian
运维工具: Navicat、WinSCP5+、S3 Browser
安装MariaDB数据库 # 重要更新记录
开启慢查询日志
PHP需配置PHP-fpm建议用PHP8 ## 2026.02.02
- 升级: 路由重构支持软路由需结合Nginx配置
Golang虽然可以独立运行但建议Nginx转发 ## 2025.12.01
- 里程碑: 众产事业平台上线
## 2025.09.06
- 文档: 编写移动端 Demo代码
## 2025.08.25
- 文档: docs文档整理
## 2025.06.12
- 文档: Ciyon文档上线文档整理
## 2025.05.16
- 新增: Ciyon官网上线、Git内部公开发布
## 2025.04.06
- 文档: 编写PC Demo代码
## 2025.02.20
- 升级: 移动端Vue3框架所有组件完成去依赖
## 2024.12.26
- 新增: AI辅助决策。支持多轮AI任务
## 2024.10.05
- 新增: Web3D地编器及ciyearth.js组件库
## 2024.08.30
- 新增: Golang语言开发模式
## 2024.05.21
- 升级: 移动端Vue3/Uniapp兼容框架(原Vue2框架废弃)
## 2024.03.12
- 里程碑: 基于CIYPHP重写开发SaaS框架
IDE开发工具
PC端推荐用VSCode、Cursor
移动端推荐用Uniapp、VSCode

View File

@ -6,9 +6,9 @@ DROP TABLE IF EXISTS `ciy_arearpc`;
CREATE TABLE `ciy_arearpc` ( CREATE TABLE `ciy_arearpc` (
`id` int(11) NOT NULL COMMENT '代码', `id` int(11) NOT NULL COMMENT '代码',
`upid` int(11) NOT NULL COMMENT '上级代码', `upid` int(11) NOT NULL COMMENT '上级代码',
`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '地名', `name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '地名',
PRIMARY KEY (`id`) USING BTREE PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '静态省市区表' ROW_FORMAT = Dynamic; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '静态省市区表' ROW_FORMAT = Dynamic;
-- ---------------------------- -- ----------------------------
-- Records of ciy_arearpc -- Records of ciy_arearpc

File diff suppressed because one or more lines are too long

6061
c5_ciyon_web.sql Normal file

File diff suppressed because one or more lines are too long

View File

@ -16,11 +16,12 @@
"type" : "uniCloud" "type" : "uniCloud"
}, },
{ {
"openVueDevtools" : false, "openVueDevtools" : true,
"type" : "uni-app:app-ios" "type" : "uni-app:app-ios"
}, },
{ {
"openVueDevtools" : false, "customPlaygroundType" : "device",
"openVueDevtools" : true,
"playground" : "standard", "playground" : "standard",
"type" : "uni-app:app-android" "type" : "uni-app:app-android"
}, },

View File

@ -2,17 +2,49 @@
export default { export default {
globalData: {}, globalData: {},
onLaunch: function(lopn) { onLaunch: function(lopn) {
var bggray1 = '#dfdfdf';
var bggray2 = '#bbbbbb';
var bgsel1 = '#ffdc72';
var bgsel2 = '#e65411';
var app = this; var app = this;
app.globalData.scrollcbs = {};
app.globalData.launchopn = lopn; app.globalData.launchopn = lopn;
console.log('launchopn', lopn); console.log('launchopn', lopn);
app.launch(); app.launch();
app.globalData.tabbarArr = []; app.globalData.srv = 't'; //
app.globalData.jsnurl = {};
app.globalData.jsnurl.t = 'https://ciyon.ciy.cn/ambap/';
app.globalData.tokenfield = "ciyap"; //headerH5
app.globalData.tokensalt = "ast34h$3"; //
app.globalData.mainpage = '/pages/main/index'; //tabbar
app.globalData.share_backmainpage = false; //true退
app.globalData.dupsec = 60; //
app.globalData.stordefault = '/'; // / (web)A-Z (OSS/COS/Cloudflare R2)
app.globalData.storlist = { //
'/': 'https://ciyon.ciy.cn/ud/',
'A': 'https://cf5.nyyzsoft.cn/ud/',
'B': 'https://tob-1322789299.cos.ap-nanjing.myqcloud.com/ud/',
'C': 'https://expn.oss-cn-hangzhou.aliyuncs.com/ud/',
};
app.globalData.storthumb = { //100px
'/': '?100',
'A': 'https://cf5.nyyzsoft.cn/cdn-cgi/image/height=100/ud/#img#', //Images
'B': '?imageMogr2/thumbnail/x100',
'C': '?x-oss-process=image/resize,h_100',
}
if (process.env.NODE_ENV === 'development') {
//#ifdef H5
app.globalData.jsnurl.t = 'https://ciyon.local.ciy.cn/ambap/';
app.globalData.storlist['/'] = 'https://ciyon.local.ciy.cn/ud/';
//golang
// app.globalData.jsnurl.t = 'https://ciyongo.local.ciy.cn/';
//#endif
}
var bggray1 = '#dfdfdf'; //1
var bggray2 = '#bbbbbb'; //2
var bgsel1 = '#ffdc72'; //1
var bgsel2 = '#e65411'; //2
app.globalData.tabbarArr = []; //svg
var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M10,515c0,277,225,503,503,503s503-225,503-503l0,0c0-277-225-503-503-503S9,238,10,515L10,515z" fill="{{bg2}}"></path><path d="M777,322L547,178c-28-18-64-18-91,0L226,322c-25,16-40,43-40,73v263c0,76,61,137,137,137h61V633l0,0c0-66,53-119,119-119l0,0c66,0,119,53,119,119v162h61l0,0c76,0,137-61,137-137V395c-1-29-17-56-42-73H777z" fill="{{bg1}}"></path></svg>'; var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M10,515c0,277,225,503,503,503s503-225,503-503l0,0c0-277-225-503-503-503S9,238,10,515L10,515z" fill="{{bg2}}"></path><path d="M777,322L547,178c-28-18-64-18-91,0L226,322c-25,16-40,43-40,73v263c0,76,61,137,137,137h61V633l0,0c0-66,53-119,119-119l0,0c66,0,119,53,119,119v162h61l0,0c76,0,137-61,137-137V395c-1-29-17-56-42-73H777z" fill="{{bg1}}"></path></svg>';
app.globalData.tabbarArr.push({ app.globalData.tabbarArr.push({
name: 'tabbar.index', name: 'tabbar.index',
@ -20,105 +52,35 @@
selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2), selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2) icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
}); });
// var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M969,956L913,810c51-81,107-209,103-313C1008,230,789,15,522,10C237,5,5,237,9,522c4,274,223,494,497,494c69,0,208-38,265-75L932,997C954,998,972,979,969,956L969,956z" fill="{{bg2}}"></path><path d="M715,299l-22,133c-3,16,3,32,15,43l99,94c20,19,20,49,1,69c-7,7-17,12-28,15l-134,21c-16,3-30,12-37,27l-59,122c-12,25-42,35-65,22c-10-5-17-12-22-22l-62-121c-7-15-21-25-37-27l-134-19c-27-4-46-28-42-55c1-11,6-21,14-28l96-96c11-11,17-27,14-43l-23-134c-5-27,14-52,39-57c11-1,22,0,31,5l121,63c15,7,32,7,46,0l119-64c23-12,54-4,67,20C715,277,716,288,715,299z" fill="{{bg1}}"></path></svg>'; // svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M969,956L913,810c51-81,107-209,103-313C1008,230,789,15,522,10C237,5,5,237,9,522c4,274,223,494,497,494c69,0,208-38,265-75L932,997C954,998,972,979,969,956L969,956z" fill="{{bg2}}"></path><path d="M715,299l-22,133c-3,16,3,32,15,43l99,94c20,19,20,49,1,69c-7,7-17,12-28,15l-134,21c-16,3-30,12-37,27l-59,122c-12,25-42,35-65,22c-10-5-17-12-22-22l-62-121c-7-15-21-25-37-27l-134-19c-27-4-46-28-42-55c1-11,6-21,14-28l96-96c11-11,17-27,14-43l-23-134c-5-27,14-52,39-57c11-1,22,0,31,5l121,63c15,7,32,7,46,0l119-64c23-12,54-4,67,20C715,277,716,288,715,299z" fill="{{bg1}}"></path></svg>';
// app.globalData.tabbarArr.push({ // app.globalData.tabbarArr.push({
// name: 'tabbar.zh', // name: 'tabbar.zh',
// fullpath: '/pages/expo', // fullpath: '/pages/expo',
// selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2), // selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
// icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2) // icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
// }); // });
// var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M788,950h-551c-80,0-144-64-144-144V281h839v524C933,886,869,950,788,950L788,950z" fill="{{bg2}}"></path><path d="M685,842H352c-33,0-60-27-60-60s27-60,60-60h333c33,0,60,27,60,60S718,842,685,842z M946,322H80c-41,0-75-33-75-75V136c0-41,33-75,75-75h866c41,0,75,33,75,75v111C1021,288,988,322,946,322z" fill="{{bg1}}"></path></svg>'; // svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M788,950h-551c-80,0-144-64-144-144V281h839v524C933,886,869,950,788,950L788,950z" fill="{{bg2}}"></path><path d="M685,842H352c-33,0-60-27-60-60s27-60,60-60h333c33,0,60,27,60,60S718,842,685,842z M946,322H80c-41,0-75-33-75-75V136c0-41,33-75,75-75h866c41,0,75,33,75,75v111C1021,288,988,322,946,322z" fill="{{bg1}}"></path></svg>';
// app.globalData.tabbarArr.push({ // app.globalData.tabbarArr.push({
// name: 'tabbar.sq', // name: 'tabbar.sq',
// fullpath: '/pages/socg', // fullpath: '/pages/socg',
// selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2), // selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
// icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2) // icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
// }); // });
// var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M207,110h614c109,0,197,88,197,197v416c0,109-88,197-197,197H207c-109,0-197-88-197-197V308C9,198,97,110,207,110z" fill="{{bg2}}"></path><path d="M865,819H118c-10,0-19-9-19-19c0-3,1-7,2-10l26-35c3-6,10-9,17-9h748c10,0,19,9,19,19c0,3-1,7-2,10l-26,35C878,815,872,819,865,819z M451,285c0-8-6-14-14-14h-246c-8,0-14,6-14,14v246c0,8,6,14,14,14h246c8,0,14-6,14-14V285z M909,503c0-8-6-14-14-14H562c-8,0-14,6-14,14v25c0,8,6,14,14,14h333c8,0,14-6,14-14V503z" fill="{{bg1}}"></path></svg>'; // svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M207,110h614c109,0,197,88,197,197v416c0,109-88,197-197,197H207c-109,0-197-88-197-197V308C9,198,97,110,207,110z" fill="{{bg2}}"></path><path d="M865,819H118c-10,0-19-9-19-19c0-3,1-7,2-10l26-35c3-6,10-9,17-9h748c10,0,19,9,19,19c0,3-1,7-2,10l-26,35C878,815,872,819,865,819z M451,285c0-8-6-14-14-14h-246c-8,0-14,6-14,14v246c0,8,6,14,14,14h246c8,0,14-6,14-14V285z M909,503c0-8-6-14-14-14H562c-8,0-14,6-14,14v25c0,8,6,14,14,14h333c8,0,14-6,14-14V503z" fill="{{bg1}}"></path></svg>';
// app.globalData.tabbarArr.push({ // app.globalData.tabbarArr.push({
// name: 'tabbar.cd', // name: 'tabbar.cd',
// fullpath: '/pages/card', // fullpath: '/pages/card',
// selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2), // selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
// icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2) // icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
// }); // });
var svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M706,460c64-38,107-104,107-179c0-118-106-213-237-213c-131,0-237,95-237,213c0,75,43,141,107,179c-181,51-311,206-311,385c0,39,35,70,78,70H938c43,0,78-32,78-70v-5C1017,661,886,511,706,460L706,460z" fill="{{bg1}}"/><path d="M580,472c64-42,107-115,107-197c0-131-106-237-237-237c-131,0-237,106-237,237c0,83,43,155,107,199c-181,57-311,228-311,427c0,43,14,76,57,76l745,1c43,0,78-35,78-78v-6C891,696,761,528,580,472L580,472z" fill="{{bg2}}"/></svg>'; svg = '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M706,460c64-38,107-104,107-179c0-118-106-213-237-213c-131,0-237,95-237,213c0,75,43,141,107,179c-181,51-311,206-311,385c0,39,35,70,78,70H938c43,0,78-32,78-70v-5C1017,661,886,511,706,460L706,460z" fill="{{bg1}}"/><path d="M580,472c64-42,107-115,107-197c0-131-106-237-237-237c-131,0-237,106-237,237c0,83,43,155,107,199c-181,57-311,228-311,427c0,43,14,76,57,76l745,1c43,0,78-35,78-78v-6C891,696,761,528,580,472L580,472z" fill="{{bg2}}"/></svg>';
app.globalData.tabbarArr.push({ app.globalData.tabbarArr.push({
name: 'tabbar.me', name: 'tabbar.me',
fullpath: '/pages/main/me', fullpath: '/pages/main/me',
selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2), selecticon: svg.replaceAll(/{{bg1}}/g, bgsel1).replaceAll(/{{bg2}}/g, bgsel2),
icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2) icon: svg.replaceAll(/{{bg1}}/g, bggray1).replaceAll(/{{bg2}}/g, bggray2)
}); });
app.globalData.errdata = app.getstorage('err');
if (!(app.globalData.errdata instanceof Array))
app.globalData.errdata = [];
app.globalData.srv = 't';
app.globalData.jsnajax = 'z/?func=ambap/';
app.globalData.jsnurl = {};
app.globalData.jsnurl.t = 'https://ciyon.ciy.cn/';
app.globalData.demourl = 'https://i.qiboc.cn/app.goc'; //
app.globalData.tokenfield = "ciyap";
app.globalData.tokensalt = "ast34h$3";
app.globalData.mainpage = '/pages/main/index';
app.globalData.meid = 0;
app.globalData.dupsec = 60;
app.globalData.storselect = '/';
app.globalData.storlist = {
'/': 'https://ciyon.ciy.cn/ud/',
'A': 'https://cf5.xinquanyou.cn/ud/'
};
app.globalData.stortransfer = ['/'];
if (process.env.NODE_ENV === 'development') {
//#ifdef H5
app.globalData.jsnurl.t = 'https://ciyon.local.ciy.cn/';
app.globalData.storlist['/'] = 'https://ciyon.local.ciy.cn/ud/';
//golang
// app.globalData.jsnurl.t = 'http://ciyonhgo.local.ciy.cn/';
//#endif
}
setInterval(() => {
if (app.globalData._restorage) {
app.callajax({
func: 'login.restorage',
data: {},
loadhide: true,
}).then(retjson => {
if (retjson.code != 1)
return;
console.log('新字典已刷新', retjson);
var userdata = app.setuserstorage(retjson);
var ps = getCurrentPages();
userdata.g = app.getstorage('g', {});
for (var p = 0; p < ps.length; p++) {
for (var key in userdata) {
//#ifdef MP-WEIXIN
ps[p].$vm[key] = userdata[key];
//#endif
//#ifndef MP-WEIXIN
ps[p][key] = userdata[key];
//#endif
}
}
});
}
app.globalData._restorage = false;
if (app.globalData.errdata.length > 0) {
app.callajax({
func: 'login.uperr',
data: {
meid: app.getme().id,
err: app.globalData.errdata
},
loadhide: true,
});
app.globalData.errdata = [];
app.removestorage('err');
}
}, 1000);
setInterval(() => { setInterval(() => {
getnewnotice(); getnewnotice();
}, 120000); //2notice }, 120000); //2notice
@ -126,7 +88,7 @@
//lopn me //lopn me
function getnewnotice() { function getnewnotice() {
return; return;
app.callajax({ app.callfunc({
func: 'me.notice_new', func: 'me.notice_new',
showload: false, showload: false,
success: json => { success: json => {
@ -139,21 +101,24 @@
}); });
} }
//#ifdef MP-WEIXIN
const accountInfo = uni.getAccountInfoSync();
app.globalData._version = accountInfo.miniProgram.version;
if (!app.globalData._version)
app.globalData._version = accountInfo.miniProgram.envVersion;
//#endif
// #ifdef APP-PLUS // #ifdef APP-PLUS
plus.runtime.getProperty(plus.runtime.appid, widgetInfo => { plus.runtime.getProperty(plus.runtime.appid, widgetInfo => {
app.globalData._version = widgetInfo.version; app.globalData._version = widgetInfo.version;
}); });
app.appupdate('app'); app.appupdate('app');
uni.getPushClientId({
success: (res) => {
console.log('客户端推送标识:', res);
app.globalData._appcid = res.cid;
}
})
uni.onPushMessage((res) => {
this.alert(JSON.stringify(res));
})
// #endif // #endif
var sysinfo = app.globalData._sysinfo;
// #ifdef APP-PLUS // #ifdef APP-PLUS
var sysinfo = app.globalData._sysinfo;
if (sysinfo.model == 'k71v1_64_bsp') { if (sysinfo.model == 'k71v1_64_bsp') {
app.device_rfid = uni.requireNativePlugin("UhfGModule"); // 133/134/135 app.device_rfid = uni.requireNativePlugin("UhfGModule"); // 133/134/135
app.device_rfid_gunkey = 134; app.device_rfid_gunkey = 134;

View File

@ -1,5 +1,5 @@
<template> <template>
<view class="_voice" @touchstart="start" @touchend="stop"> <view class="_voice" @touchstart="start" @touchend="stop" v-if="benable">
<ciy-ani class="_txt" ref="ani">{{txt}}</ciy-ani> <ciy-ani class="_txt" ref="ani">{{txt}}</ciy-ani>
<ciy-svgimg :src="svg" class="_img" :style="{filter:'hue-rotate('+deg+'deg)'}"></ciy-svgimg> <ciy-svgimg :src="svg" class="_img" :style="{filter:'hue-rotate('+deg+'deg)'}"></ciy-svgimg>
</view> </view>
@ -16,6 +16,7 @@
}, },
data() { data() {
return { return {
benable: true,
bst: false, bst: false,
txt: '', txt: '',
deg: 0, //150 deg: 0, //150
@ -26,36 +27,40 @@
computed: {}, computed: {},
mounted() { mounted() {
var app = getApp(); var app = getApp();
app.globalData.plugin_wechatsi_manager.onStop = res => { if (app.globalData.plugin_wechatsi_manager) {
this.$emit('change', { app.globalData.plugin_wechatsi_manager.onStop = res => {
txt: res.result, this.$emit('change', {
data: res txt: res.result,
}); data: res
this.getrefsSync('ani', this).Doani('op0|op1,200'); });
this.txt = res.result; this.getrefsSync('ani', this).Doani('op0|op1,200');
if (this._t) this.txt = res.result;
clearTimeout(this._t); if (this._t)
this._t = setTimeout(() => { clearTimeout(this._t);
this.getrefsSync('ani', this).Doani('op1|op0,sa1.5,300|hide'); this._t = setTimeout(() => {
}, 5000); this.getrefsSync('ani', this).Doani('op1|op0,sa1.5,300|hide');
}, 5000);
}
app.globalData.plugin_wechatsi_manager.onStart = res => {
console.log("成功开始录音识别", res)
}
app.globalData.plugin_wechatsi_manager.onError = res => {
clearInterval(this._an);
this.deg = 150; //
console.error("error msg", res.msg)
}
this._an = setInterval(() => {
this.deg += 10;
}, 100);
} else {
this.benable = false;
} }
app.globalData.plugin_wechatsi_manager.onStart = res => {
console.log("成功开始录音识别", res)
}
app.globalData.plugin_wechatsi_manager.onError = res => {
clearInterval(this._an);
this.deg = 150; //
console.error("error msg", res.msg)
}
this._an = setInterval(() => {
this.deg += 10;
}, 100);
}, },
unmounted() { unmounted() {
clearInterval(this._an); clearInterval(this._an);
}, },
methods: { methods: {
test(){ test() {
this.getrefsSync('ani', this).Doani('op0|op1,200'); this.getrefsSync('ani', this).Doani('op0|op1,200');
this.txt = 'res.result'; this.txt = 'res.result';
if (this._t) if (this._t)
@ -63,7 +68,7 @@
this._t = setTimeout(() => { this._t = setTimeout(() => {
this.getrefsSync('ani', this).Doani('op1|op0,sa1.5,300|hide'); this.getrefsSync('ani', this).Doani('op1|op0,sa1.5,300|hide');
}, 5000); }, 5000);
}, },
start() { start() {
this.bst = true; this.bst = true;
@ -82,12 +87,6 @@
</script> </script>
<style scoped> <style scoped>
._voice {
position: fixed;
bottom: 3em;
left: calc(50vw - 1.5em);
}
._voice ._img { ._voice ._img {
width: 3em; width: 3em;
height: 3em; height: 3em;

View File

@ -65,14 +65,13 @@
this.mastyle.display = 'block'; this.mastyle.display = 'block';
await this.$nextTick(); await this.$nextTick();
var rect = await this.getrect('._refani'); var rect = await this.getrect('._refani');
console.log('rect.height',rect.height,this.rect.height); //console.log('rect.height',rect.height,this.rect.height);
if (rect.width != 0 && rect.height != 0) if (rect.width != 0 && rect.height != 0)
this.rect = rect; this.rect = rect;
if(this.rect.height) if(this.rect.height)
opn = opn.replace('hhauto', 'hh' + this.rect.height); opn = opn.replace('hhauto', 'hh' + this.rect.height);
else else
opn = opn.replace('hhauto', 'hh0'); opn = opn.replace('hhauto', 'hh0');
console.log(opn);
} }
} }
this._aniing = true; this._aniing = true;

View File

@ -248,7 +248,7 @@
scopes: 'auth_base', scopes: 'auth_base',
onlyAuthorize: true onlyAuthorize: true
}); });
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'login.wx_autouser', func: 'login.wx_autouser',
loadhide: true, loadhide: true,
data: { data: {
@ -293,15 +293,17 @@
if (!this.xieyi && await this.askmsg('是否阅读并同意协议?', '同意') != 'ok') if (!this.xieyi && await this.askmsg('是否阅读并同意协议?', '同意') != 'ok')
return; return;
post.auth = (new Date()).getTime(); post.auth = (new Date()).getTime();
post.appcid = app.globalData._appcid;
var epass = md5.md5(post.pass + app.globalData.tokensalt); var epass = md5.md5(post.pass + app.globalData.tokensalt);
post.pass = md5.md5(epass + post.auth); post.pass = md5.md5(epass + post.auth);
//._from = app.globalData._sysinfo; //._from = app.globalData._sysinfo;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'login.login_mobile', // login.login func: 'login.login_mobile', // login.login
data: post data: post
}); });
if (retjson.code != 1) if (retjson.code != 1)
return this.toast(retjson.errmsg); return this.toast(retjson.errmsg);
this.setstorage('_dbgs', retjson.dbgs);
this.tologin(retjson); this.tologin(retjson);
}, },
async submitreg(e) { async submitreg(e) {
@ -316,10 +318,11 @@
if (!this.xieyi && await this.askmsg('是否阅读并同意协议?', '同意') != 'ok') if (!this.xieyi && await this.askmsg('是否阅读并同意协议?', '同意') != 'ok')
return; return;
post.upid = app.getstorage('upid'); post.upid = app.getstorage('upid');
post.appcid = app.globalData._appcid;
post.pass = md5.md5(post.pass + app.globalData.tokensalt); post.pass = md5.md5(post.pass + app.globalData.tokensalt);
post.pass2 = ''; post.pass2 = '';
//._from = app.globalData._sysinfo; //._from = app.globalData._sysinfo;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'login.reg_mobile', // login.reg func: 'login.reg_mobile', // login.reg
data: post data: post
}); });
@ -341,7 +344,7 @@
if (post.pass != post.pass2) if (post.pass != post.pass2)
return this.toast('两次密码输入不同'); return this.toast('两次密码输入不同');
post.pass = md5.md5(post.pass + app.globalData.tokensalt); post.pass = md5.md5(post.pass + app.globalData.tokensalt);
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'login.forgetpass', // login.reg func: 'login.forgetpass', // login.reg
data: post data: post
}); });
@ -391,8 +394,10 @@
if (this.ver !== 0) if (this.ver !== 0)
return; return;
var app = getApp(); var app = getApp();
var retjson = await this.callajax({ if (app.globalData._wxenv == 'release')
func: 'login.debug', return;
var retjson = await this.callfunc({
func: 'login.debug_list',
data: {} data: {}
}); });
this.tusers = retjson.list; this.tusers = retjson.list;

View File

@ -62,7 +62,7 @@
if(!this.account) if(!this.account)
return this.toast(this.lang('capcode.noinput')); return this.toast(this.lang('capcode.noinput'));
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: this.func, func: this.func,
data:{account:this.account,length:this.codelength} data:{account:this.account,length:this.codelength}
}); });

View File

@ -39,6 +39,11 @@
._gp._left { ._gp._left {
flex-direction: row; flex-direction: row;
justify-content: flex-start;
}
._gp._left ._item {
flex-direction: row;
} }
._gp ._item { ._gp ._item {
@ -48,6 +53,7 @@
gap: 0.5em; gap: 0.5em;
padding: 0.5em; padding: 0.5em;
min-width: 7em; min-width: 7em;
flex-direction: row-reverse;
} }
._gp._itemright ._item { ._gp._itemright ._item {

View File

@ -0,0 +1,164 @@
<template>
<view class="_dbg" :style="{left:left}" @tap.stop="showdbglist" v-if="bshow && me.id>0 && dbgs">
<view class="_dbgbg">
</view>
<view class="_dbgtxt">
{{me.id}}<br />
{{me.name}}
</view>
</view>
</template>
<style scoped>
._dbg {
top: 25em;
position: fixed;
width: 4em;
height: 4em;
z-index: 10000000;
transition: left 0.5s;
}
._dbgbg {
position: relative;
background: #9412cc;
width: 100%;
height: 100%;
border-radius: 50%;
opacity: 0.2;
}
._dbgtxt {
position: absolute;
width: 100%;
height: 100%;
text-align: center;
padding: 0 0.3em;
line-height: 1.3em;
text-shadow: 1px 1px #ffffff, -1px -1px #ffffff, -1px 1px #ffffff, 1px -1px #ffffff;
top: 0.7em;
left: 0;
font-size: 0.8em;
color: #000000;
}
</style>
<script>
export default {
props: {},
data() {
return {
left: '0.3rem',
dbgs: null,
bshow: true
};
},
watch: {},
computed: {},
mounted() {
this.me = this.getme();
this.dbgs = this.getstorage('_dbgs');
},
methods: {
async chguser(item) {
var retjson = await this.callfunc({
func: 'login.debug_chguser',
data: {
code: item.data.user
}
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.me = this.objdeepmerge(this.me, retjson.me);
getApp().setuserstorage(retjson);
var page = this.com_getpage();
page.me = this.me;
if (page.dbgcallback)
page.dbgcallback();
},
async mehide(item) {
this.bshow = false;
if (item.data > 0) {
setTimeout(() => {
this.bshow = true;
}, item.data);
}
},
async meusr(item) {
var btn = await this.inputmsg({
title: '用户ID',
ele: 'input'
}, [{
name: '添加',
btn: 'add'
}, {
name: '删除',
btn: 'del',
cls: 'dag'
}, {
name: '取消',
btn: 'cancel',
cls: 'def'
}]);
if (btn.btn == 'cancel')
return;
if (!btn.text)
return this.toast('请填写用户ID');
var retjson = await this.callfunc({
func: 'login.debug_opuser',
data: btn
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
if (btn.btn == 'add') {
this.dbgs.push(retjson.data);
} else {
var idx = this.arrayfind(this.dbgs, btn.text, 'user');
if (idx > -1)
this.dbgs.splice(idx, 1);
}
this.setstorage('_dbgs', this.dbgs);
},
async showdbglist() {
var items = [];
for (var i = 0; i < this.dbgs.length; i++) {
items.push({
func: 'chguser',
name: this.dbgs[i].name,
sub: this.dbgs[i].user,
data: this.dbgs[i]
});
}
items.push({
br: true
});
items.push({
func: 'mehide',
name: '消失5秒',
style: 'color:var(--warn6)',
data: 5000
});
items.push({
func: 'mehide',
name: '永久隐藏',
style: 'color:var(--dag6)',
data: 0
});
items.push({
func: 'meusr',
name: '增删用户',
style: 'color:var(--man6)',
data: 0
});
this.left = '-2rem';
this.popmenu({
rowcount: 3,
items,
closecb: () => {
this.left = '-0.3rem';
}
});
},
}
}
</script>

View File

@ -2,7 +2,7 @@
<view class="_bg" v-if="bshow"> <view class="_bg" v-if="bshow">
<view class="_dialog" :style="{top:top}"> <view class="_dialog" :style="{top:top}">
<view class="_title">{{title}}</view> <view class="_title">{{title}}</view>
<view class="_close" @click="Close(true)"></view> <view class="_close" @tap="Close(true)"></view>
<view class="_content" :style="{maxHeight:maxheight,height:height}"> <view class="_content" :style="{maxHeight:maxheight,height:height}">
<slot></slot> <slot></slot>
</view> </view>
@ -77,7 +77,7 @@
headerheight, headerheight,
footerheight footerheight
} = await this.com_gethdft(); } = await this.com_gethdft();
this.top = (headerheight + 40) + 'px'; this.top = (headerheight + 60) + 'px';
if (res.height) { if (res.height) {
this.height = res.height; this.height = res.height;
} else { } else {

View File

@ -8,7 +8,7 @@
virtualHost: true virtualHost: true
}, },
behaviors: ['uni://form-field-group'], behaviors: ['uni://form-field-group'],
emits: ['change', 'update:modelValue', 'focus', 'blur'], emits: ['change', 'update:modelValue', 'focus', 'blur', 'input'],
props: { props: {
name: { name: {
type: String type: String
@ -99,9 +99,8 @@
if (txt === undefined) if (txt === undefined)
txt = e.data; txt = e.data;
this.$emit('update:modelValue', txt); this.$emit('update:modelValue', txt);
this.$emit('change', { this.$emit('input', {
name: this.name, name: this.name,
from: 'input',
value: txt value: txt
}); });
}, },
@ -136,6 +135,7 @@
._input._disabled { ._input._disabled {
color: var(--txt1); color: var(--txt1);
} }
._input._bb._disabled { ._input._bb._disabled {
background: var(--bg4); background: var(--bg4);
} }

View File

@ -134,11 +134,11 @@
._btn { ._btn {
background: linear-gradient(100deg, var(--bg4), var(--bg6)); background: linear-gradient(100deg, var(--bg4), var(--bg6));
width: 2rem; width: 1.5rem;
height: 2rem; height: 1.5rem;
font-size: 1.5rem; font-size: 1rem;
text-align: center; text-align: center;
line-height: 2rem; line-height: 1.5rem;
border-radius: 0.3em; border-radius: 0.3em;
} }

View File

@ -9,7 +9,7 @@
<view v-else-if="item.type == 'audio'" style="padding:1em;"> <view v-else-if="item.type == 'audio'" style="padding:1em;">
<ciy-audio :src="file_stor(item.content)"></ciy-audio> <ciy-audio :src="file_stor(item.content)"></ciy-audio>
</view> </view>
<view v-else v-html="item.content" style="width:100%;position: relative;padding:0 1em;"></view> <view v-else v-html="item.content" style="width:100%;position: relative;" :style="{padding:padding}"></view>
</template> </template>
</template> </template>
@ -19,6 +19,10 @@
md: { md: {
type: String, type: String,
default: '' default: ''
},
padding: {
type: String,
default: '0 0.5em'
} }
}, },
data() { data() {
@ -47,74 +51,102 @@
var mds = markdown.split('\n'); var mds = markdown.split('\n');
var htmls = []; var htmls = [];
var html = ''; var html = '';
var ispvs = 0; //01html2
var isol = false; var isol = false;
var titnum = [0, 0, 0, 0, 0]; var titnum = [0, 0, 0, 0, 0];
var tabalign = {};
for (var m in mds) { for (var m in mds) {
if (mds[m].length == 0) { var mdline = mds[m].trim();
continue; if (mdline.length == 0) {
} if (ispvs == 0)
if (mds[m].length > 0 && mds[m].trim() == '') { html += '<br/>';
if (ispvs == 2) {
html += '</table></div>';
ispvs = 0;
}
if (isol) { if (isol) {
isol = false; isol = false;
html += '</ol>'; html += '</ol>';
} }
html += '<br/>';
continue; continue;
} }
if (mds[m][0] == '#') { //1/2/3 if (mdline[0] == '#') { //1/2/3
if (ispvs == 2)
html += '</table></div>';
ispvs = 0;
if (isol) { if (isol) {
isol = false; isol = false;
html += '</ol>'; html += '</ol>';
} }
var cr = mds[m].substring(1, 2).toLowerCase(); var cr = mdline.substring(1, 2).toLowerCase();
if (mds[m].substring(0, 5) == '#####') { if (mdline.substring(0, 5) == '#####') {
if (mds[m].substring(5, 6) == '1') oladd(4, titnum);
html += '<h5 class="md-h5">' + olnum(4, titnum, '、') + convertcode(mds[m].substring(6)) + '</h5>'; if (mdline.substring(5, 6) == '.')
html += '<h5 class="md-h5">' + olnum(4, titnum, '、') + convertcode(mdline.substring(6)) + '</h5>';
else if (mdline.substring(5, 6) == ':')
html += '<div class="md-content">' + olnum(4, titnum, ' ') + convertcode(mdline.substring(6)) + '</div>';
else else
html += '<h5 class="md-h5">' + convertcode(mds[m].substring(5)) + '</h5>'; html += '<h5 class="md-h5">' + convertcode(mdline.substring(5)) + '</h5>';
} else if (mds[m].substring(0, 4) == '####') { } else if (mdline.substring(0, 4) == '####') {
if (mds[m].substring(4, 5) == '1') oladd(3, titnum);
html += '<h4 class="md-h4">' + olnum(3, titnum, '、') + convertcode(mds[m].substring(5)) + '</h4>'; if (mdline.substring(4, 5) == '.')
html += '<h4 class="md-h4">' + olnum(3, titnum, '、') + convertcode(mdline.substring(5)) + '</h4>';
else if (mdline.substring(4, 5) == ':')
html += '<div class="md-content">' + olnum(3, titnum, ' ') + convertcode(mdline.substring(5)) + '</div>';
else else
html += '<h4 class="md-h4">' + convertcode(mds[m].substring(4)) + '</h4>'; html += '<h4 class="md-h4">' + convertcode(mdline.substring(4)) + '</h4>';
} else if (mds[m].substring(0, 3) == '###') { } else if (mdline.substring(0, 3) == '###') {
if (mds[m].substring(3, 4) == '1') oladd(2, titnum);
html += '<h3 class="md-h3">' + olnum(2, titnum, '、') + convertcode(mds[m].substring(4)) + '</h3>'; if (mdline.substring(3, 4) == '.')
html += '<h3 class="md-h3">' + olnum(2, titnum, '、') + convertcode(mdline.substring(4)) + '</h3>';
else if (mdline.substring(3, 4) == ':')
html += '<div class="md-content">' + olnum(2, titnum, ' ') + convertcode(mdline.substring(4)) + '</div>';
else else
html += '<h3 class="md-h3">' + convertcode(mds[m].substring(3)) + '</h3>'; html += '<h3 class="md-h3">' + convertcode(mdline.substring(3)) + '</h3>';
} else if (mds[m].substring(0, 2) == '##') { } else if (mdline.substring(0, 2) == '##') {
if (mds[m].substring(2, 3) == '1') oladd(1, titnum);
html += '<h2 class="md-h2">' + olnum(1, titnum, '、') + convertcode(mds[m].substring(3)) + '</h2>'; if (mdline.substring(2, 3) == '.')
html += '<h2 class="md-h2">' + olnum(1, titnum, '、') + convertcode(mdline.substring(3)) + '</h2>';
else if (mdline.substring(2, 3) == ':')
html += '<div class="md-content">' + olnum(1, titnum, ' ') + convertcode(mdline.substring(3)) + '</div>';
else else
html += '<h2 class="md-h2">' + convertcode(mds[m].substring(2)) + '</h2>'; html += '<h2 class="md-h2">' + convertcode(mdline.substring(2)) + '</h2>';
} else if (cr == 'c') } else {
html += '<h1 class="md-h1" style="text-align:center;">' + convertcode(mds[m].substring(2)) + oladd(0, titnum);
'</h1>'; if (cr == 'c')
else if (cr == 'r') html += '<h1 class="md-h1" style="text-align:center;">' + convertcode(mdline.substring(2)) + '</h1>';
html += '<h1 class="md-h1" style="text-align:right;">' + convertcode(mds[m].substring(2)) + else if (cr == 'r')
'</h1>'; html += '<h1 class="md-h1" style="text-align:right;">' + convertcode(mdline.substring(2)) + '</h1>';
else if (cr == '1') else if (cr == '.')
html += '<h1 class="md-h1">' + olnum(0, titnum, '、') + convertcode(mds[m].substring(2)) + '</h1>'; html += '<h1 class="md-h1">' + olnum(0, titnum, '、') + convertcode(mdline.substring(2)) + '</h1>';
else else if (cr == ':')
html += '<h1 class="md-h1">' + convertcode(mds[m].substring(1)) + '</h1>'; html += '<div class="md-content">' + olnum(0, titnum, ' ') + convertcode(mdline.substring(2)) + '</div>';
else
} else if (mds[m][0] == '@') { //cr html += '<h1 class="md-h1">' + convertcode(mdline.substring(1)) + '</h1>';
var cr = mds[m].substring(1, 2).toLowerCase(); }
} else if (mdline[0] == '@') { //cr
if (ispvs == 2)
html += '</table></div>';
ispvs = 0;
var cr = mdline.substring(1, 2).toLowerCase();
if (cr == 'c') if (cr == 'c')
html += '<div class="md-content" style="text-align:center;">' + convertcode(mds[m].substring(2)) + '</div>'; html += '<div class="md-content" style="text-align:center;">' + convertcode(mdline.substring(2)) + '</div>';
else if (cr == 'r') else if (cr == 'r')
html += '<div class="md-content" style="text-align:right;margin-right:1em;">' + convertcode(mds[m].substring(2)) + '</div>'; html += '<div class="md-content" style="text-align:right;margin-right:1em;">' + convertcode(mdline.substring(2)) + '</div>';
else if (mds[m][1] == '1') { else if (mdline[1] == '.') {
if (!isol) { if (!isol) {
isol = true; isol = true;
html += '<ol>'; html += '<ol>';
} }
html += '<li style="line-height: 1.5em;padding: 0.5em 0;">' + convertcode(mds[m].substring(2)) + '</li>'; html += '<li style="line-height: 1.5em;padding: 0.5em 0;">' + convertcode(mdline.substring(2)) + '</li>';
} else } else
html += '<div class="md-content">' + mds[m].substring(1) + '</div>'; html += '<div class="md-content">' + mdline.substring(1) + '</div>';
} else if (mds[m][0] == '!') { // } else if (mdline[0] == '!') { //
var mis = mds[m].split('|'); if (ispvs == 2)
html += '</table></div>';
ispvs = 0;
var mis = mdline.split('|');
var url = mis[0]; var url = mis[0];
url = this.file_stor(url.substring(1)); url = this.file_stor(url.substring(1));
var ind = url.indexOf('?'); var ind = url.indexOf('?');
@ -154,17 +186,46 @@
content: url content: url
}); });
} }
} else if (mds[m][0] == '<') { //HTML } else if (mdline[0] == '|' && mdline.substring(mdline.length - 1) == '|') { //
html += mds[m]; var trs = mdline.substring(1, mdline.length - 1).split('|');
} else { if (ispvs == 0) {
if (isol) { html += '<div class="md-table-div"><table class="md-table"><tr style="font-weight:bold;">';
isol = false; for (var i in trs) {
html += '</ol>'; var align = 'left';
if (trs[i].substring(trs[i].length - 1) == ':') {
align = 'right';
trs[i] = trs[i].substring(0, trs[i].length - 1);
}
if (trs[i].substring(0, 1) == ':') {
align = 'center';
trs[i] = trs[i].substring(1);
}
tabalign[i] = align;
html += '<td style="text-align:' + align + ';">' + convertcode(trs[i].trim()) + '</td>';
}
} else {
html += '<tr>';
for (var i in trs) {
html += '<td style="text-align:' + tabalign[i] + ';">' + convertcode(trs[i].trim()) + '</td>';
}
} }
html += '<div class="md-content">' + convertcode(mds[m]) + '</div>'; html += '</tr>';
ispvs = 2;
} else if (mdline[0] == '<') { //HTML
if (ispvs == 2)
html += '</table></div>';
ispvs = 1;
html += mdline;
} else {
if (ispvs == 2)
html += '</table></div>';
ispvs = 0;
html += '<div class="md-content">' + convertcode(mdline) + '</div>';
} }
} }
if (html) { if (html) {
if (ispvs == 2)
html += '</table></div>';
if (isol) { if (isol) {
isol = false; isol = false;
html += '</ol>'; html += '</ol>';
@ -176,10 +237,13 @@
} }
return htmls; return htmls;
function olnum(idx, olnum, end) { function oladd(idx, olnum) {
olnum[idx]++; olnum[idx]++;
for (var i = idx + 1; i < olnum.length; i++) for (var i = idx + 1; i < olnum.length; i++)
olnum[i] = 0; olnum[i] = 0;
}
function olnum(idx, olnum, end) {
for (var i = 0; i <= idx; i++) { for (var i = 0; i <= idx; i++) {
if (olnum[i] == 0) if (olnum[i] == 0)
continue; continue;

View File

@ -294,70 +294,6 @@
, upimg: function(b) { , upimg: function(b) {
if (this.Grunning) if (this.Grunning)
return app.toast('上传中...'); return app.toast('上传中...');
//if (app.boi && app.boi.inboi()) {
var thos = this;
uni.chooseImage({
count: 9
, sizeType: ['original', 'compressed']
, success: res => {
console.log('choose', res);
var upcount = res.tempFilePaths.length;
thos.Grunning = true;
thos.imgtip = '上传 0/' + upcount;
var upidx = 0;
for (var u in res.tempFilePaths) {
(function(idx, img) {
var updata = {};
updata.imgact = thos.imgact;
uni.uploadFile({
url: thos.uploadurl
, filePath: img
, name: 'file'
, formData: updata
, header: {
'ciyauth': app.getstorage("_auth")
, 'ciyorg': app.getstorage("_org")
}
, success: res => {
var jsonup = app.json_parse(res.data);
if (jsonup === null)
jsonup = {
code: 0
, errmsg: 'JSON Parse ERROR:' + res.data.substr(0, 30)
}
upidx++;
if (jsonup.code != 1) {
thos.Grunning = false;
thos.imgtip = '';
if (jsonup.code == 2) {
app.askmsg('您尚未登录,请登录后上传\n立即前往登录', () => {
uni.navigateTo({
url: '/main/login'
});
});
} else
thos.alert('上传失败:' + jsonup.errmsg);
return;
}
thos.doedit('!', jsonup.url);
thos.$emit('change', {
name: thos.name
, from: 'upimg'
, url: jsonup.url
, value: thos.valuetxt
});
thos.imgtip = '上传 ' + upidx + '/' + upcount;
if (upidx == upcount) {
thos.Gvalue = true;
thos.imgtip = '';
thos.Grunning = false;
}
}
});
})(u, res.tempFilePaths[u]);
}
}
});
} }
} }
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<ciy-anipop v-model="popsh" maskbg="#00000055"> <ciy-anipop v-model="popsh" maskbg="#00000055" @change="popclose">
<view class="_menu"> <view class="_menu">
<view class="_title" v-if="title">{{title}}</view> <view class="_title" v-if="title">{{title}}</view>
<slot name="list" :data="{items:items, rowcount:rowcount}"> <slot name="list" :data="{items:items, rowcount:rowcount}">
@ -10,6 +10,7 @@
<view v-else class="_item" @tap="selitem(index)"> <view v-else class="_item" @tap="selitem(index)">
<view class="_icon" v-if="item.icon"><ciy-svgimg :src="item.icon"></ciy-svgimg></view> <view class="_icon" v-if="item.icon"><ciy-svgimg :src="item.icon"></ciy-svgimg></view>
<view class="_name" :style="item.style" v-if="item.name">{{lang(item.name)}}</view> <view class="_name" :style="item.style" v-if="item.name">{{lang(item.name)}}</view>
<view class="_sub" v-if="item.sub">{{item.sub}}</view>
</view> </view>
</template> </template>
</view> </view>
@ -76,6 +77,11 @@
._list ._name { ._list ._name {
color: var(--txt7); color: var(--txt7);
} }
._list ._sub {
font-size:0.7em;
color: var(--txt1);
}
</style> </style>
<script> <script>
@ -112,7 +118,11 @@
selitem(idx) { selitem(idx) {
this.popsh = false; this.popsh = false;
this.resolvecb({...this.items[idx]}); this.resolvecb({...this.items[idx]});
} },
popclose(e) {
if(!e.value)
this.resolvecb({close:true});
},
} }
} }
</script> </script>

View File

@ -201,6 +201,11 @@
._gp._left { ._gp._left {
flex-direction: row; flex-direction: row;
justify-content: flex-start;
}
._gp._left ._item {
flex-direction: row;
} }
._gp ._item { ._gp ._item {
@ -210,6 +215,7 @@
gap: 0.5em; gap: 0.5em;
min-width: 7em; min-width: 7em;
padding: 0.5em; padding: 0.5em;
flex-direction: row-reverse;
} }
._gp._itemright ._item { ._gp._itemright ._item {

View File

@ -1,194 +0,0 @@
<template>
<view style="width:100%;">
<input type="hidden" :name="name" :value="tkv.id" style="display:none;" />
<template v-if="hasmore">
<input type="hidden" :name="name+'_name'" :value="tkv.name" style="display:none;" />
</template>
<radio-group class="_gp" :class="{'_line':line,'_left':left,'_itemright':itemright}">
<view @tap="chkitem(item)" class="_item" v-for="(item,index) in range" :key="index">
<ciy-checkitem style="pointer-events: none;" :disabled="disabled" :tag="item.id+''" :value="tkv.id == item.id"></ciy-checkitem>
<view :style="{color:disabled?'var(--txt1)':''}">{{item.name}}</view>
</view>
</radio-group>
</view>
</template>
<script>
export default {
behaviors: ['uni://form-field-group'],
emits: ['change', 'update:modelValue'],
props: {
name: {
type: String
},
modelValue: {
type: [String, Number],
default: ''
},
value: {
type: [String, Number],
default: ''
},
disabled: {
type: Boolean,
default: false
},
initevent: {
type: Boolean,
default: false
},
hasmore: {
type: Boolean,
default: false
},
range: {
type: Array,
default: []
},
left: {
type: Boolean,
default: false
},
itemright: {
type: Boolean,
default: false
},
line: {
type: Boolean,
default: false
},
byname: {
type: Boolean,
default: false
}
},
data() {
return {
v: '',
valuearr: {
id: 0,
name: ''
},
};
},
watch: {
tkv: {
handler(newD, oldD) {
if (this.from && newD.id == oldD.id)
return;
if (!this.from)
this.from = 'init';
else if (this.from == 'init') {
this.from = 'check';
}
if (this.from != 'init') {
if (this.byname)
this.$emit('update:modelValue', newD.name);
else
this.$emit('update:modelValue', newD.id);
}
if (this.from != 'init' || this.initevent) {
this.$emit('change', {
name: this.name,
from: this.from,
value: {
id: newD.id,
name: newD.name
}
});
}
},
immediate: true
},
value: {
handler(newD, oldD) {
if (newD || oldD)
this.v = 'value';
},
immediate: true
},
modelValue: {
handler(newD, oldD) {
if (newD || oldD)
this.v = 'modelValue';
},
immediate: true
}
},
computed: {
tkv() {
var val = '';
if (this.v == 'modelValue') {
if (typeof(this.modelValue) == 'number')
val = this.modelValue;
else if (this.modelValue)
val = this.modelValue;
} else if (this.v == 'value') {
if (typeof(this.value) == 'number')
val = this.value;
else if (this.value)
val = this.value;
} else {
val = this.v;
}
if (this.byname) {
for (var i in this.range) {
if (this.range[i].name == val)
return {
...this.range[i]
};
}
} else {
for (var i in this.range) {
if (this.range[i].id == val)
return {
...this.range[i]
};
}
}
return {
id: 0,
name: ''
};
}
},
mounted() {},
methods: {
chkitem(itm) {
if (this.disabled)
return;
this.v = itm.id;
}
}
}
</script>
<style scoped>
._gp {
display: flex;
flex-wrap: wrap;
flex-direction: row-reverse;
}
._gp._left {
flex-direction: row;
}
._gp ._item {
white-space: nowrap;
display: flex;
gap: 0.5em;
min-width: 7em;
padding: 0.5em;
}
._gp._itemright ._item {
justify-content: flex-start;
flex-direction: row-reverse;
}
._gp._line ._item {
width: 100%;
white-space: normal;
}
</style>

View File

@ -14,19 +14,19 @@
<view class="_btn" :class="{_disabled:disabled}" @tap="map_select"> <view class="_btn" :class="{_disabled:disabled}" @tap="map_select">
<view class="_icon _mapicon"></view> <view class="_icon _mapicon"></view>
</view> </view>
<slot name="show" :data="{value:tvalue, loc:loc}"> <slot name="show" :data="{value:tvalue, loc:loc, bet:innerbet}">
<view style="line-height:1.5em;font-size:0.9em;flex: 1; margin-left:0.5em;text-align:left;"> <view style="line-height:1.5em;font-size:0.9em;flex: 1; margin-left:0.5em;text-align:left;">
<view v-if="loc.name || loc.addr">{{loc.name}}<br />{{loc.addr}}</view> <view v-if="loc.name || loc.addr">{{loc.name}}<br />{{loc.addr}}</view>
<view v-else-if="isfloat0(tvalue.lat)" style="padding-top:0.3em;display:inline-block;">{{lang('selmap.select')}}</view> <view v-else-if="tvalue.lat == 0" style="padding-top:0.3em;display:inline-block;">{{lang('selmap.select')}}</view>
<view v-else style="padding-top:0.3em;display:inline-block;">{{lang('selmap.loced')}}</view> <view v-else style="padding-top:0.3em;display:inline-block;">{{lang('selmap.loced')}}</view>
</view> </view>
</slot> </slot>
</template> </template>
<template v-else> <template v-else>
<slot name="show" :data="{value:tvalue, loc:loc}"> <slot name="show" :data="{value:tvalue, loc:loc, bet:innerbet}">
<view style="line-height:1.5em;font-size:0.9em;flex: 1; margin-right:0.5em;"> <view style="line-height:1.5em;font-size:0.9em;flex: 1; margin-right:0.5em;">
<view v-if="loc.name || loc.addr">{{loc.name}}<br />{{loc.addr}}</view> <view v-if="loc.name || loc.addr">{{loc.name}}<br />{{loc.addr}}</view>
<view v-else-if="isfloat0(tvalue.lat)" style="padding-top:0.3em;display:inline-block;">{{lang('selmap.select')}}</view> <view v-else-if="tvalue.lat == 0" style="padding-top:0.3em;display:inline-block;">{{lang('selmap.select')}}</view>
<view v-else style="padding-top:0.3em;display:inline-block;">{{lang('selmap.loced')}}</view> <view v-else style="padding-top:0.3em;display:inline-block;">{{lang('selmap.loced')}}</view>
</view> </view>
</slot> </slot>
@ -64,6 +64,10 @@
type: Boolean, type: Boolean,
default: false default: false
}, },
bet: {
type: [String, Number],
default: 10000000
},
lat: { lat: {
type: [String, Number], type: [String, Number],
default: '' default: ''
@ -110,6 +114,12 @@
ret.lng = this.tofloat(this.lng); ret.lng = this.tofloat(this.lng);
} }
return ret; return ret;
},
innerbet() {
var bet = this.bet;
if (bet <= 1)
return 1;
return this.toint(bet);
} }
}, },
mounted() {}, mounted() {},
@ -118,20 +128,23 @@
if (this.disabled) if (this.disabled)
return; return;
var result; var result;
if (this.isfloat0(this.lat)) { if (this.toint(this.lat) == 0) {
result = this.getstorage('_map'); result = this.getstorage('_map');
if (!result || result.length != 2) { if (!result || result.length != 2) {
result = [116.4, 39.8]; result = [1164000000, 398000000];
} else { } else {
result[0] += 0.005 * Math.random(); result[0] += 50000 * Math.random();
result[1] += 0.005 * Math.random(); result[1] += 50000 * Math.random();
} }
} else } else {
result = gcoord.transform([this.lng, this.lat], gcoord.WGS84, gcoord.GCJ02); result = gcoord.transform([this.lng / this.innerbet, this.lat / this.innerbet], gcoord.WGS84, gcoord.GCJ02);
result[0] = this.caldectoint(result[0]);
result[1] = this.caldectoint(result[1]);
}
try { try {
var retchoose = await uni.chooseLocation({ var retchoose = await uni.chooseLocation({
longitude: result[0], longitude: result[0] / this.innerbet,
latitude: result[1] latitude: result[1] / this.innerbet
}); });
} catch (res) { } catch (res) {
if (res.errMsg.indexOf('cancel') > -1) if (res.errMsg.indexOf('cancel') > -1)
@ -142,6 +155,8 @@
if (!retchoose.longitude) if (!retchoose.longitude)
return this.alert(this.lang('selmap.noselect')); return this.alert(this.lang('selmap.noselect'));
var result = gcoord.transform([retchoose.longitude, retchoose.latitude], gcoord.GCJ02, gcoord.WGS84); var result = gcoord.transform([retchoose.longitude, retchoose.latitude], gcoord.GCJ02, gcoord.WGS84);
result[0] = this.caldectoint(result[0]);
result[1] = this.caldectoint(result[1]);
this.setstorage('_map', result); this.setstorage('_map', result);
this.loc.name = retchoose.name; this.loc.name = retchoose.name;
this.loc.addr = retchoose.address; this.loc.addr = retchoose.address;
@ -175,6 +190,11 @@
// gcoord.EPSG4326 [lng,lat] WGS-84WGS-84 // gcoord.EPSG4326 [lng,lat] WGS-84WGS-84
// gcoord.EPSG3857 [x,y] Web MercatorWebMercator // gcoord.EPSG3857 [x,y] Web MercatorWebMercator
// gcoord.EPSG900913 [x,y] Web MercatorWebMercator // gcoord.EPSG900913 [x,y] Web MercatorWebMercator
},
caldectoint(dec) {
if (this.innerbet <= 1)
return dec;
return this.toint(dec * this.innerbet);
} }
} }
} }

View File

@ -92,7 +92,9 @@
morevalue: { morevalue: {
handler(newD, oldD) { handler(newD, oldD) {
this.v = this.modelValue || this.value; this.v = this.modelValue || this.value;
this.innermore = {...newD}; this.innermore = {
...newD
};
}, },
immediate: true immediate: true
}, },
@ -100,7 +102,9 @@
computed: { computed: {
tvalue() { tvalue() {
var val = ''; var val = '';
var valmore = {...this.innermore}; var valmore = {
...this.innermore
};
if (this.v == 'modelValue') { if (this.v == 'modelValue') {
if (typeof(this.modelValue) == 'number') if (typeof(this.modelValue) == 'number')
val = this.modelValue; val = this.modelValue;
@ -143,8 +147,12 @@
url: this.page + '?sel=true&id=' + this.tvalue.id, url: this.page + '?sel=true&id=' + this.tvalue.id,
events: { events: {
writedata: data => { writedata: data => {
this.v = data; this.v = {
this.innertext = data.name; ...data
};
this.innermore = {
...data
};
this.$emit('update:modelValue', data.id); this.$emit('update:modelValue', data.id);
this.$emit('change', { this.$emit('change', {
name: this.name, name: this.name,

View File

@ -2,12 +2,12 @@
<view style="display:flex;"> <view style="display:flex;">
<view v-if="picarr.length > 0 && label" style="width: 1em;margin-right: 0.5em;line-height: 1.2em;color: #999999;">{{label}}</view> <view v-if="picarr.length > 0 && label" style="width: 1em;margin-right: 0.5em;line-height: 1.2em;color: #999999;">{{label}}</view>
<view v-if="type == 'thumb'" style="flex:1;"> <view v-if="type == 'thumb'" style="flex:1;">
<video :id="'video' + index" v-for="(item,index) in videoarr" :key="index" :src="file_stor(item)" controls @click="fullvideo('video' + index)" :show-fullscreen-btn="false" :style="{width:width,height:height,margin:'0 0.5em 0 0'}"></video> <video :id="'video' + index" v-for="(item,index) in videoarr" :key="index" :src="file_stor(item)" controls @tap="fullvideo('video' + index)" :show-fullscreen-btn="false" :style="{width:width,height:height,margin:'0 0.5em 0 0'}"></video>
<image lazy-load :lazy-load-margin="0" @tap.stop="preview(index)" :src="item" v-for="(item,index) in picarr" :key="index" :mode="mode" :style="{width:width,height:height,margin:'0 0.5em 0 0'}" style="border-radius:0.3em;" /> <image lazy-load :lazy-load-margin="0" @tap.stop="preview(index)" :src="item" v-for="(item,index) in picarr" :key="index" :mode="mode" :style="{width:width,height:height,margin:'0 0.5em 0 0'}" style="border-radius:0.3em;" />
<view @tap.stop="openfile(index)" v-for="(item,index) in pdfarr" :key="index" :style="{width:width,height:height,lineHeight: height}" style="margin:0 0.5em 0 0;border-radius:0.3em;display:inline-block;vertical-align: top;border: 1px solid #cccccc;text-align: center;color:#000000;background: #ffffff;">{{lang('showimgs.att')}}{{index+1}}</view> <view @tap.stop="openfile(index)" v-for="(item,index) in pdfarr" :key="index" :style="{width:width,height:height,lineHeight: height}" style="margin:0 0.5em 0 0;border-radius:0.3em;display:inline-block;vertical-align: top;border: 1px solid #cccccc;text-align: center;color:#000000;background: #ffffff;">{{lang('showimgs.att')}}{{index+1}}</view>
</view> </view>
<view v-else style="flex:1;"> <view v-else style="flex:1;">
<video :id="'video' + index" v-for="(item,index) in videoarr" :key="index" :src="file_stor(item)" controls @click="fullvideo('video' + index)" :show-fullscreen-btn="false" :style="{width:width,margin:'0 0 -2px 0;'}"></video> <video :id="'video' + index" v-for="(item,index) in videoarr" :key="index" :src="file_stor(item)" controls @tap="fullvideo('video' + index)" :show-fullscreen-btn="false" :style="{width:width,margin:'0 0 -2px 0;'}"></video>
<image lazy-load :lazy-load-margin="0" @tap.stop="preview(index)" :src="item" v-for="(item,index) in picarr" :key="index" :mode="mode" :style="{width:width}" style="margin:0 0 -2px 0;" /> <image lazy-load :lazy-load-margin="0" @tap.stop="preview(index)" :src="item" v-for="(item,index) in picarr" :key="index" :mode="mode" :style="{width:width}" style="margin:0 0 -2px 0;" />
<view @tap.stop="openfile(index)" v-for="(item,index) in pdfarr" :key="index" :style="{width:width,height:height,lineHeight: height,margin:index==0?'0':'0 0.5em 0 0'}" style="border-radius:0.3em;display:inline-block;vertical-align: top;border: 1px solid #cccccc;text-align: center;color:#000000;background: #ffffff;">{{lang('showimgs.att')}}{{index+1}}</view> <view @tap.stop="openfile(index)" v-for="(item,index) in pdfarr" :key="index" :style="{width:width,height:height,lineHeight: height,margin:index==0?'0':'0 0.5em 0 0'}" style="border-radius:0.3em;display:inline-block;vertical-align: top;border: 1px solid #cccccc;text-align: center;color:#000000;background: #ffffff;">{{lang('showimgs.att')}}{{index+1}}</view>
</view> </view>
@ -41,10 +41,6 @@
type: String, type: String,
default: 'aspectFill' default: 'aspectFill'
}, },
whpre: {
type: String,
default: '?50'
},
}, },
data() { data() {
return { return {
@ -73,7 +69,7 @@
continue; continue;
var ind = ps[i].lastIndexOf('.'); var ind = ps[i].lastIndexOf('.');
var ext = ps[i].substring(ind + 1).toUpperCase(); var ext = ps[i].substring(ind + 1).toUpperCase();
if (ext == 'JPG' || ext == 'JPEG' || ext == 'GIF' || ext == 'PNG') if (ext == 'JPG' || ext == 'JPEG' || ext == 'GIF' || ext == 'PNG' || ext == 'WEBP')
images.push(ps[i]); images.push(ps[i]);
else if (ext == 'MP4') else if (ext == 'MP4')
this.videoarr.push(ps[i]); this.videoarr.push(ps[i]);
@ -81,19 +77,8 @@
this.pdfarr.push(ps[i]); this.pdfarr.push(ps[i]);
} }
for (var i in images) { for (var i in images) {
var ind = images[i].indexOf('|'); this.picarr.push(this.file_stor(images[i], 'thumb'));
var psm = ''; this.picoriarr.push(this.file_stor(images[i]));
var pbig = '';
if (ind > -1) {
psm = images[i].substr(0, ind);
pbig = images[i].substr(ind + 1);
} else {
pbig = images[i];
}
if (psm == '')
psm = pbig;
this.picarr.push(this.file_stor(psm));
this.picoriarr.push(this.file_stor(pbig));
} }
}, },
preview(idx) { preview(idx) {
@ -106,9 +91,7 @@
openfile(idx) { openfile(idx) {
var app = getApp(); var app = getApp();
app.toast('Downloading...'); app.toast('Downloading...');
var url = this.pdfarr[idx]; var url = this.file_stor(this.pdfarr[idx]);
if (url.substr(0, 1) == '/')
url = app.globalData.jsnurl[this.srv] + url;
uni.downloadFile({ uni.downloadFile({
url: url, url: url,
success: res => { success: res => {

View File

@ -46,21 +46,14 @@
} }
var ext = this.file_ext(newD); var ext = this.file_ext(newD);
if (ext == 'SVG') { if (ext == 'SVG') {
uni.request({ this.calltxt({
url: this.file_stor(newD), url: this.file_stor(newD),
dataType: 'text', }).then(res => {
method: 'GET', this.type = 'svg';
fail: res => { this.srcdata = this.svg2bg(res);
res._url = url; }).catch(err => {
this.uperr("h5.loadsvg.fail", res); err._url = url;
return reject({ this.uperr("h5.loadsvg.fail", err);
errmsg: res.errMsg
});
},
success: res => {
this.type = 'svg';
this.srcdata = this.svg2bg(res.data);
}
}); });
} else { } else {
this.type = 'img'; this.type = 'img';

View File

@ -5,7 +5,7 @@
</view> </view>
<view class="_title">{{title}}</view> <view class="_title">{{title}}</view>
<slot></slot> <slot></slot>
<view class="_right" v-if="right" v-html="right"></view> <view class="_right txt-wl" v-if="right" v-html="right"></view>
<view class="_reddot" v-if="reddot">{{reddot>99?'99+':reddot}}</view> <view class="_reddot" v-if="reddot">{{reddot>99?'99+':reddot}}</view>
<view class="_more" v-if="more"></view> <view class="_more" v-if="more"></view>
</view> </view>
@ -39,12 +39,13 @@
text-overflow: ellipsis; text-overflow: ellipsis;
min-width: 7em; */ min-width: 7em; */
line-height: 1.1em; line-height: 1.1em;
user-select: none;
-webkit-user-select: none;
} }
._list>._right { ._list>._right {
pointer-events: none; pointer-events: none;
text-align: right; text-align: right;
font-weight: 100;
margin: 0 1em; margin: 0 1em;
line-height: 1.2em; line-height: 1.2em;
overflow: hidden; overflow: hidden;

View File

@ -9,7 +9,7 @@
virtualHost: true virtualHost: true
}, },
behaviors: ['uni://form-field-group'], behaviors: ['uni://form-field-group'],
emits: ['change', 'update:modelValue', 'focus', 'blur', 'linechange'], emits: ['change', 'update:modelValue', 'focus', 'blur', 'linechange', 'input'],
props: { props: {
name: { name: {
type: String type: String
@ -58,7 +58,7 @@
data() { data() {
return { return {
totaltxt: '0字', totaltxt: '0字',
cursor:0 cursor: 0
}; };
}, },
watch: {}, watch: {},
@ -100,9 +100,8 @@
txt = e.data; txt = e.data;
this.total(txt); this.total(txt);
this.$emit('update:modelValue', txt); this.$emit('update:modelValue', txt);
this.$emit('change', { this.$emit('input', {
name: this.name, name: this.name,
from: 'input',
value: txt value: txt
}); });
}, },
@ -133,7 +132,7 @@
overflow: auto; overflow: auto;
width: 100%; width: 100%;
z-index: 0; z-index: 0;
max-height:80vh; max-height: 50vh;
/* 解决微信覆盖bug */ /* 解决微信覆盖bug */
} }

View File

@ -0,0 +1,43 @@
<template>
<view v-for="(item,index) in sem" :key="index" class="flex1" @tap="clkitem(index)">
<view :class="numclass">
<ciy-shownum :value="item.num" :unit="item.unit"></ciy-shownum>
</view>
<view :class="nameclass">{{item.name}}</view>
</view>
</template>
<script>
export default {
emits: ['change', 'update:modelValue'],
props: {
sem: {
type: [Array],
default: []
},
numclass: {
type: [String],
default: 'txt-lgg'
},
nameclass: {
type: [String],
default: 'txt-sm py2'
},
},
data() {
return {};
},
watch: {},
computed: {},
mounted() {},
methods: {
clkitem(idx) {
if (this.sem[idx].url)
this.gourl(this.sem[idx].url);
}
}
}
</script>
<style scoped>
</style>

View File

@ -5,13 +5,14 @@
<view class="_icon _photo"></view> <view class="_icon _photo"></view>
</view> </view>
<ciy-gesture class="_pimg" v-for="(item,index) in tvalue.imgs" :key="index" :style="{'display':'block','width':showwh}" @toleft="toleft(index)" @toright="toright(index)"> <ciy-gesture class="_pimg" v-for="(item,index) in tvalue.imgs" :key="index" :style="{'display':'block','width':showwh}" @toleft="toleft(index)" @toright="toright(index)">
<view class="_del" :data-idx="index" @tap="photo_delone"></view> <view v-if="!disabled" class="_del" :data-idx="index" @tap="photo_delone"></view>
<image v-if="isimg(item)" :src="file_stor(item, '?50')" @tap="preview(index)" mode="widthFix" style="display:block;"></image> <image v-if="isimg(item)" :src="file_stor(item, '?50')" @tap="preview(index)" mode="widthFix" style="display:block;"></image>
<video v-else-if="isvideo(item)" :id="'video' + index" :src="file_stor(item)" controls @tap="fullvideo('video' + index)" :show-fullscreen-btn="false" :style="{width:showwh,height:showwh}"></video> <video v-else-if="isvideo(item)" :id="'video' + index" :src="file_stor(item)" controls @tap="fullvideo('video' + index)" :show-fullscreen-btn="false" :style="{width:showwh,height:showwh}"></video>
<view v-else class="_file">{{file_ext(item)}}</view> <view v-else class="_file">{{file_ext(item)}}</view>
</ciy-gesture> </ciy-gesture>
<view class="_tip">{{tip}}</view> <view class="_tip">{{tip}}</view>
<canvas type="2d" id="canvas" :style="{'width':cvwidth+'px','height':cvheight+'px','top':-cvheight+'px'}" style="position:fixed;z-index:-999;left:100vw;"></canvas> <canvas type="2d" :canvas-id="cvid" :id="cvid" :style="{'width':cvwidth+'px','height':cvheight+'px','top':-cvheight + 'px'}" :width="cvwidth" :height="cvheight" style="position:fixed;z-index:-999;left:100vw;"></canvas>
<!-- <canvas type="2d" :canvas-id="cvid" :id="cvid" :style="{'width':cvwidth+'px','height':cvheight+'px','top':'2px'}" :width="cvwidth" :height="cvheight" style="position:fixed;z-index:999;left:2px;border:2px solid #ff0000"></canvas> -->
</view> </view>
<view v-if="showrecam" :style="{top:header_height+'px'}" style="z-index:50005;position: fixed;left:0;right:0;bottom:0;background:linear-gradient(327deg,var(--bg1),var(--man3))"> <view v-if="showrecam" :style="{top:header_height+'px'}" style="z-index:50005;position: fixed;left:0;right:0;bottom:0;background:linear-gradient(327deg,var(--bg1),var(--man3))">
<image v-if="cammaskpng" :src="file_stor(cammaskpng)" class="abs t0 l0" :style="{pointerEvents: 'none',zIndex:50006,opacity:0.8,width: '100%', height: cameraheight + 'vw'}"></image> <image v-if="cammaskpng" :src="file_stor(cammaskpng)" class="abs t0 l0" :style="{pointerEvents: 'none',zIndex:50006,opacity:0.8,width: '100%', height: cameraheight + 'vw'}"></image>
@ -103,7 +104,7 @@
}, },
stor: { stor: {
type: String, type: String,
default: '/' default: ''
}, },
imgwidth: { imgwidth: {
type: [String, Number], type: [String, Number],
@ -119,7 +120,7 @@
}, },
zipjpg: { zipjpg: {
type: [String, Number], type: [String, Number],
default: 0.7 default: 70
}, },
waterfont: { waterfont: {
type: String, type: String,
@ -172,8 +173,9 @@
cameraheight: '141.4', cameraheight: '141.4',
recamrange: [], recamrange: [],
recamimgs: [], recamimgs: [],
cvwidth: 0, cvid: '',
cvheight: 0 cvwidth: 88,
cvheight: 88
}; };
}, },
watch: { watch: {
@ -242,6 +244,7 @@
}, },
mounted() { mounted() {
var app = getApp(); var app = getApp();
this.cvid = 'offcanvas_' + parseInt(Math.random() * 1000000);
this.header_height = app.globalData._header_statusbar_height; this.header_height = app.globalData._header_statusbar_height;
this.recamrange.push({ this.recamrange.push({
id: '100', id: '100',
@ -455,9 +458,9 @@
this.showrecam = true; this.showrecam = true;
}, },
async vcamera(b) { async vcamera(b) {
if (!uni.chooseMedia) { // #ifdef H5 || APP-PLUS
return this.vh5(); return this.vh5(b, ['camera']);
} // #endif
var count = this.toint(this.num) - this.tvalue.imgs.length; var count = this.toint(this.num) - this.tvalue.imgs.length;
if (count <= 0) if (count <= 0)
return this.toast(this.lang('upload.maxmsg').replace('{n}', this.num)); return this.toast(this.lang('upload.maxmsg').replace('{n}', this.num));
@ -481,9 +484,9 @@
this.upfiles(retchoose.tempFiles, 'camera'); this.upfiles(retchoose.tempFiles, 'camera');
}, },
async valbum(b) { async valbum(b) {
if (!uni.chooseMedia) { // #ifdef H5 || APP-PLUS
return this.vh5(); return this.vh5(b, ['album']);
} // #endif
var count = this.toint(this.num) - this.tvalue.imgs.length; var count = this.toint(this.num) - this.tvalue.imgs.length;
if (count <= 0) if (count <= 0)
return this.toast(this.lang('upload.maxmsg').replace('{n}', this.num)); return this.toast(this.lang('upload.maxmsg').replace('{n}', this.num));
@ -506,9 +509,9 @@
this.upfiles(retchoose.tempFiles, 'album'); this.upfiles(retchoose.tempFiles, 'album');
}, },
async vmessage(b) { async vmessage(b) {
if (!uni.chooseMessageFile) { // #ifdef H5 || APP-PLUS
return this.vh5(); return this.vh5(b, ['album']);
} // #endif
var count = this.toint(this.num) - this.tvalue.imgs.length; var count = this.toint(this.num) - this.tvalue.imgs.length;
if (count <= 0) if (count <= 0)
return this.toast(this.lang('upload.maxmsg').replace('{n}', this.num)); return this.toast(this.lang('upload.maxmsg').replace('{n}', this.num));
@ -533,14 +536,14 @@
return console.warn('chooseMessageFile', err); return console.warn('chooseMessageFile', err);
this.upfiles(retchoose.tempFiles, 'message'); this.upfiles(retchoose.tempFiles, 'message');
}, },
async vh5(b) { async vh5(b, source) {
var count = this.toint(this.num) - this.tvalue.imgs.length; var count = this.toint(this.num) - this.tvalue.imgs.length;
if (count <= 0) if (count <= 0)
return this.toast(this.lang('upload.maxmsg').replace('{n}', this.num)); return this.toast(this.lang('upload.maxmsg').replace('{n}', this.num));
var opt = {}; var opt = {};
opt.count = count; opt.count = count;
opt.sizeType = ['original', 'compressed']; opt.sizeType = ['compressed']; //'original',
opt.sourceType = ['camera', 'album']; opt.sourceType = source;
var [err, retchoose] = await this.go(uni.chooseImage(opt)); var [err, retchoose] = await this.go(uni.chooseImage(opt));
if (err) if (err)
return console.warn('chooseImage', err); return console.warn('chooseImage', err);
@ -553,18 +556,24 @@
this.tip = this.lang('upload.tip') + ' 0/' + this.upcount; this.tip = this.lang('upload.tip') + ' 0/' + this.upcount;
this.upidx = 0; this.upidx = 0;
var opn = {}; var opn = {};
//opn.canvasid = 'canvas'; opn.offcanvas = {
id: this.cvid,
dom: this
};
opn.post = { opn.post = {
from: from from: from
}; };
opn.basepath = this.path; opn.basepath = this.path;
opn.saas = this.saas; opn.saas = this.saas;
opn.stor = this.stor; if (this.stor)
opn.stor = this.stor;
else
opn.stor = app.globalData.stordefault;
opn.action = this.action; opn.action = this.action;
opn.maxkb = this.toint(this.maxkb); opn.maxkb = this.toint(this.maxkb);
opn.imgwidth = this.toint(this.imgwidth); opn.imgwidth = this.toint(this.imgwidth);
opn.imgheight = this.toint(this.imgheight); opn.imgheight = this.toint(this.imgheight);
opn.zipjpg = this.tofloat(this.zipjpg); opn.zipjpg = this.toint(this.zipjpg);
opn.watertext = this.watertext; opn.watertext = this.watertext;
opn.watertype = this.watertype; opn.watertype = this.watertype;
opn.waterpadding = this.toint(this.waterpadding); opn.waterpadding = this.toint(this.waterpadding);

View File

@ -0,0 +1,77 @@
<template>
<text :style="ciystyle" v-if="user>0">
<text style="font-size:0.7em;" v-if="!usrinfo" @tap.stop="getname">No.</text>
<text @tap.stop="getname">{{showtxt}}</text>
<button class="btn def smm" style="margin-left:1em;" @tap.stop="showinfo">成员详情</button>
</text>
<text :style="ciystyle" v-else>
<text style="color:var(--bg6)">暂无</text>
</text>
</template>
<style scoped>
</style>
<script>
//
export default {
props: {
user: {
type: [String, Number],
default: 0
},
ciystyle: {
type: [String, Object],
default: ''
},
},
data() {
return {
usrinfo: null
};
},
watch: {},
computed: {
showtxt() {
if (this.usrinfo)
return this.usrinfo.name;
return this.user;
},
},
mounted() {
this.usrinfo = this.getstorage('d' + this.user);
if (!this.usrinfo)
this.getuserinfo();
},
methods: {
async getuserinfo() {
if (this.usrinfo) {
if (this.usrinfo._times > this.tostamp())
return;
}
const app = getApp();
app.globalData.mqfunc.push({
name: 'userinfo_' + this.user,
func: 'dao.userinfo_get',
data: {
id: this.user,
},
callback: retjson => {
if (retjson.code != 1)
return;
retjson.user._times = this.tostamp() + 60;
this.setstorage('d' + this.user, retjson.user);
this.usrinfo = retjson.user;
}
});
},
async getname() {
this.getuserinfo();
},
async showinfo() {
await this.getuserinfo();
this.gourl('/pages/me/user_show', '', this.usrinfo, 'userinfo');
},
}
}
</script>

View File

@ -27,5 +27,15 @@
"packages": ["pages/demo"], "packages": ["pages/demo"],
"network": "all" "network": "all"
} }
},
"condition" : {
"current": 0,
"list": [
{
"name": "custompage",
"path": "/pages/demo/comform/upload",
"query": ""
}
]
} }
} }

View File

@ -16,6 +16,12 @@
"autoclose" : true, "autoclose" : true,
"delay" : 0 "delay" : 0
}, },
"permissions" : {
"plus" : {
"description" : "访问系统文件",
"features" : [ "io" ]
}
},
/* */ /* */
"modules" : { "modules" : {
"Bluetooth" : {}, "Bluetooth" : {},
@ -40,6 +46,8 @@
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>", "<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
] ]
}, },

View File

@ -12,102 +12,21 @@
"enablePullDownRefresh": true "enablePullDownRefresh": true
} }
}, },
{
"path": "pages/main/me_cash"
},
{
"path": "pages/main/me_cash_bank"
},
{
"path": "pages/main/me_cash_charge"
},
{
"path": "pages/main/me_cash_ie",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "pages/main/me_cash_in",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "pages/main/me_cash_out",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "pages/main/me_info"
},
{
"path": "pages/main/me_invoice"
},
{
"path": "pages/main/me_invoicetitle"
},
{
"path": "pages/main/me_invoice_history",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "pages/main/me_passchange"
},
{
"path": "pages/main/me_pnt"
},
{
"path": "pages/main/me_pnt_buy",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "pages/main/me_pnt_record",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "pages/main/me_problechat"
},
{
"path": "pages/main/me_problem",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "pages/main/me_qrcode"
},
{
"path": "pages/main/me_real"
},
{
"path": "pages/main/me_shipaddr"
},
{
"path": "pages/main/me_suggest"
},
{
"path": "pages/main/paper"
},
{
"path": "pages/main/part"
},
{
"path": "pages/main/psection",
"style": {
"enablePullDownRefresh": true
}
},
{ {
"path": "pages/pub/camera" "path": "pages/pub/camera"
}, },
{
"path": "pages/pub/paper"
},
{
"path": "pages/pub/part"
},
{
"path": "pages/pub/psection",
"style": {
"enablePullDownRefresh": true
}
},
{ {
"path": "pages/pub/web", "path": "pages/pub/web",
"style": { "style": {
@ -251,6 +170,9 @@
{ {
"path": "comview/ani" "path": "comview/ani"
}, },
{
"path": "comview/aniheight"
},
{ {
"path": "comview/anipop" "path": "comview/anipop"
}, },
@ -293,6 +215,9 @@
{ {
"path": "comview/segment" "path": "comview/segment"
}, },
{
"path": "comview/showemoney"
},
{ {
"path": "comview/showimgs" "path": "comview/showimgs"
}, },
@ -375,6 +300,107 @@
"path": "test" "path": "test"
} }
] ]
},
{
"root": "pages/me",
"pages": [
{
"path": "cashie_lst",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "cashin_lst",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "cashoe_lst",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "cashout_cash"
},
{
"path": "cashout_lst",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "cash_charge"
},
{
"path": "invoicetitle"
},
{
"path": "invoice_lst",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "invoicing"
},
{
"path": "me_bank_info"
},
{
"path": "pnt_buylst",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "pnt_buynow"
},
{
"path": "pnt_lst",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "problem_chat"
},
{
"path": "problem_pub",
"style": {
"enablePullDownRefresh": true
}
},
{
"path": "safe_ccub"
},
{
"path": "safe_password"
},
{
"path": "safe_real"
},
{
"path": "share_qrcode"
},
{
"path": "suggest"
},
{
"path": "user_bank"
},
{
"path": "user_info"
},
{
"path": "user_shipaddr"
},
{
"path": "user_show"
}
]
} }
] ]
} }

View File

@ -2,7 +2,7 @@
<ciy-header title="组件生命周期事件"></ciy-header> <ciy-header title="组件生命周期事件"></ciy-header>
<ciy-test></ciy-test> <ciy-test></ciy-test>
<view class="txt-lggg txt-center py4"> <view class="txt-lggg txt-center py4">
<view @tap="gourl" data-url="/pages/main/paper?id=1">跳转测试</view> <view @tap="gourl" data-url="/pages/pub/paper?id=1">跳转测试</view>
</view> </view>
<view class="ciy-card"> <view class="ciy-card">
<view class="title">H5页面</view> <view class="title">H5页面</view>

View File

@ -31,7 +31,7 @@
<view> <view>
<ciy-selmap v-model:lat="lat" v-model:lng="lng" name="ciy4" @change="chglog('change', $event)"> <ciy-selmap v-model:lat="lat" v-model:lng="lng" name="ciy4" @change="chglog('change', $event)">
<template v-slot:show="{data}"> <template v-slot:show="{data}">
{{data.value.lat}},{{data.value.lng}} {{data.value.lat/data.bet}},{{data.value.lng/data.bet}}
</template> </template>
</ciy-selmap> </ciy-selmap>
</view> </view>

View File

@ -14,13 +14,13 @@
<view class="ciy-form"> <view class="ciy-form">
<label>v-model绑定</label> <label>v-model绑定</label>
<view> <view>
<ciy-selpage name="ciy1" page="/pages/main/me_shipaddr" :morevalue="formmore" v-model="formvalue" @change="chglog('change', $event)"></ciy-selpage> <ciy-selpage name="ciy1" page="/pages/me/user_shipaddr" :morevalue="formmore" v-model="formvalue" @change="chglog('change', $event)"></ciy-selpage>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>value绑定</label> <label>value绑定</label>
<view> <view>
<ciy-selpage left hasmore initevent page="/pages/main/me_shipaddr" :morevalue="formmore" :value="formvalue" name="ciy2" @change="chglog('change', $event)"></ciy-selpage> <ciy-selpage left hasmore initevent page="/pages/me/user_shipaddr" :morevalue="formmore" :value="formvalue" name="ciy2" @change="chglog('change', $event)"></ciy-selpage>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
@ -32,13 +32,13 @@
<view class="ciy-form"> <view class="ciy-form">
<label>显示样式</label> <label>显示样式</label>
<view> <view>
<ciy-selpage :ciystyle="{color:'#cc0000'}" page="/pages/main/me_shipaddr" :morevalue="formmore" :value="formvalue" name="ciy4" @change="chglog('change', $event)"></ciy-selpage> <ciy-selpage :ciystyle="{color:'#cc0000'}" page="/pages/me/user_shipaddr" :morevalue="formmore" :value="formvalue" name="ciy4" @change="chglog('change', $event)"></ciy-selpage>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>自定义</label> <label>自定义</label>
<view> <view>
<ciy-selpage page="/pages/main/me_shipaddr" :morevalue="formmore" :value="formvalue" name="ciy5" @change="chglog('change', $event)"> <ciy-selpage page="/pages/me/user_shipaddr" :morevalue="formmore" :value="formvalue" name="ciy5" @change="chglog('change', $event)">
<template v-slot:default="{data}"> <template v-slot:default="{data}">
{{data.name}}<br/> {{data.name}}<br/>
{{data.addr}}<br/> {{data.addr}}<br/>

View File

@ -6,6 +6,7 @@
<view class="content"> <view class="content">
自由指定文件来源拍摄相册会话<br/> 自由指定文件来源拍摄相册会话<br/>
支持文件大小限制尺寸压缩水印指定云指定API<br /> 支持文件大小限制尺寸压缩水印指定云指定API<br />
支持S3协议亚马逊Cloudflare腾讯COS阿里云OSS等<br />
</view> </view>
</view> </view>
<form @submit="submitlog"> <form @submit="submitlog">
@ -48,33 +49,52 @@
<view class="ciy-form"> <view class="ciy-form">
<label>图像压缩</label> <label>图像压缩</label>
<view> <view>
<ciy-upload name="ciy7" path="demo" zipjpg="0.6" @change="chglog('change', $event)"></ciy-upload> <ciy-upload name="ciy7" path="demo" zipjpg="60" @change="chglog('change', $event)"></ciy-upload>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>右下文字</label> <label>右下文字</label>
<view> <view>
<ciy-upload name="ciy8" path="demo" zipjpg="0.6" watertext="水电费|第二行" waterfont="36px Arial" @change="chglog('change', $event)"></ciy-upload> <ciy-upload name="ciy8" path="demo" zipjpg="60" watertext="水电费|第二行" waterfont="36px Arial" @change="chglog('change', $event)"></ciy-upload>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>满屏水印</label> <label>满屏水印</label>
<view> <view>
<ciy-upload name="ciy9" path="demo" zipjpg="0.6" watertext="众产(杭州)科技有限公司" waterfont="36px Arial" watertype="full" waterpadding="10" waterangle="20" wateralpha="0.8" watercolors="#ff0000,#00ff00" @change="chglog('change', $event)"></ciy-upload> <ciy-upload name="ciy9" path="demo" zipjpg="60" watertext="众产(杭州)科技有限公司" waterfont="36px Arial" watertype="full" waterpadding="10" waterangle="20" wateralpha="0.8" watercolors="#ff0000,#00ff00" @change="chglog('change', $event)"></ciy-upload>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>上传到云</label> <label>上传到云存储 A</label>
<view> <view>
<ciy-upload name="ciy10" path="demo" stor="A" zipjpg="0.6" imgwidth="1000" @change="chglog('change', $event)"></ciy-upload> <ciy-upload left name="ciy10a" path="demo" stor="A" zipjpg="60" imgwidth="1000" @change="chglog('change', $event)"></ciy-upload>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>SaaS上传</label> <label>上传到云存储 B</label>
<view> <view>
<ciy-upload left name="ciy11" saas="s10224" path="demo" stor="/" zipjpg="0.6" imgwidth="1000" @change="chglog('change', $event)"></ciy-upload> <ciy-upload left name="ciy10b" path="demo" stor="B" zipjpg="60" imgwidth="1000" @change="chglog('change', $event)"></ciy-upload>
</view> </view>
</view> </view>
<view class="ciy-form">
<label>上传到云存储 C</label>
<view>
<ciy-upload left name="ciy10c" path="demo" stor="C" zipjpg="60" imgwidth="1000" @change="chglog('change', $event)"></ciy-upload>
</view>
</view>
<view class="ciy-form">
<label>上传到云存储 Z</label>
<view>
<ciy-upload left name="ciy10z" path="demo" stor="Z" zipjpg="60" imgwidth="1000" @change="chglog('change', $event)"></ciy-upload>
</view>
</view>
<view class="ciy-form">
<label>指定上传到本地</label>
<view>
<ciy-upload left name="ciy11" saas="s10224" path="demo" stor="/" zipjpg="60" imgwidth="1000" @change="chglog('change', $event)"></ciy-upload>
</view>
</view>
<!-- #ifdef MP-WEIXIN -->
<view class="ciy-form"> <view class="ciy-form">
<label>固定比例拍照</label> <label>固定比例拍照</label>
<view> <view>
@ -87,6 +107,7 @@
<ciy-upload name="ciy13" path="demo" imgwidth="1000" sourcetype="rehcam,album" @change="chglog('change', $event)"></ciy-upload> <ciy-upload name="ciy13" path="demo" imgwidth="1000" sourcetype="rehcam,album" @change="chglog('change', $event)"></ciy-upload>
</view> </view>
</view> </view>
<!-- #endif -->
<view class="ciy-form"> <view class="ciy-form">
<label>禁用</label> <label>禁用</label>
<view> <view>
@ -130,9 +151,8 @@
<view class="hr"></view> <view class="hr"></view>
<view class="prp">action</view> <view class="prp">action</view>
<view class="tip"> <view class="tip">
http开头指向绝对API<br /> http开头指向绝对API点结尾<br />
upload类路径[.微服务码]指向本服务器API<br /> 例如: https://xxx/upload.
jsnurl + 'z/?func=' + upload类路径 + '/upload.';
</view> </view>
<view class="hr"></view> <view class="hr"></view>
<view class="prp">sourcetype</view> <view class="prp">sourcetype</view>
@ -142,7 +162,7 @@
 camera 拍摄<br />  camera 拍摄<br />
 album 从相册选择<br />  album 从相册选择<br />
 message 从会话选择<br />  message 从会话选择<br />
 rehcam 比例相机<br />  rehcam 比例相机 (仅微信小程序)<br />
默认 camera,album,message 默认 camera,album,message
</view> </view>
<view class="hr"></view> <view class="hr"></view>

View File

@ -39,10 +39,15 @@
自动微信登录注册未登录则打开界面 自动微信登录注册未登录则打开界面
</view> </view>
<view class="hr"></view> <view class="hr"></view>
<view class="fun">this.getauth(bmust)</view> <view class="fun">this.getauth(type)</view>
<view class="tip"> <view class="tip">
调取登录状态<br /> 调取登录状态<br />
bmust: true 强制打开登录界面(换号登录) type: 静默登录(默认)
type: relogin 强制打开登录界面(换号登录)
type: info 需填写个人信息
type: real 需实名认证前提info
type: bank 需填写银行前提real
type: cciy 需有全球众识码前提real
</view> </view>
<button class="btn sm" @tap="demo">调用</button> <button class="btn sm" @tap="demo">调用</button>
<button class="btn sm def" @tap="logout">登出</button> <button class="btn sm def" @tap="logout">登出</button>

View File

@ -10,7 +10,7 @@
</view> </view>
</view> </view>
<ciy-showimgs :src="props.src" :label="props.label" :width="props.width" :height="props.height" :type="props.type" :mode="props.mode" :whpre="props.whpre"></ciy-showimgs> <ciy-showimgs :src="props.src" :label="props.label" :width="props.width" :height="props.height" :type="props.type" :mode="props.mode"></ciy-showimgs>
<view class="ciy-card"> <view class="ciy-card">
<view class="title">属性</view> <view class="title">属性</view>
<view class="content"> <view class="content">
@ -52,12 +52,6 @@
,{id:'heightFix',name:'高度自适应'} ,{id:'heightFix',name:'高度自适应'}
,{id:'scaleToFill',name:'失真全显示'} ,{id:'scaleToFill',name:'失真全显示'}
]"></ciy-radio> ]"></ciy-radio>
<view class="hr"></view>
<view class="prp">whpre</view>
<view class="tip">
缩略图尺寸?开始px<br />
</view>
<ciy-input bb v-model="props.whpre" style="width:6em;"></ciy-input>
</view> </view>
</view> </view>
<view class="ciy-card"> <view class="ciy-card">
@ -92,7 +86,6 @@
height: '5em', height: '5em',
type: 'thumb', type: 'thumb',
mode: 'aspectFill', mode: 'aspectFill',
whpre: '?50',
} }
} }
}, },

View File

@ -10,131 +10,130 @@
</view> </view>
<view v-else> <view v-else>
<view class="ciy-form-group"> <view class="ciy-form-group">
<input type="hidden" name="id" :value="pagedata.demo.id" style="display:none;" />
<view class="ciy-form"> <view class="ciy-form">
<label class="imp">默认标题</label> <label class="imp">默认标题</label>
<view> <view>
<ciy-input name="name" v-model="pagedata.demo.name"></ciy-input> <ciy-input v-model="editdata.name"></ciy-input>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>所属菜单</label> <label>所属菜单</label>
<view> <view>
<ciy-select :range="g.zc_menu" name="menuid" v-model="pagedata.demo.menuid"></ciy-select> <ciy-select :range="g.zc_menu" v-model="editdata.menuid"></ciy-select>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>文件大小</label> <label>文件大小</label>
<view> <view>
<ciy-inputbet bet="1024" unit="KB" name="filesize" v-model="pagedata.demo.filesize"></ciy-inputbet> <ciy-inputbet bet="1024" unit="KB" v-model="editdata.filesize"></ciy-inputbet>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>长度</label> <label>长度</label>
<view> <view>
<ciy-inputbet bet="1000" unit="米" :ciystyle="{width:'8em'}" name="metre" v-model="pagedata.demo.metre"></ciy-inputbet> <ciy-inputbet bet="1000" unit="米" :ciystyle="{width:'8em'}" v-model="editdata.metre"></ciy-inputbet>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>贷款金额</label> <label>贷款金额</label>
<view> <view>
<ciy-inputbet bet="1000000" unit="万元" name="bankmoney" v-model="pagedata.demo.bankmoney"></ciy-inputbet> <ciy-inputbet bet="1000000" unit="万元" v-model="editdata.bankmoney"></ciy-inputbet>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>设置日期</label> <label>设置日期</label>
<view> <view>
<ciy-inputdatetime name="setdate" v-model="pagedata.demo.setdate"></ciy-inputdatetime> <ciy-inputdatetime v-model="editdata.setdate"></ciy-inputdatetime>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>设置时间</label> <label>设置时间</label>
<view> <view>
<ciy-inputdatetime btime name="settimes" v-model="pagedata.demo.settimes"></ciy-inputdatetime> <ciy-inputdatetime btime v-model="editdata.settimes"></ciy-inputdatetime>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>营业时间</label> <label>营业时间</label>
<view> <view>
<ciy-inputtimepoint bsec name="dayclock" v-model="pagedata.demo.dayclock"></ciy-inputtimepoint> <ciy-inputtimepoint bsec v-model="editdata.dayclock"></ciy-inputtimepoint>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>文档</label> <label>文档</label>
<view> <view>
<ciy-upload num="5" filetype="all" imgwidth="1000" sourcetype="album,message" path="demo" name="downurl" v-model="pagedata.demo.downurl"></ciy-upload> <ciy-upload num="5" filetype="all" imgwidth="1000" sourcetype="album,message" path="demo" v-model="editdata.downurl"></ciy-upload>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>头像</label> <label>头像</label>
<view> <view>
<ciy-upload imgwidth="600" imgheight="600" path="demo" name="avar" v-model="pagedata.demo.avar"></ciy-upload> <ciy-upload imgwidth="600" imgheight="600" path="demo" v-model="editdata.avar"></ciy-upload>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>是否使用</label> <label>是否使用</label>
<view> <view>
<ciy-selbool name="isuse" v-model="pagedata.demo.isuse"></ciy-selbool> <ciy-selbool v-model="editdata.isuse"></ciy-selbool>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>是否开启</label> <label>是否开启</label>
<view> <view>
<ciy-selbool y="开启" n="关闭" name="isopen" v-model="pagedata.demo.isopen"></ciy-selbool> <ciy-selbool y="开启" n="关闭" v-model="editdata.isopen"></ciy-selbool>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>库存单位</label> <label>库存单位</label>
<view> <view>
<ciy-inputunitedit name="unit" v-model="pagedata.demo.unit"></ciy-inputunitedit> <ciy-inputunitedit v-model="editdata.unit"></ciy-inputunitedit>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>单选状态</label> <label>单选状态</label>
<view> <view>
<ciy-radio left :range="g.auditstatus" name="sigstatus" v-model="pagedata.demo.sigstatus"></ciy-radio> <ciy-radio left :range="g.auditstatus" v-model="editdata.sigstatus"></ciy-radio>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>多选状态</label> <label>多选状态</label>
<view> <view>
<ciy-checkbox itemright line :range="g.auditstatus" name="mauditstatus" v-model="pagedata.demo.mauditstatus"></ciy-checkbox> <ciy-checkbox itemright line :range="g.auditstatus" v-model="editdata.mauditstatus"></ciy-checkbox>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>组织结构</label> <label>组织结构</label>
<view> <view>
<ciy-selcas :range="g.zc_depart" name="prodcata" v-model="pagedata.demo.prodcata"></ciy-selcas> <ciy-selcas :range="g.zc_depart" v-model="editdata.prodcata"></ciy-selcas>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>所在地区</label> <label>所在地区</label>
<view> <view>
<ciy-selcas :range="g.ciy_arearpc" name="areacode" v-model="pagedata.demo.areacode"></ciy-selcas> <ciy-selcas :range="g.ciy_arearpc" v-model="editdata.areacode"></ciy-selcas>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>认证情况</label> <label>认证情况</label>
<view> <view>
<ciy-checkbox bin left line :range="g.renzheng" name="renzheng" v-model="pagedata.demo.renzheng"></ciy-checkbox> <ciy-checkbox bin left line :range="g.renzheng" v-model="editdata.renzheng"></ciy-checkbox>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>临时字典</label> <label>临时字典</label>
<view> <view>
<ciy-select :range="g.ppint" name="ppint" v-model="pagedata.demo.ppint"></ciy-select> <ciy-select :range="g.ppint" v-model="editdata.ppint"></ciy-select>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>执行周期</label> <label>执行周期</label>
<view> <view>
<ciy-inputcyc name="npcyc" v-model="pagedata.demo.npcyc"></ciy-inputcyc> <ciy-inputcyc v-model="editdata.npcyc"></ciy-inputcyc>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>执行用时</label> <label>执行用时</label>
<view> <view>
<ciy-input name="runsec" v-model="pagedata.demo.runsec"></ciy-input> <ciy-input v-model="editdata.runsec"></ciy-input>
</view> </view>
<view style="flex:none;"></view> <view style="flex:none;"></view>
</view> </view>
@ -142,80 +141,74 @@
<label>活动期数</label> <label>活动期数</label>
<view class="flex flex-center" style="justify-content: flex-end;"> <view class="flex flex-center" style="justify-content: flex-end;">
<ciy-input :ciystyle="{width:'3em',margin:'0 0.5em',textAlign:'center',display:'inline-block'}" name="acttm" v-model="pagedata.demo.acttm"></ciy-input> <ciy-input :ciystyle="{width:'3em',margin:'0 0.5em',textAlign:'center',display:'inline-block'}" v-model="editdata.acttm"></ciy-input>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>活动花絮</label> <label>活动花絮</label>
<view> <view>
<ciy-upload num="9" imgwidth="1920" zipjpg="0.8" path="demo" name="imgs" v-model="pagedata.demo.imgs"></ciy-upload> <ciy-upload num="9" imgwidth="1920" zipjpg="80" path="demo" v-model="editdata.imgs"></ciy-upload>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>吨位</label> <label>吨位</label>
<view> <view>
<ciy-inputbet bb bet="1000000" unit="吨" :ciystyle="{width:'8em'}" name="ton" v-model="pagedata.demo.ton"></ciy-inputbet> <ciy-inputbet bb bet="1000000" unit="吨" :ciystyle="{width:'8em'}" v-model="editdata.ton"></ciy-inputbet>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>单价</label> <label>单价</label>
<view> <view>
<ciy-inputbet bet="100" unit="元" name="price" v-model="pagedata.demo.price"></ciy-inputbet> <ciy-inputbet bet="100" unit="元" v-model="editdata.price"></ciy-inputbet>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>位置</label> <label>位置</label>
<view> <view>
<ciy-selmap name="loc" v-model:lng="pagedata.demo.lng" v-model:lat="pagedata.demo.lat"></ciy-selmap> <ciy-selmap v-model:lng="editdata.lng" v-model:lat="editdata.lat"></ciy-selmap>
</view>
</view>
<view class="ciy-form">
<label>监管数量</label>
<view>
<ciy-input name="nums" v-model="pagedata.demo.nums"></ciy-input>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>百分比</label> <label>百分比</label>
<view> <view>
<ciy-inputbet bet="100" unit="%" name="pct" v-model="pagedata.demo.pct"></ciy-inputbet> <ciy-inputbet bet="100" unit="%" v-model="editdata.pct"></ciy-inputbet>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>链接</label> <label>链接</label>
<view> <view>
<ciy-input name="url" v-model="pagedata.demo.url"></ciy-input> <ciy-input v-model="editdata.url"></ciy-input>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>体重</label> <label>体重</label>
<view> <view>
<ciy-inputbet bet="1000" unit="公斤" name="weightg" v-model="pagedata.demo.weightg"></ciy-inputbet> <ciy-inputbet bet="1000" unit="公斤" v-model="editdata.weightg"></ciy-inputbet>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>耳温</label> <label>耳温</label>
<view> <view>
<ciy-inputbet bet="1000" unit="℃" name="eartmpr" v-model="pagedata.demo.eartmpr"></ciy-inputbet> <ciy-inputbet bet="1000" unit="℃" v-model="editdata.eartmpr"></ciy-inputbet>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>身份证号</label> <label>身份证号</label>
<view> <view>
<ciy-input name="idcard" v-model="pagedata.demo.idcard"></ciy-input> <ciy-input v-model="editdata.idcard"></ciy-input>
</view> </view>
</view> </view>
<view class="ciy-form"> <view class="ciy-form">
<label>介绍</label> <label>介绍</label>
<view> <view>
<ciy-textarea name="content" v-model="pagedata.demo.content"></ciy-textarea> <ciy-textarea v-model="editdata.content"></ciy-textarea>
</view> </view>
</view> </view>
<!-- <view class="ciy-form v"> <!-- <view class="ciy-form v">
<label>富文本</label> <label>富文本</label>
<view> <view>
<ciy-mdedit name="md" v-model="pagedata.demo.md"></ciy-mdedit> <ciy-mdedit v-model="editdata.md"></ciy-mdedit>
</view> </view>
</view> --> </view> -->
</view> </view>
@ -236,47 +229,36 @@
return {} return {}
}, },
onLoad() { onLoad() {
if (!this.pagedata.demo) console.log(this.pagedata); //gourl
return this.alert('不能直接访问,请重新进入'); //
this.getdata(); this.getdata();
}, },
watch: {}, watch: {},
computed: {}, computed: {},
methods: { methods: {
async getdata() { async getdata() {
var act = 'edit';
var page = getApp().getpage(1);
if (page && page.init._editonce)
act = '';
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'demo/demo.getdata', func: 'demo/demo.getdata',
data: { //data: this.opn //callfuncopn
...this.opn,
act: act
}
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)
return this.init = retjson; return this.init = retjson;
if (act == 'edit') { this.g.zc_menu = retjson.zc_menu; //
page.init._editonce = true; // this.g.ppint = retjson.ppint; //
page.g.zc_menu = retjson.zc_menu; // this.g.renzheng = retjson.renzheng; //
this.g.zc_menu = retjson.zc_menu; this.editdata = retjson.data;
}
this.init = this.objdeepmerge(this.init, retjson); this.init = this.objdeepmerge(this.init, retjson);
}, },
async edited() { async edited() {
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'demo/demo.update', func: 'demo/demo.update',
data: { data: this.editdata
...this.pagedata.demo
}
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)
@ -284,6 +266,7 @@
var page = getApp().getpage(1); var page = getApp().getpage(1);
if (page?.init?.list) if (page?.init?.list)
this.objtolist(page.init.list, retjson.data); this.objtolist(page.init.list, retjson.data);
await this.toast('提交成功');
// const eventChannel = this.getOpenerEventChannel(); // const eventChannel = this.getOpenerEventChannel();
// eventChannel.emit('writedata', retjson.data); // eventChannel.emit('writedata', retjson.data);
uni.navigateBack(); uni.navigateBack();

View File

@ -10,8 +10,8 @@
</view> </view>
<view v-else> <view v-else>
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}"> <view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
<ciy-segment :lis="init.once.lis" all="全部" v-model="liid" @change="segment_change"></ciy-segment> <ciy-segment :lis="init.lis" all="全部" @change="segment_change"></ciy-segment>
<ciy-query ref="query" :gdict="g" :qry="init.once.input" @confirm="query_confirm"> <ciy-query ref="query" :gdict="g" :qry="init.searchinput" @confirm="query_confirm">
<template v-slot="{itm}"> <template v-slot="{itm}">
<ciy-input :name="itm.item.form" v-model="itm.data[itm.item.form]"></ciy-input> <ciy-input :name="itm.item.form" v-model="itm.data[itm.item.form]"></ciy-input>
</template> </template>
@ -65,7 +65,8 @@
<view>{{totimepoint(item.dayclock, true)}}</view> <view>{{totimepoint(item.dayclock, true)}}</view>
</view> </view>
<ciy-showimgs label="文档" :src="item.downurl"></ciy-showimgs> <ciy-showimgs label="文档" :src="item.downurl"></ciy-showimgs>
<ciy-showimgs :src="item.avar" width="20em" mode="widthFix"></ciy-showimgs> <ciy-showimgs :src="item.avar" width="5em" mode="widthFix"></ciy-showimgs>
<ciy-svgimg v-if="item.avar" :src="item.avar"></ciy-svgimg>
<view class="l2"> <view class="l2">
<label>是否使用</label> <label>是否使用</label>
@ -137,10 +138,6 @@
<view><text style="text-decoration: underline;" @tap.stop="goloc(item.lat, item.lng)">查看位置</text> <view><text style="text-decoration: underline;" @tap.stop="goloc(item.lat, item.lng)">查看位置</text>
</view> </view>
</view> </view>
<view class="l2">
<label>监管数量</label>
<view>{{tofix(item.nums)}}</view>
</view>
<view class="l2"> <view class="l2">
<label>百分比</label> <label>百分比</label>
<view>{{tofix(item.pct/100, 2)}}%</view> <view>{{tofix(item.pct/100, 2)}}%</view>
@ -167,7 +164,12 @@
</view> </view>
</view> </view>
<ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend> <ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend>
<view class="ciy-add" @tap="edit()"></view> <view class="ciy-add" @tap="edit({
data: {
id: 0,
_idx: -1
}
})"></view>
</view> </view>
</template> </template>
@ -177,10 +179,7 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
liid: 0,
pageno: 0,
}
}, },
onLoad() { onLoad() {
this.load_ciydict(this.file_stor('/dict/ciy_arearpc.js')).then(json => { this.load_ciydict(this.file_stor('/dict/ciy_arearpc.js')).then(json => {
@ -206,18 +205,14 @@
computed: {}, computed: {},
methods: { methods: {
async getlist() { async getlist() {
//await this.getauth();
if(this.me.id == 0)
return uni.navigateBack();
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.query.liid = this.liid;
this.pagepost.once = !this.init.once;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.once = !this.init.once;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'demo/demo.list', func: 'demo/demo.list',
data: this.pagepost data: this.pagepost
}); });
@ -229,9 +224,10 @@
this.init.list = []; this.init.list = [];
this.init = this.objdeepmerge(this.init, retjson); this.init = this.objdeepmerge(this.init, retjson);
if (retjson.once) { if (retjson.once) {
this.init.once.lis = [...this.g.auditstatus]; this.init.lis = [...this.g.auditstatus];
this.g.zc_depart = retjson.once.zc_depart; this.g.zc_depart = retjson.zc_depart;
this.g.ppint = retjson.once.ppint; this.g.ppint = retjson.ppint;
this.g.renzheng = retjson.renzheng;
} }
this.getrefs('query').then(ref => { this.getrefs('query').then(ref => {
ref.setdata(retjson.where); ref.setdata(retjson.where);
@ -239,7 +235,8 @@
if (retjson.list.length < retjson.pagecount) if (retjson.list.length < retjson.pagecount)
this.pageno = -1; this.pageno = -1;
}, },
segment_change() { segment_change(e) {
this.pagepost.liid = e.value.id;
this.pageno = 0; this.pageno = 0;
this.getlist(); this.getlist();
uni.pageScrollTo({ uni.pageScrollTo({
@ -257,19 +254,12 @@
}); });
}, },
async edit(item) { async edit(item) {
item = item || {
url: '',
data: {
id: 0,
_idx: -1
}
};
this.gourl('demo_edit?id=' + item.data.id, 'navigate', item.data, 'demo'); this.gourl('demo_edit?id=' + item.data.id, 'navigate', item.data, 'demo');
}, },
async del(item) { async del(item) {
if (await this.askmsg('是否删除?', '删除') != 'ok') if (await this.askmsg('是否删除?', '删除') != 'ok')
return; return;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'demo/demo.del', func: 'demo/demo.del',
data: { data: {
id: item.data.id id: item.data.id
@ -300,7 +290,7 @@
}]); }]);
if (msg.btn == 'cancel') if (msg.btn == 'cancel')
return; return;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'demo/demo.audit', func: 'demo/demo.audit',
data: { data: {
id: item.data.id, id: item.data.id,

View File

@ -9,7 +9,7 @@
<view class="maincard" style="margin-top: -2.5em;"> <view class="maincard" style="margin-top: -2.5em;">
<view class="flex flex-center"> <view class="flex flex-center">
<view class="nick" @tap="gourl" data-url="$/pages/main/me_info">{{me.name?me.name:'登录/注册'}}</view> <view class="nick" @tap="gourl" data-url="$/pages/me/user_info">{{me.name?me.name:'登录/注册'}}</view>
<view class="icon zy" style="margin-left:1em;" v-if="showbalance" @tap="getbalance(2)"></view> <view class="icon zy" style="margin-left:1em;" v-if="showbalance" @tap="getbalance(2)"></view>
<view class="icon by" style="margin-left:1em;" v-else @tap="getbalance(1)"></view> <view class="icon by" style="margin-left:1em;" v-else @tap="getbalance(1)"></view>
</view> </view>
@ -168,11 +168,15 @@
export default { export default {
data() { data() {
return { return {
version: '',
showbalance: false, showbalance: false,
ciysvg: '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M987.136 384.512C919.552 131.584 668.16-22.528 415.232 27.136c219.648-41.984 434.176 79.36 488.96 283.136 57.344 214.016-82.944 437.76-313.344 499.2-49.664 13.312-78.848 64-65.536 113.152 13.312 49.664 64 78.848 113.152 65.536 263.168-70.144 418.816-340.48 348.672-603.648zM116.224 713.216C58.88 499.2 199.68 275.456 430.08 214.016c49.664-13.312 78.848-64 65.536-113.152C482.816 51.2 432.128 21.504 382.464 34.816c-263.68 70.656-419.84 340.992-349.184 604.16 67.584 252.928 319.488 407.04 571.392 356.864-219.648 42.496-433.664-78.848-488.448-282.624z m93.184-203.776L291.84 449.536c44.544-32.256 90.112-32.256 133.12-0.512l83.456 60.928-149.504-230.4-149.504 229.888z m516.096-60.416L808.96 509.952l-149.504-229.888-149.504 229.376 82.432-59.904c44.544-32.256 90.112-32.256 133.12-0.512z m-366.08 291.84L441.856 680.96c44.544-32.256 90.112-32.256 133.12-0.512l83.456 60.928-149.504-230.4-149.504 229.888z" fill="#56a4ef"></path></svg>', ciysvg: '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M987.136 384.512C919.552 131.584 668.16-22.528 415.232 27.136c219.648-41.984 434.176 79.36 488.96 283.136 57.344 214.016-82.944 437.76-313.344 499.2-49.664 13.312-78.848 64-65.536 113.152 13.312 49.664 64 78.848 113.152 65.536 263.168-70.144 418.816-340.48 348.672-603.648zM116.224 713.216C58.88 499.2 199.68 275.456 430.08 214.016c49.664-13.312 78.848-64 65.536-113.152C482.816 51.2 432.128 21.504 382.464 34.816c-263.68 70.656-419.84 340.992-349.184 604.16 67.584 252.928 319.488 407.04 571.392 356.864-219.648 42.496-433.664-78.848-488.448-282.624z m93.184-203.776L291.84 449.536c44.544-32.256 90.112-32.256 133.12-0.512l83.456 60.928-149.504-230.4-149.504 229.888z m516.096-60.416L808.96 509.952l-149.504-229.888-149.504 229.376 82.432-59.904c44.544-32.256 90.112-32.256 133.12-0.512z m-366.08 291.84L441.856 680.96c44.544-32.256 90.112-32.256 133.12-0.512l83.456 60.928-149.504-230.4-149.504 229.888z" fill="#56a4ef"></path></svg>',
} }
}, },
onLoad() {}, onLoad() {
var app = getApp();
this.version = app.globalData._version;
},
onShow() { onShow() {
this.getinit(); this.getinit();
}, },
@ -184,7 +188,7 @@
return; return;
} }
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.balance_get', func: 'me.balance_get',
data: {} data: {}
}); });
@ -202,7 +206,7 @@
}); });
}, },
relogin() { relogin() {
this.getauth(true); this.getauth('relogin');
}, },
logout() { logout() {
this.removestorage('me'); this.removestorage('me');

View File

@ -159,7 +159,7 @@
}, { }, {
ok: true, ok: true,
url: 'comform/upload', url: 'comform/upload',
title: '图片多选器' title: '文件上传器'
}, { }, {
ok: true, ok: true,
url: 'comform/selmap', url: 'comform/selmap',

View File

@ -159,7 +159,7 @@
未登录返回{me:0}<br /> 未登录返回{me:0}<br />
</view> </view>
<view class="hr"></view> <view class="hr"></view>
<view class="fun">async callajax({srv, func, cache, cachekey, loadhide, loadtxt, data})</view> <view class="fun">async callfunc({srv, func, cache, cachekey, loadhide, loadtxt, data})</view>
<view class="tip"> <view class="tip">
服务端Ajax API请求header带上token<br /> 服务端Ajax API请求header带上token<br />
自动保存新token无感续期<br /> 自动保存新token无感续期<br />
@ -168,7 +168,7 @@
 func: 调用函数<br />  func: 调用函数<br />
  http开头指向到外部位置<br />   http开头指向到外部位置<br />
  包含?jsnurl本地服务器下任意位置<br />   包含?jsnurl本地服务器下任意位置<br />
  否则jsnurl+jsnajax+[类名.函数名]<br />   否则jsnurl+[类名.函数名]<br />
 cache: 0不缓存 >0 超过秒数请求<br />  cache: 0不缓存 >0 超过秒数请求<br />
 cachekey: 指定缓存名一般参数区分用默认f_[func]<br />  cachekey: 指定缓存名一般参数区分用默认f_[func]<br />
 loadhide: true隐藏加载中显示<br />  loadhide: true隐藏加载中显示<br />
@ -288,6 +288,7 @@
<view class="fun">isfloat0(num)</view> <view class="fun">isfloat0(num)</view>
<view class="tip"> <view class="tip">
判断是否为0防止浮点数问题<br /> 判断是否为0防止浮点数问题<br />
尽量不要使用浮点数<br />
</view> </view>
<view class="hr"></view> <view class="hr"></view>
<view class="fun">isarray(val)</view> <view class="fun">isarray(val)</view>

View File

@ -32,7 +32,7 @@
</view> </view>
<view class="ciy-card"> <view class="ciy-card">
<view class="title">系统参数</view> <view class="title">系统参数</view>
<view class="right">this.sysinfo</view> <view class="right">app.globalData._sysinfo</view>
<view class="content"> <view class="content">
<view v-for="(item,index) in _sysinfo" :key="index"> <view v-for="(item,index) in _sysinfo" :key="index">
<view v-if="index == 'safeArea' || index == 'safeAreaInsets'"> <view v-if="index == 'safeArea' || index == 'safeAreaInsets'">
@ -68,7 +68,7 @@
this.glbdata[i] = app.json_string(app.globalData[i]); this.glbdata[i] = app.json_string(app.globalData[i]);
} }
this._sysinfo = {}; this._sysinfo = {};
for (var i in this.sysinfo) { for (var i in app.globalData._sysinfo) {
this._sysinfo[i] = app.json_string(this.sysinfo[i]); this._sysinfo[i] = app.json_string(this.sysinfo[i]);
} }

View File

@ -51,7 +51,7 @@
}, },
methods: { methods: {
async chktest(dt) { async chktest(dt) {
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'app.test', func: 'app.test',
data: {} data: {}
}); });

View File

@ -2,38 +2,27 @@
<ciy-header title="广场" mode="scroll"></ciy-header> <ciy-header title="广场" mode="scroll"></ciy-header>
<view v-if="init.code != 1"> <view v-if="init.code != 1">
<view class="px4 py4"> <view class="px4 py4">
<view style="height:12em;width:100%;" class="ciy-skeleton"></view> <view style="height:12rem;width:100%;" class="ciy-skeleton"></view>
<view style="height:2em;width:60%;" class="ciy-skeleton"></view> <view style="height:2rem;width:60%;" class="ciy-skeleton"></view>
<view style="height:1em;width:40%;margin-left:1em;" class="ciy-skeleton"></view> <view style="height:1rem;width:40%;margin-left:1rem;" class="ciy-skeleton"></view>
<view style="height:3em;width:70%;" class="ciy-skeleton"></view> <view style="height:3rem;width:70%;" class="ciy-skeleton"></view>
<view style="height:3em;width:70%;" class="ciy-skeleton"></view> <view style="height:3rem;width:70%;" class="ciy-skeleton"></view>
<view style="height:3em;width:70%;" class="ciy-skeleton"></view> <view style="height:3rem;width:70%;" class="ciy-skeleton"></view>
</view> </view>
</view> </view>
<view v-else> <view v-else>
<view style="min-height:80vw;background: linear-gradient(354deg, #f3fcff, #ffffff);"> <ciy-swiper :banner="init.banner" height="60vw"></ciy-swiper>
<swiper v-if="init.once.banner && init.once.banner.length > 0" :indicator-dots="init.once.banner.length > 1" :autoplay="false" interval="3000" style="height:80vw;">
<swiper-item v-for="(item,index) in init.once.banner" :key="item.id">
<view v-if="isvideo(item.img)">
<cover-image v-if="vmuted" @tap="vmute" class="cmute" :style="{opacity: vop}" :src="file_stor('/img/wav2.png')"></cover-image>
<cover-image v-else @tap="vmute" class="cmute" :style="{opacity: vop}" :src="file_stor('/img/wav1.png')"></cover-image>
<video id="swipervideo" @tap="showop" object-fit="cover" :poster="file_stor(item.img + '.jpg')" :src="file_stor(item.img)" controls autoplay loop show-mute-btn :muted="vmuted" :enable-progress-gesture="false" style="width:100%;height:80vw;"></video>
</view>
<image v-else @tap="gourl" :data-url="item.url" :src="file_stor(item.img)" style="width:100%;height:100%;" />
</swiper-item>
</swiper>
</view>
<view class="bg1"> <view class="bg1">
<view class="ciy-grid"> <view class="ciy-grid">
<view class="grid" @tap="gourl" data-url="/pages/demo/index"> <view class="grid" @tap="gourl" data-url="/pages/demo/index">
<view class="icon" :style="{backgroundImage:svg2bg(svg.ctg)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.ctg)}"></view>
<view class="name">Demo</view> <view class="name">Demo</view>
</view> </view>
<view class="grid" @tap="gourl" data-url="/pages/main/paper?id=1"> <view class="grid" @tap="gourl" data-url="/pages/pub/paper?id=1">
<view class="icon" :style="{backgroundImage:svg2bg(svg.cqd)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.cqd)}"></view>
<view class="name">游客页面</view> <view class="name">游客页面</view>
</view> </view>
<view class="grid" @tap="gourl" data-url="$/pages/main/me_suggest"> <view class="grid" @tap="gourl" data-url="$/pages/me/suggest">
<view class="icon" :style="{backgroundImage:svg2bg(svg.cjf)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.cjf)}"></view>
<view class="name">用户页面</view> <view class="name">用户页面</view>
</view> </view>
@ -56,28 +45,13 @@
</template> </template>
<style scoped> <style scoped>
.cmute {
position: absolute;
right: 0.5em;
top: 0.5em;
z-index: 100;
height: 1.5em;
width: 1.5em;
}
</style> </style>
<script> <script>
export default { export default {
data() { data() {
return { return {
vmuted: false, svg: {},
vop: 0.2,
svg: {
cqd: '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M546.334118 258.198588V106.315294h288.527058V57.825882c0-31.924706-25.840941-57.825882-57.825882-57.825882H103.002353a57.825882 57.825882 0 0 0-57.825882 57.825882v886.66353C45.176471 976.414118 71.077647 1002.315294 103.002353 1002.315294H777.035294a57.765647 57.765647 0 0 0 57.795765-57.825882v-63.668706H121.133176v-151.853177H834.861176v-55.717647H121.133176v-151.823058H834.861176v-55.717648h-288.527058v-151.823058h288.527058v-55.717647h-288.527058z" fill="#A267F8"></path><path d="M834.861176 465.679059h121.494589V313.825882H834.861176z" fill="#F9D11F"></path><path d="M546.334118 465.679059h288.527058V313.825882h-288.527058z" fill="#7E42B9"></path><path d="M834.861176 673.249882h121.494589v-151.853176H834.861176z" fill="#F9D11F"></path><path d="M121.103059 673.249882h713.728v-151.853176H121.103059z" fill="#7E42B9"></path><path d="M834.861176 258.168471h121.494589V106.315294H834.861176z" fill="#F9D11F"></path><path d="M546.334118 258.168471h288.527058V106.315294h-288.527058z" fill="#7E42B9"></path><path d="M834.861176 880.790588h121.494589v-151.853176H834.861176z" fill="#F9D11F"></path><path d="M121.103059 880.790588h713.728v-151.853176H121.103059z" fill="#7E42B9"></path><path d="M485.586824 465.709176H121.103059v-81.799529a70.053647 70.053647 0 0 1 70.053647-70.053647h224.37647a70.053647 70.053647 0 0 1 70.053648 70.053647v81.799529zM386.891294 189.831529a83.516235 83.516235 0 1 1-167.03247 0 83.516235 83.516235 0 0 1 167.03247 0" fill="#FFFFFF"></path></svg>',
cjf: '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M902.384941 257.114353H245.338353a98.454588 98.454588 0 0 0-98.454588 98.424471V746.315294a98.484706 98.484706 0 0 0 98.484706 98.454588h57.675294v141.914353c0 13.914353 16.745412 20.841412 26.593882 11.023059l152.937412-152.937412h419.84a98.484706 98.484706 0 0 0 98.42447-98.484706V355.568941a98.454588 98.454588 0 0 0-98.454588-98.42447" fill="#FF7E50"></path><path d="M98.424471 0h657.046588a98.454588 98.454588 0 0 1 98.484706 98.424471v390.806588a98.424471 98.424471 0 0 1-98.484706 98.42447H697.825882v141.914353a15.570824 15.570824 0 0 1-26.593882 11.023059l-152.997647-152.937412H98.424471A98.454588 98.454588 0 0 1 0 489.231059V98.424471A98.484706 98.484706 0 0 1 98.484706 0" fill="#F9D11F"></path><path d="M671.232 740.592941a15.600941 15.600941 0 0 0 26.624-11.023059v-141.94447h57.645176a98.394353 98.394353 0 0 0 98.424471-98.424471V257.084235H245.338353a98.424471 98.424471 0 0 0-98.424471 98.424471v232.116706h371.350589l152.967529 152.997647z" fill="#ED4042"></path><path d="M303.043765 468.269176h394.812235V358.098824H303.043765z" fill="#FFFFFF"></path></svg>',
cmh: '<svg viewBox="0 0 1355 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M663.491765 1002.315294c-162.454588 0-294.159059-131.734588-294.159059-294.189176V109.236706A109.236706 109.236706 0 0 1 478.569412 0h369.844706a109.236706 109.236706 0 0 1 109.236706 109.236706v598.889412c0 162.454588-131.704471 294.159059-294.159059 294.159058" fill="#31EC7C"></path><path d="M871.484235 916.148706c-114.868706 114.868706-301.116235 114.868706-416.015059 0L32.015059 492.634353a109.206588 109.206588 0 0 1 0-154.443294l261.511529-261.541647a109.206588 109.206588 0 0 1 154.443294 0l423.514353 423.454117c114.868706 114.928941 114.868706 301.176471 0 416.045177" fill="#A267F8"></path><path d="M455.499294 916.148706c-114.868706-114.868706-114.868706-301.116235 0-416.015059L879.013647 76.649412a109.206588 109.206588 0 0 1 154.443294 0l261.541647 261.541647a109.206588 109.206588 0 0 1 0 154.443294L871.514353 916.148706c-114.898824 114.868706-301.176471 114.868706-416.015059 0" fill="#F83CB6"></path><path d="M871.484235 500.133647L663.491765 292.141176l-208.022589 207.992471c-114.838588 114.868706-114.838588 301.116235 0 416.015059 114.898824 114.868706 301.176471 114.868706 416.015059 0 114.868706-114.898824 114.868706-301.146353 0-416.015059" fill="#7E42B9"></path><path d="M740.532706 636.235294a101.707294 101.707294 0 0 1-143.811765 143.811765 101.707294 101.707294 0 0 1 143.811765-143.811765" fill="#FFFFFF"></path></svg>',
ctg: '<svg viewBox="0 0 1114 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M801.039059 672.677647l-198.415059 198.415059-198.415059-198.415059-155.888941-155.888941 198.415059-198.415059 155.888941 155.888941 220.16-220.129882V133.150118a133.150118 133.150118 0 0 0-133.150118-133.12H118.211765C44.664471 0 0 59.632941 0 133.12v735.954824C0 942.682353 44.664471 1002.315294 118.211765 1002.315294h571.422117a133.12 133.12 0 0 0 133.12-133.180235v-218.172235l-21.714823 21.744941z" fill="#F9D11F"></path><path d="M1105.92 367.766588l-198.384941-198.415059-84.751059 84.781177v396.8z" fill="#3193FF"></path><path d="M446.735059 318.403765L248.32 516.818824l155.888941 155.888941 198.415059 198.415059 198.415059-198.415059 21.744941-21.744941V254.132706l-220.16 220.16z" fill="#006FD9"></path><path d="M119.657412 239.344941h583.439059v-134.625882H119.657412zM119.687529 882.627765h179.501177v-134.625883h-179.501177z" fill="#FFFFFF"></path></svg>',
},
} }
}, },
onLoad() { onLoad() {
@ -89,13 +63,29 @@
setTimeout(() => { setTimeout(() => {
this.executepnt(1); this.executepnt(1);
}, 3000); }, 3000);
this.getauth().then(auth => {
if (auth.me.id == 0)
return;
this.pageno = 0;
this.getinit();
});
this.load_svgicon(this.file_stor('/svgicon/index.txt')).then(svgs => {
this.svg = svgs;
});
},
onShow() {
if (this._meid === this.me.id)
return;
this._meid = this.me.id;
this.pageno = 0;
this.init.members = [];
this.getinit(); this.getinit();
}, },
onShareAppMessage(res) { onShareAppMessage(res) {
return this.shareparam({ return this.shareparam({
type: 'message', type: 'message',
title: this.init.sharename, title: this.init.sharename,
//img: this.file_stor(''), img: this.file_stor(this.init.shareicon),
path: this.getroute(), path: this.getroute(),
query: { query: {
...this.opn ...this.opn
@ -106,7 +96,7 @@
return this.shareparam({ return this.shareparam({
type: 'timeline', type: 'timeline',
title: this.init.sharename, title: this.init.sharename,
//img: this.file_stor(''), img: this.file_stor(this.init.shareicon),
path: this.getroute(), path: this.getroute(),
query: { query: {
...this.opn ...this.opn
@ -119,19 +109,13 @@
}, },
methods: { methods: {
async getinit() { async getinit() {
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'index.init' func: 'main.index_init'
}); });
if (retjson.code != 1) if (retjson.code != 1)
return this.alert(retjson.errmsg); return this.alert(retjson.errmsg);
this.init = retjson; this.init = retjson;
}, },
showop() {
this.vop = 2;
},
vmute() {
this.vmuted = !this.vmuted;
},
} }
} }
</script> </script>

View File

@ -2,34 +2,40 @@
<ciy-header title="我的" mode="scroll"></ciy-header> <ciy-header title="我的" mode="scroll"></ciy-header>
<view class="topbg"></view> <view class="topbg"></view>
<view :style="{height:header_statusbar_height+'px'}"></view> <view :style="{height:header_statusbar_height+'px'}"></view>
<view style="padding-top:1em;"> <view style="padding-top:1rem;">
<view class="avartop"> <view class="avartop">
<image :src="file_stor(me.icon?me.icon:'/img/face.png')" mode="scaleToFill" /> <image :src="file_stor(me.icon?me.icon:'/img/face.png')" mode="scaleToFill" />
</view> </view>
</view> </view>
<view class="maincard" style="margin-top: -2.5em;"> <view class="maincard" style="margin-top: -2.5rem;">
<view class="flex flex-center"> <view class="flex flex-center">
<view class="nick" @tap="gourl" data-url="$/pages/main/me_info">{{me.name?me.name:'登录/注册'}}</view> <view class="nick" @tap="gourl" data-url="$/pages/me/user_info">{{me.id>0?(me.name?me.name:'游客'):'登录/注册'}}</view>
<view class="icon zy" style="margin-left:1em;" v-if="showbalance" @tap="getbalance(2)"></view> <view class="icon zy" style="margin-left:1rem;" v-if="showbalance" @tap="getbalance(2)"></view>
<view class="icon by" style="margin-left:1em;" v-else @tap="getbalance(1)"></view> <view class="icon by" style="margin-left:1rem;" v-else @tap="getbalance(1)"></view>
</view> </view>
<view class="abs r0 t0" style="opacity: 0;" @tap="gourl" data-url="/pages/demo/index">Demo</view> <view class="abs r0 t0" style="opacity: 0;" @tap="gourl" data-url="/pages/demo/index">Demo</view>
<view class="abs r1 b1 txt-smmm" @tap="copyboard('E' + me.eid)" v-if="me.id>0">E{{me.eid}}</view> <view class="abs r1 b1 txt-smmm" @tap="copyboard('E' + me.eid)" v-if="me.id>0">E{{me.eid}}</view>
<view class="usrnum"> <view class="usrnum">
<view> <view>
<view class="num" v-if="showbalance"> <view class="num" v-if="showbalance">
<ciy-shownum speed="80" :value="me.mycashmoney" unit=",100,2|万,1000000,2|亿,10000000000,2"></ciy-shownum> <ciy-shownum speed="80" :value="me.mymoney" unit=",100,2|万,1000000,2|亿,10000000000,2"></ciy-shownum>
</view> </view>
<view class="num" v-else>---</view> <view class="num" v-else>---</view>
<view class="tit" @tap="gourl" data-url="$/pages/main/me_cash">提现</view> <view class="tit">可消费余额</view>
</view>
<view>
<view class="num" v-if="showbalance">
<ciy-shownum :value="me.mycashmoney" unit=",100,2|万,1000000,2|亿,10000000000,2"></ciy-shownum>
</view>
<view class="num" v-else>---</view>
<view class="tit">可提现余额</view>
</view> </view>
<view> <view>
<view class="num" v-if="showbalance"> <view class="num" v-if="showbalance">
<ciy-shownum :value="me.mypnt" unit=",1,0|万,10000,2|亿,100000000,2"></ciy-shownum> <ciy-shownum :value="me.mypnt" unit=",1,0|万,10000,2|亿,100000000,2"></ciy-shownum>
</view> </view>
<view class="num" v-else>---</view> <view class="num" v-else>---</view>
<view class="tit" @tap="gourl" data-url="$/pages/main/me_pnt">积分</view> <view class="tit" @tap="gourl" data-url="$/pages/me/pnt_lst">积分</view>
</view> </view>
</view> </view>
</view> </view>
@ -64,23 +70,23 @@
</view> </view>
</view> </view>
</view> </view>
<view class="maincard" style="min-height:9em;"> <view class="maincard">
<view class="ciy-grid"> <view class="ciy-grid">
<view class="grid"> <view class="grid" data-url="$/pages/me/cash_charge" @tap="gourl">
<view class="icon" :style="{backgroundImage:svg2bg(svg.ciy)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.v1)}"></view>
<view class="name">图标名称</view> <view class="name">充值</view>
</view> </view>
<view class="grid"> <view class="grid" data-url="$/pages/me/cashie_lst" @tap="gourl">
<view class="icon" :style="{backgroundImage:svg2bg(svg.ciy)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.v3)}"></view>
<view class="name">图标名称</view> <view class="name">收支明细</view>
</view> </view>
<view class="grid"> <view class="grid" data-url="$/pages/me/cashout_cash" @tap="gourl">
<view class="icon" :style="{backgroundImage:svg2bg(svg.ciy)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.v2)}"></view>
<view class="name">图标名称</view> <view class="name">提现</view>
</view> </view>
<view class="grid"> <view class="grid" data-url="$/pages/me/cashoe_lst" @tap="gourl">
<view class="icon" :style="{backgroundImage:svg2bg(svg.ciy)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.v3)}"></view>
<view class="name">图标名称</view> <view class="name">收益明细</view>
</view> </view>
</view> </view>
<view class="ciy-grid"> <view class="ciy-grid">
@ -102,26 +108,26 @@
</view> </view>
</view> </view>
</view> </view>
<ciy-swipelist v-if="me.id>0" :icon="svg.ciy" title="实名认证" data-url="$/pages/main/me_real" @tap="gourl" :right="tomsk(me.truename, '#***')" more></ciy-swipelist> <view class="bg5" style="height:0.3rem;"></view>
<view class="bg5" style="height:0.3em;" v-if="me.id>0"></view> <ciy-swipelist v-if="me.id>0" title="众识码" data-url="$/pages/me/safe_ccub" @tap="gourl" :right="tocciy(me.cciy)" more></ciy-swipelist>
<ciy-swipelist title="收入明细" v-if="me.id>0" @tap="gourl" data-url="$/pages/main/me_cash_in" more></ciy-swipelist> <ciy-swipelist v-if="me.id>0" title="实名认证" data-url="$/pages/me/safe_real" @tap="gourl" :right="tomsk(me.truename, '#***')" more></ciy-swipelist>
<view class="bg5" style="height:0.3rem;"></view>
<view class="bg5" style="height:0.3em;"></view> <ciy-swipelist v-if="me.id>0" title="个人信息" @tap="gourl" data-url="$/pages/me/user_info" more></ciy-swipelist>
<ciy-swipelist v-if="me.id>0" title="个人信息" @tap="gourl" data-url="$/pages/main/me_info" more></ciy-swipelist> <ciy-swipelist v-if="me.id>0" title="收款银行" @tap="gourl" data-url="$/pages/me/user_bank" :right="me.bankaccount?'已设置':'未设置'" more></ciy-swipelist>
<ciy-swipelist v-if="me.id>0" title="收货地址" @tap="gourl" data-url="$/pages/main/me_shipaddr" more></ciy-swipelist> <ciy-swipelist v-if="me.id>0" title="收货地址" @tap="gourl" data-url="$/pages/me/user_shipaddr" more></ciy-swipelist>
<ciy-swipelist v-if="me.id>0" title="我要开票" @tap="gourl" data-url="$/pages/main/me_invoice" :right="me.myinvmoney>=100?'可开票金额 ' + me.myinvmoney/100 + '元':'未达开票金额'" more></ciy-swipelist> <ciy-swipelist v-if="me.id>0" title="我要开票" @tap="gourl" data-url="$/pages/me/invoicing" :right="me.myinvmoney>=1000?'可开票':'未达开票金额'" more></ciy-swipelist>
<ciy-swipelist v-if="me.id>0" title="分享二维码" @tap="gourl" data-url="$/pages/main/me_qrcode" more></ciy-swipelist> <ciy-swipelist v-if="me.id>0" title="分享二维码" @tap="gourl" data-url="$/pages/me/share_qrcode" more></ciy-swipelist>
<ciy-swipelist v-if="me.mobile" :title="me.needpass?'设置密码':'修改密码'" @tap="gourl" data-url="$/pages/main/me_passchange" more></ciy-swipelist> <ciy-swipelist v-if="me.mobile" :title="me.needpass?'设置密码':'修改密码'" @tap="gourl" data-url="$/pages/me/safe_password" more></ciy-swipelist>
<ciy-swipelist v-if="me.id>0" title="意见建议" @tap="gourl" data-url="$/pages/main/me_suggest" right="留下您的宝贵建议" more></ciy-swipelist> <ciy-swipelist v-if="me.id>0" title="意见建议" @tap="gourl" data-url="$/pages/me/suggest" right="留下您的宝贵建议" more></ciy-swipelist>
<ciy-swipelist title="帮助中心" @tap="gourl" data-url="/pages/main/psection?id=1" right="FAQ" more></ciy-swipelist> <ciy-swipelist title="帮助中心" @tap="gourl" data-url="/pages/pub/psection?id=1" right="FAQ" more></ciy-swipelist>
<ciy-swipelist v-if="me.id>0" title="工单提问" @tap="gourl" data-url="$/pages/main/me_problem" right="提交您的问题" more></ciy-swipelist> <ciy-swipelist v-if="me.id>0" title="工单提问" @tap="gourl" data-url="$/pages/me/problem_pub" right="提交您的问题" more></ciy-swipelist>
<ciy-swipelist title="联系客服" more> <ciy-swipelist title="联系客服" more>
<button open-type="contact" plain class="btn tran" style="color:var(--txt5)">在线客服</button> <button open-type="contact" plain class="btn tran" style="color:var(--txt5)">在线客服</button>
</ciy-swipelist> </ciy-swipelist>
<ciy-swipelist title="关于我们" @tap="gourl" data-url="/pages/main/paper?id=1" right="众产" more></ciy-swipelist> <ciy-swipelist title="关于我们" @tap="gourl" data-url="/pages/pub/paper?id=1" right="众产" more></ciy-swipelist>
<ciy-swipelist title="软件版本" @tap="upver" :right="version" more></ciy-swipelist> <ciy-swipelist title="软件版本" @tap="upver" :right="version" more></ciy-swipelist>
<view class="bg5" v-if="me.id>0" style="height:0.5em;"></view> <view class="bg5" v-if="me.id>0" style="height:0.5rem;"></view>
<ciy-swipelist v-if="me.id>0" title="重新登录" @tap="relogin" more></ciy-swipelist> <ciy-swipelist v-if="me.id>0" title="重新登录" @tap="relogin" more></ciy-swipelist>
<ciy-tabbar ref="tabbar"></ciy-tabbar> <ciy-tabbar ref="tabbar"></ciy-tabbar>
</template> </template>
@ -130,14 +136,17 @@
export default { export default {
data() { data() {
return { return {
svg: {},
version:'',
showbalance: false, showbalance: false,
svg: {
ciy: '<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M987.136 384.512C919.552 131.584 668.16-22.528 415.232 27.136c219.648-41.984 434.176 79.36 488.96 283.136 57.344 214.016-82.944 437.76-313.344 499.2-49.664 13.312-78.848 64-65.536 113.152 13.312 49.664 64 78.848 113.152 65.536 263.168-70.144 418.816-340.48 348.672-603.648zM116.224 713.216C58.88 499.2 199.68 275.456 430.08 214.016c49.664-13.312 78.848-64 65.536-113.152C482.816 51.2 432.128 21.504 382.464 34.816c-263.68 70.656-419.84 340.992-349.184 604.16 67.584 252.928 319.488 407.04 571.392 356.864-219.648 42.496-433.664-78.848-488.448-282.624z m93.184-203.776L291.84 449.536c44.544-32.256 90.112-32.256 133.12-0.512l83.456 60.928-149.504-230.4-149.504 229.888z m516.096-60.416L808.96 509.952l-149.504-229.888-149.504 229.376 82.432-59.904c44.544-32.256 90.112-32.256 133.12-0.512z m-366.08 291.84L441.856 680.96c44.544-32.256 90.112-32.256 133.12-0.512l83.456 60.928-149.504-230.4-149.504 229.888z" fill="#56a4ef"></path></svg>',
},
} }
}, },
onLoad() {}, onLoad() {
onShow() { var app = getApp();
this.version = app.globalData._version;
this.load_svgicon(this.file_stor('/svgicon/me.txt')).then(svgs => {
this.svg = svgs;
});
this.getinit(); this.getinit();
}, },
onPullDownRefresh(b) { onPullDownRefresh(b) {
@ -147,26 +156,28 @@
}, },
methods: { methods: {
async getinit() { async getinit() {
this.getauth(); await this.getauth();
var retjson = this.callajax({ var retjson = await this.callfunc({
func: 'me.usrbuy_get', func: 'main.me_init',
cache: 86400, //cache: 86400,
data: {}
}).then(json => {
this.init = json;
}); });
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init = retjson;
}, },
async getbalance(act) { async getbalance(act) {
var auth = await this.getauth(); if (this._loading)
if(auth.me.id == 0) return;
await this.getauth();
if (this.me.id == 0)
return; return;
if (act == 2) { if (act == 2) {
this.showbalance = false; this.showbalance = false;
return; return;
} }
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.balance_get', func: 'me.me_balance_get',
data: {} data: {}
}); });
this._loading = false; this._loading = false;
@ -184,8 +195,8 @@
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.buy_usernow', func: 'me.me_userbuy_create',
data: { data: {
id: item.id id: item.id
} }
@ -198,8 +209,8 @@
try { try {
var retpay = await uni.requestPayment(retjson); var retpay = await uni.requestPayment(retjson);
await this.sleep(1000); await this.sleep(1000);
var retjson2 = await this.callajax({ var retjson2 = await this.callfunc({
func: 'me.buy_userchk', func: 'me.me_userbuy_chk',
data: { data: {
orderid: retjson.orderid orderid: retjson.orderid
} }
@ -214,20 +225,20 @@
}, },
relogin() { relogin() {
this.clearstorage(); this.clearstorage();
this.getauth(true); this.getauth('relogin');
}, },
upver() { upver() {
var app = getApp(); var app = getApp();
app.appupdate('all', async verinfo => { app.appupdate('all', async verinfo => {
return await this.askmsg(verinfo, '更新') == 'ok'; return await this.askmsg(verinfo, '更新') == 'ok';
}); });
} },
} }
} }
</script> </script>
<style> <style>
.topbg { .topbg {
height: 10em; height: 10rem;
overflow: hidden; overflow: hidden;
position: absolute; position: absolute;
top: 0; top: 0;
@ -237,8 +248,8 @@
.topbg::before { .topbg::before {
content: ''; content: '';
left: -5em; left: -5rem;
right: -5em; right: -5rem;
border-radius: 0 0 100vw 100vw; border-radius: 0 0 100vw 100vw;
height: 100%; height: 100%;
background: linear-gradient(60deg, var(--e-userbg1), var(--e-userbg2)); background: linear-gradient(60deg, var(--e-userbg1), var(--e-userbg2));
@ -251,9 +262,9 @@
.avartop { .avartop {
position: relative; position: relative;
display: flex; display: flex;
margin: 0 0 0 1.5em; margin: 0 0 0 1.5rem;
width: 5em; width: 5rem;
height: 5em; height: 5rem;
border-radius: 50%; border-radius: 50%;
background: var(--bg2); background: var(--bg2);
border: 2px solid var(--bg1); border: 2px solid var(--bg1);
@ -270,30 +281,29 @@
position: relative; position: relative;
background: var(--bg1); background: var(--bg1);
color: var(--txt6); color: var(--txt6);
min-height: 7em; padding: 0.5rem;
padding: 0.5em; margin: 0 1rem 1rem 1rem;
margin: 0 1em 1em 1em; border-radius: 0.3rem;
border-radius: 0.3em;
box-shadow: 0 4px 8px var(--bg6); box-shadow: 0 4px 8px var(--bg6);
} }
.maincard .nick { .maincard .nick {
font-size: 1.2em; font-size: 1.2rem;
font-weight: bold; font-weight: bold;
padding-left: 4.5em; padding-left: 4.5rem;
} }
.expdate { .expdate {
display: block; display: block;
padding-left: 1em; padding-left: 1rem;
margin-top: -1em; margin-top: -1rem;
margin-bottom: 1em; margin-bottom: 1rem;
font-size: 0.9em; font-size: 0.9rem;
color: var(--succ5); color: var(--succ5);
} }
.caption { .caption {
font-size: 1.2em; font-size: 1.2rem;
font-weight: bold; font-weight: bold;
padding: 1em 0; padding: 1em 0;
} }
@ -310,12 +320,12 @@
padding: 1em 0; padding: 1em 0;
text-align: center; text-align: center;
border: 1px solid var(--bg4); border: 1px solid var(--bg4);
border-radius: 1em; border-radius: 1rem;
} }
.userpay>.item>.price { .userpay>.item>.price {
display: block; display: block;
font-size: 1.2em; font-size: 1.2rem;
font-weight: bold; font-weight: bold;
color: var(--man5); color: var(--man5);
} }
@ -327,13 +337,13 @@
.userpay>.item>.recommend { .userpay>.item>.recommend {
position: absolute; position: absolute;
top: -0.5em; top: -0.5rem;
right: 0.5em; right: 0.5rem;
padding: 0.2em 0.8em; padding: 0.2rem 0.8rem;
font-size: 0.8em; font-size: 0.8rem;
color: var(--dagt); color: var(--dagt);
background: var(--dag5); background: var(--dag5);
border-radius: 1em; border-radius: 1rem;
} }
.cgrid { .cgrid {
@ -344,30 +354,30 @@
.cgrid .item { .cgrid .item {
width: 48%; width: 48%;
margin-bottom: 1em; margin-bottom: 1rem;
padding: 1em; padding: 1rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
background: var(--bg3); background: var(--bg3);
border-radius: 1em; border-radius: 1rem;
} }
.cgrid .icon { .cgrid .icon {
width: 2em; width: 2rem;
height: 2em; height: 2rem;
margin-bottom: 0.5em; margin-bottom: 0.5rem;
border-radius: 50%; border-radius: 50%;
background: linear-gradient(-25deg, #1890ff, #c0e1ff); background: linear-gradient(-25deg, #1890ff, #c0e1ff);
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
font-size: 1.5em; font-size: 1.5rem;
} }
.icon { .icon {
width: 1.5em; width: 1.5rem;
height: 1.5em; height: 1.5rem;
} }
.icon.by { .icon.by {
@ -379,8 +389,8 @@
} }
.usrnum { .usrnum {
padding-top: 1em; padding-top: 1rem;
padding-bottom: 0.5em; padding-bottom: 0.5rem;
display: flex; display: flex;
} }
@ -392,10 +402,10 @@
.usrnum .num { .usrnum .num {
height: 2.5rem; height: 2.5rem;
padding-top: 0.2rem; padding-top: 0.2rem;
font-size: 1.3em; font-size: 1.3rem;
} }
.usrnum .tit { .usrnum .tit {
font-size: 0.9em; font-size: 0.9rem;
} }
</style> </style>

View File

@ -1,137 +0,0 @@
<template>
<ciy-header title="提现"></ciy-header>
<view v-if="init.code != 1">
<view class="px4 py4">
<view style="height:2em;width:60%;" class="ciy-skeleton"></view>
<view style="height:1em;width:40%;margin-left:1em;" class="ciy-skeleton"></view>
<view style="height:1em;width:50%;" class="ciy-skeleton"></view>
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
</view>
</view>
<view v-else>
<form @submit="submit" class="char3">
<view class="ciy-card">
<view class="content">
<view class="ciy-form">
<label>余额</label>
<view style="text-align: left;">
{{init.user.mycashmoney/100}}
</view>
</view>
<view class="ciy-form">
<label>可提现</label>
<view style="text-align: left;">
{{init.user.cash}}
</view>
</view>
<view class="ciy-form">
<label>提现流向</label>
<view style="text-align: left;">
<ciy-selbool name="cashtype" v-model="me.cashtype" y="银行" n="微信"></ciy-selbool>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" form-type="submit">申请提现</button>
</view>
<view class="ciy-tip">
每天可提交1次以元为单位申请
</view>
<view class="ciy-tip">
由于微信支付限制申请提现平台审核通过后还需手动点击收款操作
</view>
</view>
</view>
</form>
</view>
<view class="ciy-list" v-for="(item,index) in init.cash" :key="item.id">
<view class="l2">
<text class="kbd" :class="ccode(g.cashstatus, item.cashstatus,'clas')">{{ccode(g.cashstatus, item.cashstatus)}}</text>
</view>
<view class="lb">{{todatetime(item.addtimes)}}</view>
<view class="rb">
<text class="txt-lgg txt-wb px2">{{item.cashmoney/10000}}</text>
<text class="txt-smm"></text>
</view>
<view class="txt-right" v-if="item.cashtype==2">
<button class="btn" @tap="wxrecvpay(index)">立即收款</button>
</view>
<view class="txt-right" v-if="item.cashtype==1">
<button class="btn">上传发票</button>
</view>
</view>
<ciy-swipelist title="设置提现账户" @tap="gourl" data-url="$/pages/main/me_cash_bank" more></ciy-swipelist>
<ciy-swipelist title="提现历史记录" @tap="gourl" data-url="$/pages/main/me_cash_out" more></ciy-swipelist>
</template>
<style>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {
this.getinit();
},
methods: {
async getinit() {
var retjson = await this.callajax({
func: 'me.cash_get',
data: {}
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init = retjson;
this.init.user.cash = Math.floor(this.init.user.mycashmoney / 100);
if (this.init.user.cash < 0)
this.init.user.cash = 0;
},
async submit(e) {
if (this.init.user.cash <= 0)
return this.toast('不可提现');
if (this._loading)
return;
this._loading = true;
var retjson = await this.callajax({
func: 'me.cash',
data: {
cash: this.init.user.cash
}
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init.user.mycashmoney -= this.init.user.cash * 100;
this.init.user.cash = 0;
this.toast('申请成功');
},
async wxrecvpay(idx) {
if (this._loading)
return;
this._loading = true;
var retjson = await this.callajax({
func: 'me.wxrecvpay',
data: {
id: this.init.cash[idx].id
}
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init.cash.splice(idx, 1);
wx.requestMerchant({
mchId: retjson.transfer.mchid,
appId: retjson.transfer.appid,
package: retjson.transfer.package_info,
success: (res) => {
console.log('success Transfer:', res);
},
fail: (res) => {
console.log('fail Transfer:', res);
},
});
}
}
}
</script>

View File

@ -1,90 +0,0 @@
<template>
<ciy-header title="设置提现账号"></ciy-header>
<form @submit="submit" class="char3">
<view class="ciy-card">
<view class="content char4">
<view class="ciy-form">
<label class="imp">提现方案</label>
<view style="text-align: left;">
<ciy-selbool name="cashtype" v-model="me.cashtype" y="独立纳税" n="个人微信"></ciy-selbool>
</view>
</view>
<view class="ciy-form" v-if="me.cashtype == 1">
<label class="imp">银行卡号</label>
<view>
<ciy-input name="bankno" v-model="me.bankno" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form" v-if="me.cashtype == 1">
<label class="imp">开户银行</label>
<view>
<ciy-input name="bankname" v-model="me.bankname" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form" v-if="me.cashtype == 1">
<label class="imp">账户名称</label>
<view>
<ciy-input name="bankaccount" v-model="me.bankaccount" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" form-type="submit">设置</button>
</view>
</view>
</view>
</form>
<view class="ciy-tip">
个人微信提现<br />
 每次最低提现金额为1元<br />
 统一代扣缴20%个税每月汇总申报个税<br />
 以实名认证姓名身份证号及手机号为准<br />
<br />
独立纳税提现<br />
 每次最低提现金额为1000元<br />
 申请提现后平台收到电子发票后打款<br />
 注意: 电子发票抬头与账户名称一致<br />
</view>
</template>
<style>
</style>
<script>
export default {
data() {
return {
}
},
onLoad() {},
methods: {
async submit(e) {
if (e.detail.value.cashtype == 1) {
e.detail.value.bankno = e.detail.value.bankno.trim();
if (e.detail.value.bankno.length < 6)
return this.toast('请输入银行卡号');
if (e.detail.value.bankname.length == 0)
return this.toast('请输入开户行');
if (e.detail.value.bankaccount.length == 0)
return this.toast('请输入账户名称');
}
if (this._loading)
return;
this._loading = true;
var retjson = await this.callajax({
func: 'me.userbank_change',
data: e.detail.value
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.me.cashtype = e.detail.value.cashtype;
this.me.bankno = e.detail.value.bankno;
this.me.bankname = e.detail.value.bankname;
this.me.bankaccount = e.detail.value.bankaccount;
this.setstorage('me', this.me);
await this.toast('修改成功');
uni.navigateBack();
}
}
}
</script>

View File

@ -1,106 +0,0 @@
<template>
<ciy-header title="本人信息"></ciy-header>
<form @submit="submit" class="char3">
<view class="ciy-card">
<view class="content char4">
<view class="ciy-form">
<label class="imp">姓名称呼</label>
<view>
<ciy-input name="name" v-model="me.name" type="nickname" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label>头像</label>
<view>
<ciy-upload left v-model="me.icon" path="icon" name="icon" imgwidth="400" imgheight="400" camheight="100" sourcetype="rehcam,album,message"></ciy-upload>
</view>
<!-- #ifdef MP-WEIXIN -->
<view>
<button class="btn sm" open-type="chooseAvatar" @chooseavatar="wxavar">从微信获取</button>
</view>
<!-- #endif -->
</view>
<view class="ciy-form">
<label class="imp">手机号</label>
<view>
<ciy-input name="mobile" v-model="me.mobile" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label>微信</label>
<view>
<ciy-input name="wxno" v-model="me.wxno" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label>电子信箱</label>
<view>
<ciy-input name="email" v-model="me.email" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" form-type="submit">更新个人信息</button>
</view>
</view>
</view>
</form>
</template>
<style>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {
setTimeout(() => {
if (this.me.neednick)
this.me.name = '';
}, 100);
},
methods: {
async wxavar(e) {
var app = getApp();
var opn = {};
opn.post = {
from: 'avar'
};
opn.path = 'icon';
opn.stor = app.globalData.storselect;
opn.maxkb = 0;
opn.imgwidth = 400;
opn.imgheight = 400;
opn.zipjpg = 0.7;
this.me.icon = await this.file_upload1(e.detail.avatarUrl, opn);
},
async submit(e) {
if (!e.detail.value.name)
return this.toast('请输入姓名称呼');
if (!e.detail.value.mobile)
return this.toast('请输入手机号');
if (e.detail.value.name[0] == ':')
return this.toast('姓名称呼不能以:开头');
this._loading = true;
var retjson = await this.callajax({
func: 'me.userinfo_change',
data: e.detail.value
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.me.name = e.detail.value.name;
this.me.neednick = false;
this.me.icon = e.detail.value.icon;
this.me.mobile = e.detail.value.mobile;
this.me.wxno = e.detail.value.wxno;
this.me.email = e.detail.value.email;
this.setstorage('me', this.me);
await this.toast('修改成功');
uni.navigateBack();
}
}
}
</script>

View File

@ -1,94 +0,0 @@
<template>
<ciy-header title="我要开票"></ciy-header>
<view v-if="init.code != 1">
<view class="px4 py4">
<view style="height:2em;width:60%;" class="ciy-skeleton"></view>
<view style="height:1em;width:40%;margin-left:1em;" class="ciy-skeleton"></view>
<view style="height:1em;width:50%;" class="ciy-skeleton"></view>
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
</view>
</view>
<view v-else>
<form @submit="submit" class="char3">
<view class="ciy-card">
<view class="content">
<view class="ciy-form">
<label>可开票金额</label>
<view style="text-align: left;">
{{toint(init.user.myinvmoney/100)}}
</view>
</view>
<view class="ciy-form">
<label>开票金额</label>
<view>
<ciy-inputbet name="money" :value="toint(init.user.myinvmoney/100)*100" bb unit="元" bet="100"></ciy-inputbet>
</view>
</view>
<view class="ciy-form">
<label>发票抬头</label>
<view>
<ciy-selpage name="invtit" page="me_invoicetitle">
<template v-slot:default="{data}">
<view>{{data.name}}</view>
<view class="txt1">{{data.taxnumber}}</view>
</template>
</ciy-selpage>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" form-type="submit">申请开票</button>
</view>
<view class="ciy-tip">
开具增值税普通电子发票<br />
开票科目: 技术服务费<br />
联系客服签订技术服务合同
</view>
</view>
</view>
</form>
</view>
<ciy-swipelist title="开票历史" @tap="gourl" data-url="$/pages/main/me_invoice_history" more></ciy-swipelist>
</template>
<style>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {
this.getinit();
},
methods: {
async getinit() {
var retjson = await this.callajax({
func: 'me.balance_get',
data: {}
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init = retjson;
},
async submit(e) {
if (e.detail.value.money < 100)
return;
if (this.init.user.myinvmoney < e.detail.value.money)
return this.toast('开票金额不足');
if (this._loading)
return;
this._loading = true;
var retjson = await this.callajax({
func: 'me.invoicing',
data: e.detail.value
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init.user.myinvmoney -= retjson.money;
this.toast('申请成功');
}
}
}
</script>

View File

@ -1,68 +0,0 @@
<template>
<ciy-header title="修改密码"></ciy-header>
<view>
<form @submit="submit" class="char4">
<view class="ciy-card">
<view class="content">
<view class="ciy-form" v-if="!me.needpass">
<label class="imp">旧密码</label>
<view>
<ciy-input name="oldpass" type="password" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label class="imp">新密码</label>
<view>
<ciy-input name="newpass" type="password" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label class="imp">再次输入</label>
<view>
<ciy-input name="repass" type="password" bb></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" form-type="submit">修改密码</button>
</view>
</view>
</view>
</form>
</view>
</template>
<style>
</style>
<script>
export default {
data() {
return {
}
}
, onLoad() {
}
, methods: {
async submit(e) {
if (e.detail.value.newpass.length < 1)
return this.toast('请输入新密码');
if (e.detail.value.newpass != e.detail.value.repass)
return this.toast('两次输入的新密码不同');
if (this._loading)
return;
this._loading = true;
var retjson = await this.callajax({
func: 'me.pass_change',
data: e.detail.value
});
this._loading = false;
if(retjson.code != 1)
return this.alert(retjson.errmsg);
this.me.needpass = false;
this.setstorage('me', this.me);
await this.toast('修改成功');
uni.navigateBack();
}
}
}
</script>

View File

@ -9,9 +9,9 @@
<view class="ciy-card"> <view class="ciy-card">
<view class="content char4"> <view class="content char4">
<view class="flex flex-wrap" style="gap:1em;"> <view class="flex flex-wrap" style="gap:1em;">
<view class="fpay" v-for="(item,index) in init.charges" :key="item" @tap="currbuy=index;money=item" :class="{select:currbuy==index}"> <view class="fpay" v-for="(item,index) in init.charges" :key="item" @tap="currbuy=index;money=item.chargemoney" :class="{select:currbuy==index}">
<view class="money"> <view class="money">
<text>{{item/100}}</text> <text>{{item.chargemoney/100}}</text>
</view> </view>
</view> </view>
</view> </view>
@ -25,9 +25,10 @@
<view class="ciy-form-bottom"> <view class="ciy-form-bottom">
<button class="btn lg cc" @tap="paynow">立即充值</button> <button class="btn lg cc" @tap="paynow">立即充值</button>
</view> </view>
<view class="ciy-tip">充值资金仅可用于本平台指定服务不可提现不可转让平台不提供资金保管或理财服务</view>
</view> </view>
<view class="ciy-hr"></view> <view class="ciy-hr"></view>
<ciy-swipelist title="充值记录" @tap="gourl" data-url="$/pages/main/me_cash_in" more></ciy-swipelist> <ciy-swipelist title="充值记录" @tap="gourl" data-url="cashin_lst" more></ciy-swipelist>
</view> </view>
</template> </template>
@ -72,12 +73,13 @@
}, },
methods: { methods: {
async getinit() { async getinit() {
this.init.charges = []; var retjson = await this.callfunc({
this.init.charges.push(10000); func: 'me.cash_charge_init',
this.init.charges.push(50000); data: this.pagepost
this.init.charges.push(100000); });
this.init.charges.push(500000); if (retjson.code != 1)
this.init.code = 1; return this.alert(retjson.errmsg);
this.init = retjson;
this.money = this.toint(this.opn.pay); this.money = this.toint(this.opn.pay);
if(this.money > 0) if(this.money > 0)
this.paynow(); this.paynow();
@ -88,8 +90,8 @@
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.charge_paynow', func: 'me.cash_charge_pay',
data: { data: {
money: this.money money: this.money
} }
@ -102,8 +104,8 @@
try { try {
var retpay = await uni.requestPayment(retjson); var retpay = await uni.requestPayment(retjson);
await this.sleep(1000); await this.sleep(1000);
var retjson2 = await this.callajax({ var retjson2 = await this.callfunc({
func: 'me.charge_paychk', func: 'me.cash_charge_chk',
data: { data: {
orderid: retjson.orderid orderid: retjson.orderid
} }

View File

@ -9,11 +9,11 @@
</view> </view>
<view v-else> <view v-else>
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}"> <view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
<ciy-segment lis="1:收入,2:支出" all="全部" v-model="liid" @change="segment_change"></ciy-segment> <ciy-segment lis="1:充退费,2:消费" all="全部" @change="segment_change"></ciy-segment>
</view> </view>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id"> <view class="ciy-list" v-for="(item,index) in init.list" :key="item.id">
<view class="l2" style="margin-right: 4em;">{{item.name}}</view> <view class="l2" style="margin-right: 4em;">{{item.name}}</view>
<view class="rt"><text class="code">{{ccode(g.cashietype, item.cashietype)}}</text></view> <view class="rt"><text class="code">{{ccode(g.cashtype, item.cashtype)}}</text></view>
<view class="lb">{{todatetime(item.addtimes)}}</view> <view class="lb">{{todatetime(item.addtimes)}}</view>
<view class="rb txt-lgg txt-wb">{{item.iemoney/100}}</view> <view class="rb txt-lgg txt-wb">{{item.iemoney/100}}</view>
</view> </view>
@ -27,12 +27,9 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
liid: 0,
}
}, },
onLoad() { onLoad() {
this.liid = this.opn.liid;
this.getlist(); this.getlist();
}, },
onReachBottom(b) { onReachBottom(b) {
@ -51,13 +48,12 @@
async getlist() { async getlist() {
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.query.liid = this.liid;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.cashie_get', func: 'me.cashie_lst_list',
data: this.pagepost data: this.pagepost
}); });
this._loading = false; this._loading = false;
@ -70,16 +66,8 @@
if (retjson.list.length < retjson.pagecount) if (retjson.list.length < retjson.pagecount)
this.pageno = -1; this.pageno = -1;
}, },
segment_change() { segment_change(e) {
this.pageno = 0; this.pagepost.liid = e.value.id;
this.getlist();
uni.pageScrollTo({
scrollTop: 0,
duration: 800
});
},
search_change(e) {
this.pagepost.query.key = e.value;
this.pageno = 0; this.pageno = 0;
this.getlist(); this.getlist();
uni.pageScrollTo({ uni.pageScrollTo({

View File

@ -9,7 +9,9 @@
</view> </view>
<view v-else> <view v-else>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id"> <view class="ciy-list" v-for="(item,index) in init.list" :key="item.id">
<view class="l2"><ciy-showmoney :value="item.inmoney" ciystyle="text-align:left;font-size:1.5em;"></ciy-showmoney></view> <view class="l2">支付流水</view>
<view class="l3">{{item.name}}</view>
<view class="rt"><ciy-showmoney :value="item.inmoney" ciystyle="font-size:1.5em;"></ciy-showmoney></view>
<view class="rb">{{todatetime(item.addtimes)}}</view> <view class="rb">{{todatetime(item.addtimes)}}</view>
</view> </view>
<ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend> <ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend>
@ -22,12 +24,9 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
liid: 0,
}
}, },
onLoad() { onLoad() {
this.liid = this.opn.liid;
this.getlist(); this.getlist();
}, },
onReachBottom(b) { onReachBottom(b) {
@ -46,13 +45,12 @@
async getlist() { async getlist() {
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.query.liid = this.liid;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.cashin_get', func: 'me.cashin_lst_list',
data: this.pagepost data: this.pagepost
}); });
this._loading = false; this._loading = false;

View File

@ -1,5 +1,5 @@
<template> <template>
<ciy-header title="提现历史记录" ref="header"></ciy-header> <ciy-header title="收益明细" ref="header"></ciy-header>
<view v-if="init.code != 1"> <view v-if="init.code != 1">
<view class="px4 py4"> <view class="px4 py4">
<view style="height:2em;width:100%;" class="ciy-skeleton"></view> <view style="height:2em;width:100%;" class="ciy-skeleton"></view>
@ -9,13 +9,13 @@
</view> </view>
<view v-else> <view v-else>
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}"> <view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
<ciy-segment all="全部" :lis="init.lis" v-model="liid" @change="segment_change"></ciy-segment> <ciy-segment lis="1:收益,2:提现" all="全部" @change="segment_change"></ciy-segment>
</view> </view>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id"> <view class="ciy-list" v-for="(item,index) in init.list" :key="item.id">
<view class="l2" style="margin-right: 4em;">{{item.cashtype==1?'银行收款 (开具发票独立纳税)':'微信打款 (代扣缴个税)'}}</view> <view class="l2" style="margin-right: 4em;">{{item.name}}</view>
<view class="rt"><text class="kbd" :class="ccode(g.cashstatus, item.cashstatus,'clas')">{{ccode(g.cashstatus, item.cashstatus)}}</text></view> <view class="rt"><text class="code">{{ccode(g.cashtype, item.cashtype)}}</text></view>
<view class="lb">{{todatetime(item.addtimes)}}</view> <view class="lb">{{todatetime(item.addtimes)}}</view>
<view class="rb txt-lgg txt-wb">{{item.cashmoney/100}}</view> <view class="rb txt-lgg txt-wb">{{item.oemoney/100}}</view>
</view> </view>
<ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend> <ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend>
</view> </view>
@ -27,16 +27,9 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
liid: 0,
pageno: 0,
}
}, },
onLoad() { onLoad() {
this.liid = this.opn.liid;
this.init.lis = [...this.g.cashstatus];
var ind = this.arrayfind(this.init.lis, 21, 'id');
this.init.lis.splice(ind, 1);
this.getlist(); this.getlist();
}, },
onReachBottom(b) { onReachBottom(b) {
@ -55,13 +48,12 @@
async getlist() { async getlist() {
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.query.liid = this.liid;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.cashout_get', func: 'me.cashoe_lst_list',
data: this.pagepost data: this.pagepost
}); });
this._loading = false; this._loading = false;
@ -74,14 +66,15 @@
if (retjson.list.length < retjson.pagecount) if (retjson.list.length < retjson.pagecount)
this.pageno = -1; this.pageno = -1;
}, },
segment_change() { segment_change(e) {
this.pagepost.liid = e.value.id;
this.pageno = 0; this.pageno = 0;
this.getlist(); this.getlist();
uni.pageScrollTo({ uni.pageScrollTo({
scrollTop: 0, scrollTop: 0,
duration: 800 duration: 800
}); });
} },
} }
} }
</script> </script>

View File

@ -0,0 +1,196 @@
<template>
<ciy-header title="提现"></ciy-header>
<view v-if="init.code != 1">
<view class="px4 py4">
<view style="height:2em;width:60%;" class="ciy-skeleton"></view>
<view style="height:1em;width:40%;margin-left:1em;" class="ciy-skeleton"></view>
<view style="height:1em;width:50%;" class="ciy-skeleton"></view>
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
</view>
</view>
<view v-else>
<view class="ciy-list" v-for="(item,index) in init.cashs" :key="item.id">
<view class="l2">
<text class="kbd">{{cashtype==1?'银行':'微信'}}</text>
{{item.taxmoney==-1?'企业开具发票':'代缴个税 ' + (item.taxmoney/100)+' 元'}}
</view>
<ciy-showimgs label="发票" :src="item.invfile"></ciy-showimgs>
<view class="l2" v-if="item.invcode">发票号码 {{item.invcode}}</view>
<view class="l2" v-if="item.cashtimes>0">操作时间 {{todatetime(item.cashtimes)}}</view>
<view class="l2" v-if="item.cashno">支付编号 {{item.cashno}}</view>
<view class="l2" v-if="item.auditmsg">拒绝原因 {{item.auditmsg}}</view>
<view class="l2" v-if="item.bankaccount">账户名称 {{item.bankaccount}}</view>
<view class="l2" v-if="item.bankno">银行卡号 {{item.bankno}}</view>
<view class="l2" v-if="item.bankname">开户银行 {{item.bankname}}</view>
<view class="l2" v-if="item.bankcode">联行号 {{item.bankcode}}</view>
<view v-if="item.cashstatus==20 && item.cashtype==2">
<button class="btn" @tap="wxrecvpay(index)">立即收款</button>
</view>
<view v-if="item.cashstatus==20 && item.cashtype==1">
<button class="btn" @tap="showinv(index)">上传发票</button>
</view>
<view class="rt"><text class="kbd" :class="ccode(g.cashstatus, item.cashstatus,'clas')">{{ccode(g.cashstatus, item.cashstatus)}}</text></view>
<view class="lb">{{todatetime(item.addtimes)}}</view>
<view class="rb txt-lgg txt-wb">{{item.cashmoney/100}}</view>
</view>
<view class="ciy-card char3" v-if="init.cashs.length==0">
<view class="content">
<view class="ciy-form">
<label>余额</label>
<view class="txt-left">
{{init.user.mycashmoney/100}}
</view>
</view>
<view class="ciy-form">
<label>可提现</label>
<view class="txt-left">
<ciy-inputbet left bb v-model="editdata.cash" unit="元" bet="100"></ciy-inputbet>
</view>
</view>
<view class="ciy-form">
<label>提现流向</label>
<view class="txt-left">
<ciy-selbool v-model="editdata.cashtype" y="银行" n="微信"></ciy-selbool>
</view>
</view>
<view class="ciy-form">
<label>税务方案</label>
<view class="txt-left">
{{editdata.cashtype==2?'代扣缴个税':(me.truename == me.bankaccount?'代扣缴个税':'对公开具发票')}}
</view>
</view>
<view class="ciy-form" v-if="editdata.cashtype==1">
<label>银行账户</label>
<view class="txt-left">
{{me.bankaccount}}<br />
{{me.bankname}}<br />
{{me.bankno}}<br />
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="cashsubmit">申请提现</button>
</view>
<view class="ciy-tip"><ciy-markdown :md="init.tip"></ciy-markdown></view>
</view>
</view>
<ciy-swipelist v-else title="可提现余额" :right="init.user.mycashmoney/100+'元'"></ciy-swipelist>
</view>
<ciy-swipelist title="提现历史记录" @tap="gourl" data-url="$/pages/me/cashout_lst" more></ciy-swipelist>
<ciy-anipop v-model="popinv" :zindex="991" maskbg="#00000077" title="上传发票">
<view class="bg1 pop">
<view class="ciy-form">
<label class="imp">发票编号</label>
<view>
<ciy-input bb v-model="invedit.invcode" type="text"></ciy-input>
</view>
</view>
<view class="ciy-form">
<label class="imp">上传发票</label>
<view style="height:10em;">
<ciy-upload left num="1" path="cashinv" v-model="invedit.invfile" imgwidth="1600" sourcetype="camera,album,message"></ciy-upload>
</view>
</view>
<view class="px4 py4 txt-center">
<button class="btn lg" @tap="invsubmit">提交</button>
</view>
</view>
</ciy-anipop>
<view :style="{height:header_statusbar_height+'px'}"></view>
</template>
<style>
</style>
<script>
export default {
data() {
return {
popinv: false,
invedit: {}
}
},
onLoad() {
this.getinit();
},
methods: {
async getinit() {
var retjson = await this.callfunc({
func: 'me.cashout_cash_init',
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init = retjson;
this.editdata.cashtype = 2;
this.editdata.cash = Math.floor(this.init.user.mycashmoney / 100) * 100;
if (this.editdata.cash < 0)
this.editdata.cash = 0;
},
async cashsubmit() {
await this.getauth('bank');
if (this.editdata.cash <= 0)
return this.toast('不可提现');
if (this._loading)
return;
this._loading = true;
var retjson = await this.callfunc({
func: 'me.cashout_cash_submit',
data: this.editdata
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init.user.mycashmoney -= this.editdata.cash;
this.editdata.cash = 0;
this.toast('申请成功');
},
async wxrecvpay(idx) {
if (this._loading)
return;
this._loading = true;
var retjson = await this.callfunc({
func: 'me.cashout_cash_wxrecvpay',
data: {
id: this.init.cashs[idx].id
}
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
wx.requestMerchantTransfer({
mchId: retjson.transfer.mchid,
appId: retjson.transfer.appid,
package: retjson.transfer.package_info,
success: res => {
this.init.cashs.splice(idx, 1);
console.log('success Transfer:', res);
},
fail: (res) => {
console.log('fail Transfer:', res);
},
});
},
showinv(idx) {
this.invedit.id = this.init.cashs[idx].id;
this.popinv = true;
},
async invsubmit(e) {
if (this._loading)
return;
this._loading = true;
var retjson = await this.callfunc({
func: 'me.cashout_cash_inv',
data: this.invedit
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.objtolist(this.init.cashs, retjson.data);
this.toast('上传发票成功');
this.popinv = false;
},
}
}
</script>

View File

@ -0,0 +1,95 @@
<template>
<ciy-header title="提现历史记录" ref="header"></ciy-header>
<view v-if="init.code != 1">
<view class="px4 py4">
<view style="height:2em;width:100%;" class="ciy-skeleton"></view>
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
</view>
</view>
<view v-else>
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
<ciy-segment lis="90:已拒绝,100:已完成" all="全部" @change="segment_change"></ciy-segment>
</view>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id">
<view class="l2">
<text class="kbd">{{cashtype==1?'银行':'微信'}}</text>
{{item.taxmoney==-1?'企业开具发票':'代缴个税 ' + (item.taxmoney/100)+' 元'}}
</view>
<ciy-showimgs label="发票" :src="item.invfile"></ciy-showimgs>
<view class="l2" v-if="item.invcode">发票号码 {{item.invcode}}</view>
<view class="l2" v-if="item.cashtimes>0">操作时间 {{todatetime(item.cashtimes)}}</view>
<view class="l2" v-if="item.cashno">支付编号 {{item.cashno}}</view>
<view class="l2" v-if="item.auditmsg">拒绝原因 {{item.auditmsg}}</view>
<view class="l2" v-if="item.bankaccount">账户名称 {{item.bankaccount}}</view>
<view class="l2" v-if="item.bankno">银行卡号 {{item.bankno}}</view>
<view class="l2" v-if="item.bankname">开户银行 {{item.bankname}}</view>
<view class="l2" v-if="item.bankcode">联行号 {{item.bankcode}}</view>
<view class="rt"><text class="kbd" :class="ccode(g.cashstatus, item.cashstatus,'clas')">{{ccode(g.cashstatus, item.cashstatus)}}</text></view>
<view class="lb">{{todatetime(item.addtimes)}}</view>
<view class="rb txt-lgg txt-wb">{{item.cashmoney/100}}</view>
</view>
<ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend>
</view>
</template>
<style>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {
this.getlist();
},
onReachBottom(b) {
if (this.init.code != 1)
return;
this.getlist();
},
onPullDownRefresh(b) {
this.pageno = 0;
this._stopPullDown = true;
this.getlist();
},
watch: {},
computed: {},
methods: {
async getlist() {
if (this.pageno < 0)
return;
if (this._loading)
return;
this.pagepost.pageno = this.pageno + 1;
this._loading = true;
var retjson = await this.callfunc({
func: 'me.cashout_lst_list',
data: this.pagepost
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.pageno++;
if (this.pageno == 1)
this.init.list = [];
this.init = this.objdeepmerge(this.init, retjson);
if (retjson.list.length < retjson.pagecount)
this.pageno = -1;
},
segment_change(e) {
this.pagepost.liid = e.value.id;
this.pageno = 0;
this.getlist();
uni.pageScrollTo({
scrollTop: 0,
duration: 800
});
}
}
}
</script>

View File

@ -7,13 +7,13 @@
</view> </view>
<view v-else> <view v-else>
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}"> <view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
<ciy-segment :lis="init.lis" all="全部" v-model="liid" @change="segment_change"></ciy-segment> <ciy-segment lis="20:待开票,100:已开票,90:已拒开" all="全部" @change="segment_change"></ciy-segment>
</view> </view>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id"> <view class="ciy-list" v-for="(item,index) in init.list" :key="item.id">
<view class="rt"> <view class="rt">
<text class="code" v-if="item.invtimes>0">已开票</text> <text class="kbd" :class="ccode(g.auditstatus, item.auditstatus,'clas')">{{ccode(g.auditstatus,item.auditstatus)}}</text>
<text class="code" v-else style="color:var(--txt1);">未开票</text>
</view> </view>
<view class="l2 txt-wb">{{ccode(init.ap_invoicedetail,item.invoicedetailid)}}</view>
<view class="l2">{{item.name}}</view> <view class="l2">{{item.name}}</view>
<view class="l3" v-if="item.taxnumber">税号 {{item.taxnumber}}</view> <view class="l3" v-if="item.taxnumber">税号 {{item.taxnumber}}</view>
<view class="l3" v-if="item.addr">地址 {{item.addr}}</view> <view class="l3" v-if="item.addr">地址 {{item.addr}}</view>
@ -21,6 +21,13 @@
<view class="l3" v-if="item.bankname">银行 {{item.bankname}}</view> <view class="l3" v-if="item.bankname">银行 {{item.bankname}}</view>
<view class="l3" v-if="bankaccount">账号 {{item.bankaccount}}</view> <view class="l3" v-if="bankaccount">账号 {{item.bankaccount}}</view>
<view class="lb">{{todatetime(item.addtimes)}}</view> <view class="lb">{{todatetime(item.addtimes)}}</view>
<template v-if="item.audittimes>20">
<view class="ciy-hr"></view>
<view class="l2" v-if="item.invcode">发票号码 <text class="txt-lgg px2" @tap="copyboard(item.invcode)">{{item.invcode}}</text></view>
<ciy-showimgs label="发票附件" :src="item.invfile"></ciy-showimgs>
<view class="l2">操作时间 {{todatetime(item.audittimes)}}</view>
<view class="l2" v-if="item.auditmsg">拒开原因 {{item.auditmsg}}</view>
</template>
<view class="rb"> <view class="rb">
<text class="txt-lgg txt-wb px2">{{item.invoicemoney/100}}</text> <text class="txt-lgg txt-wb px2">{{item.invoicemoney/100}}</text>
<text class="txt-smm"></text> <text class="txt-smm"></text>
@ -36,22 +43,9 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
liid: 0,
pageno: 0,
}
}, },
onLoad() { onLoad() {
this.liid = this.opn.liid;
this.init.lis = [];
this.init.lis.push({
id: 2,
name: '待开票'
});
this.init.lis.push({
id: 3,
name: '已开票'
});
this.getlist(); this.getlist();
}, },
onReachBottom(b) { onReachBottom(b) {
@ -70,13 +64,12 @@
async getlist() { async getlist() {
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.query.liid = this.liid;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.invoicing_get', func: 'me.invoice_lst_list',
data: this.pagepost data: this.pagepost
}); });
this._loading = false; this._loading = false;
@ -89,7 +82,8 @@
if (retjson.list.length < retjson.pagecount) if (retjson.list.length < retjson.pagecount)
this.pageno = -1; this.pageno = -1;
}, },
segment_change() { segment_change(e) {
this.pagepost.liid = e.value.id;
this.pageno = 0; this.pageno = 0;
this.getlist(); this.getlist();
uni.pageScrollTo({ uni.pageScrollTo({

View File

@ -6,70 +6,68 @@
<view style="height:8em;width:100%;" class="ciy-skeleton"></view> <view style="height:8em;width:100%;" class="ciy-skeleton"></view>
</view> </view>
<view v-else> <view v-else>
<view class="ciy-list" :class="{selected:opn.sel&&item.id==opn.id,del:item._clas=='del'}" v-for="(item,index) in init.list" :key="item.id" @click="select(item.id)"> <view class="ciy-list" :class="{selected:opn.sel&&item.id==opn.id,del:item._del}" v-for="(item,index) in init.list" :key="item.id" @tap="select(item.id)">
<view class="l2">名称 {{item.name}}</view> <view class="l2">名称 {{item.name}}</view>
<view class="l2" v-if="item.taxnumber">税号 {{item.taxnumber}}</view> <view class="l2" v-if="item.taxnumber">税号 {{item.taxnumber}}</view>
<view class="l2" v-if="item.addr">单位地址 {{item.addr}}</view> <view class="l2" v-if="item.addr">单位地址 {{item.addr}}</view>
<view class="l2" v-if="item.phone">电话号码 {{item.phone}}</view> <view class="l2" v-if="item.phone">电话号码 {{item.phone}}</view>
<view class="l2" v-if="item.bankname">银行名称 {{item.bankname}}</view> <view class="l2" v-if="item.bankname">银行名称 {{item.bankname}}</view>
<view class="l2" v-if="item.bankaccount">银行账号 {{item.bankaccount}}</view> <view class="l2" v-if="item.bankaccount">银行账号 {{item.bankaccount}}</view>
<view class="dot" @click="showmenu(index)"></view> <view class="dot" @tap.stop="showmenu(index)"></view>
</view> </view>
<view style="height:5em;"></view> <view style="height:5em;"></view>
<view class="ciy-add" style="z-index:41;" @tap="editshow(null)"></view> <view class="ciy-add" style="z-index:41;bottom:6em;" @tap="editshow(null)"></view>
<view v-if="opn.sel"> <view v-if="opn.sel">
<view class="bg1 txt-center py4 ciy-bottom"> <view class="bg1 txt-center py4 ciy-bottom">
<button class="btn lg" @click="selectok">选定</button> <button class="btn lg" @tap="selectok">选定</button>
</view> </view>
</view> </view>
<ciy-anipop v-model="popedit" :zindex="998" maskbg="#00000077" :title="edit.id>0?'更新抬头':'新建抬头'"> <ciy-anipop v-model="popedit" :zindex="998" maskbg="#00000077" :title="editdata.id>0?'更新抬头':'新建抬头'">
<view class="bg1 pop"> <view class="bg1 pop char5">
<form @submit="submit_edit" class="char5"> <view class="ciy-form">
<view class="ciy-form"> <label class="imp">抬头名称</label>
<label class="imp">抬头名称</label> <view>
<view> <ciy-input bb v-model="editdata.name"></ciy-input>
<ciy-input name="name" v-model="edit.name" bb></ciy-input>
</view>
</view> </view>
<view class="ciy-form"> </view>
<label class="imp">税号</label> <view class="ciy-form">
<view> <label>税号</label>
<ciy-input name="taxnumber" v-model="edit.taxnumber" bb></ciy-input> <view>
</view> <ciy-input bb v-model="editdata.taxnumber"></ciy-input>
</view> </view>
<view class="ciy-form"> </view>
<label>单位地址</label> <view class="ciy-form">
<view> <label>单位地址</label>
<ciy-input name="addr" v-model="edit.addr" bb></ciy-input> <view>
</view> <ciy-input bb v-model="editdata.addr"></ciy-input>
</view> </view>
<view class="ciy-form"> </view>
<label>电话号码</label> <view class="ciy-form">
<view> <label>电话号码</label>
<ciy-input name="phone" v-model="edit.phone" bb ciystyle="width:9em;"></ciy-input> <view>
</view> <ciy-input bb v-model="editdata.phone" ciystyle="width:9em;"></ciy-input>
</view> </view>
<view class="ciy-form"> </view>
<label>银行名称</label> <view class="ciy-form">
<view> <label>银行名称</label>
<ciy-input name="bankname" v-model="edit.bankname" bb></ciy-input> <view>
</view> <ciy-input bb v-model="editdata.bankname"></ciy-input>
</view> </view>
<view class="ciy-form"> </view>
<label>银行账号</label> <view class="ciy-form">
<view> <label>银行账号</label>
<ciy-input name="bankaccount" v-model="edit.bankaccount" bb></ciy-input> <view>
</view> <ciy-input bb v-model="editdata.bankaccount"></ciy-input>
</view> </view>
<view class="rel px4 py4 txt-center"> </view>
<button class="btn lg" form-type="submit">提交</button> <view class="rel px4 py4 txt-center">
<!-- #ifdef MP-WEIXIN --> <button class="btn lg" @tap="submit_edit">提交</button>
<view class="abs t1 r1"> <!-- #ifdef MP-WEIXIN -->
<button class="btn sm" @tap="chooseinvoice">从微信同步</button> <view class="abs t1 r1">
</view> <button class="btn sm" @tap="chooseinvoice">从微信同步</button>
<!-- #endif -->
</view> </view>
</form> <!-- #endif -->
</view>
</view> </view>
</ciy-anipop> </ciy-anipop>
</view> </view>
@ -95,9 +93,6 @@
data() { data() {
return { return {
popedit: false, popedit: false,
edit: {
id: -1
},
} }
}, },
onLoad() { onLoad() {
@ -110,8 +105,8 @@
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.invoicetitle_get' func: 'me.invoicetitle_list'
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)
@ -146,41 +141,35 @@
editshow(item) { editshow(item) {
item = item || { item = item || {
data: { data: {
_idx: -1 id: 0
} }
}; };
this.edit = { this.editdata = {
...item.data ...item.data
}; };
this.popedit = true; this.popedit = true;
}, },
async submit_edit(e) { async submit_edit() {
if (!e.detail.value.name) if (!this.editdata.name)
return this.alert('请输入抬头名称'); return this.alert('请输入抬头名称');
if (!e.detail.value.taxnumber)
return this.alert('请输入税号');
e.detail.value.id = this.edit.id;
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.invoicetitle_edit', func: 'me.invoicetitle_edit',
data: e.detail.value data: this.editdata
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)
return this.alert(retjson.errmsg); return this.alert(retjson.errmsg);
if (this.edit._idx == -1) this.objtolist(this.init.list, retjson.data);
this.init.list.unshift(retjson.data);
else
this.init.list[this.edit._idx] = this.objdeepmerge(this.init.list[this.edit._idx], retjson.data);
this.popedit = false; this.popedit = false;
this.toast('更新成功'); this.toast('更新成功');
}, },
async del(item) { async del(item) {
if (await this.askmsg('是否删除?') != 'ok') if (await this.askmsg('是否删除?') != 'ok')
return; return;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.invoicetitle_del', func: 'me.invoicetitle_del',
data: { data: {
id: item.data.id id: item.data.id
@ -188,7 +177,7 @@
}); });
if (retjson.code != 1) if (retjson.code != 1)
return this.alert(retjson.errmsg); return this.alert(retjson.errmsg);
this.init.list[item.data._idx]._clas = 'del'; this.init.list[item.data._idx]._del = true;
setTimeout(() => { setTimeout(() => {
this.init.list.splice(item.data._idx, 1); this.init.list.splice(item.data._idx, 1);
}, 500); }, 500);

View File

@ -0,0 +1,102 @@
<template>
<ciy-header title="我要开票"></ciy-header>
<view v-if="init.code != 1">
<view class="px4 py4">
<view style="height:2em;width:60%;" class="ciy-skeleton"></view>
<view style="height:1em;width:40%;margin-left:1em;" class="ciy-skeleton"></view>
<view style="height:1em;width:50%;" class="ciy-skeleton"></view>
<view style="height:6em;width:100%;" class="ciy-skeleton"></view>
</view>
</view>
<view v-else>
<view class="ciy-card char3">
<view class="content">
<view class="ciy-form">
<label>可开票金额</label>
<view style="text-align: left;">
{{init.user.myinvmoney/100}}
</view>
</view>
<view class="ciy-form">
<label>开票金额</label>
<view>
<ciy-inputbet bb v-model="editdata.money" unit="元" bet="100"></ciy-inputbet>
</view>
</view>
<view class="ciy-form" v-if="init.details.length>0">
<label>开票明细</label>
<view>
<ciy-select v-model="editdata.invoicedetailid" :range="init.details"></ciy-select>
</view>
</view>
<view class="ciy-form">
<label>发票抬头</label>
<view>
<ciy-selpage v-model="editdata.invoicetitleid" page="invoicetitle">
<template v-slot:default="{data}">
<view>{{data.name}}</view>
<view class="txt1">{{data.taxnumber}}</view>
</template>
</ciy-selpage>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="submit">申请开票</button>
</view>
<view class="ciy-tip"><ciy-markdown :md="init.tip"></ciy-markdown></view>
</view>
</view>
</view>
<ciy-swipelist title="开票历史" @tap="gourl" data-url="invoice_lst" more></ciy-swipelist>
</template>
<style>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {
this.getinit();
},
methods: {
async getinit() {
var retjson = await this.callfunc({
func: 'me.invoicing_init',
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init = retjson;
this.editdata.money = retjson.user.myinvmoney;
},
async submit() {
if (this.editdata.money < 1000)
return this.toast('开票金额10元');
if (this.init.user.myinvmoney < this.editdata.money)
return this.toast('开票金额不足');
if (!this.editdata.invoicetitleid)
return this.toast('请选择发票抬头');
if (this.init.details.length > 0) {
if (!this.editdata.invoicedetailid)
return this.toast('请选择发票明细');
}
if (this._loading)
return;
this._loading = true;
var retjson = await this.callfunc({
func: 'me.invoicing_submit',
data: this.editdata
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init.user.myinvmoney -= this.editdata.money;
this.me.myinvmoney = this.init.user.myinvmoney;
this.setstorage('me', this.me);
this.toast('申请成功');
}
}
}
</script>

View File

@ -71,7 +71,7 @@
return this.toast('请输入开户银行'); return this.toast('请输入开户银行');
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.me_bank_info_change', func: 'me.me_bank_info_change',
data: e.detail.value data: e.detail.value
}); });

View File

@ -6,9 +6,6 @@
<view style="height:6em;width:100%;" class="ciy-skeleton"></view> <view style="height:6em;width:100%;" class="ciy-skeleton"></view>
</view> </view>
<view v-else> <view v-else>
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
<ciy-segment :lis="init.lis" all="全部" v-model="liid" @change="segment_change"></ciy-segment>
</view>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id"> <view class="ciy-list" v-for="(item,index) in init.list" :key="item.id">
<view class="rt"> <view class="rt">
<text class="code" v-if="item.paytimes>0">已支付</text> <text class="code" v-if="item.paytimes>0">已支付</text>
@ -18,6 +15,8 @@
<text class="txt-lgg txt-wb px2">{{item.pnt}}</text> <text class="txt-lgg txt-wb px2">{{item.pnt}}</text>
<text class="txt-smm">金币</text> <text class="txt-smm">金币</text>
</view> </view>
<view class="l2">支付流水</view>
<view class="l3">{{item.name}}</view>
<view class="lb">{{todatetime(item.addtimes)}}</view> <view class="lb">{{todatetime(item.addtimes)}}</view>
<view class="rb"> <view class="rb">
<text class="txt-lgg txt-wb px2">{{item.buypntmoney/100}}</text> <text class="txt-lgg txt-wb px2">{{item.buypntmoney/100}}</text>
@ -34,22 +33,9 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
liid: 0,
pageno: 0,
}
}, },
onLoad() { onLoad() {
this.liid = this.opn.liid;
this.init.lis = [];
this.init.lis.push({
id: 2,
name: '未支付'
});
this.init.lis.push({
id: 3,
name: '已支付'
});
this.getlist(); this.getlist();
}, },
onReachBottom(b) { onReachBottom(b) {
@ -68,13 +54,12 @@
async getlist() { async getlist() {
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.query.liid = this.liid;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.pntbuy_get', func: 'me.pnt_buylst_list',
data: this.pagepost data: this.pagepost
}); });
this._loading = false; this._loading = false;
@ -87,14 +72,6 @@
if (retjson.list.length < retjson.pagecount) if (retjson.list.length < retjson.pagecount)
this.pageno = -1; this.pageno = -1;
}, },
segment_change() {
this.pageno = 0;
this.getlist();
uni.pageScrollTo({
scrollTop: 0,
duration: 800
});
}
} }
} }
</script> </script>

View File

@ -7,11 +7,11 @@
</view> </view>
<view v-else> <view v-else>
<view class="ciy-grid"> <view class="ciy-grid">
<view class="grid" style="width:50%" @tap="gourl" data-url="$/pages/main/me_pnt_buy"> <view class="grid" style="width:50%" @tap="gourl" data-url="pnt_buylst">
<view class="icon" :style="{backgroundImage:svg2bg(svg.buy)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.buy)}"></view>
<view class="name">购买记录</view> <view class="name">购买记录</view>
</view> </view>
<view class="grid" style="width:50%" @tap="gourl" data-url="/pages/main/me_pnt_record"> <view class="grid" style="width:50%" @tap="gourl" data-url="pnt_lst">
<view class="icon" :style="{backgroundImage:svg2bg(svg.record)}"></view> <view class="icon" :style="{backgroundImage:svg2bg(svg.record)}"></view>
<view class="name">金币流水</view> <view class="name">金币流水</view>
</view> </view>
@ -25,7 +25,7 @@
<text>{{tonumtho(item.buypnt)}}</text>金币 <text>{{tonumtho(item.buypnt)}}</text>金币
</view> </view>
<view class="money"> <view class="money">
<text>{{item.buymoney/100}}</text> <text class="txt-wl">{{item.buymoney/100}}</text>
</view> </view>
</view> </view>
</view> </view>
@ -72,7 +72,6 @@
.fpay .money>text { .fpay .money>text {
font-size: 2em; font-size: 2em;
padding: 0 0.3em; padding: 0 0.3em;
font-weight: 100;
} }
</style> </style>
@ -92,8 +91,8 @@
}, },
methods: { methods: {
async getinit() { async getinit() {
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.buy_init', func: 'me.pnt_buynow_init',
data: this.pagepost data: this.pagepost
}); });
if (retjson.code != 1) if (retjson.code != 1)
@ -104,8 +103,8 @@
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.buy_paynow', func: 'me.pnt_buynow_pay',
data: { data: {
id: this.init.buys[this.currbuy].id id: this.init.buys[this.currbuy].id
} }
@ -118,8 +117,8 @@
try { try {
var retpay = await uni.requestPayment(retjson); var retpay = await uni.requestPayment(retjson);
await this.sleep(1000); await this.sleep(1000);
var retjson2 = await this.callajax({ var retjson2 = await this.callfunc({
func: 'me.buy_paychk', func: 'me.pnt_buynow_chk',
data: { data: {
orderid: retjson.orderid orderid: retjson.orderid
} }

View File

@ -24,9 +24,7 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
pageno: 0,
}
}, },
onLoad() { onLoad() {
this.getlist(); this.getlist();
@ -47,12 +45,12 @@
async getlist() { async getlist() {
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.pntrecord_get', func: 'me.pnt_lst_list',
data: this.pagepost data: this.pagepost
}); });
this._loading = false; this._loading = false;

View File

@ -9,12 +9,9 @@
<view v-else class="flex flexcol" :style="'height:calc(100vh - ' + (header_statusbar_height+header_title_height) + 'px);'"> <view v-else class="flex flexcol" :style="'height:calc(100vh - ' + (header_statusbar_height+header_title_height) + 'px);'">
<scroll-view @scrolltoupper="chgupper" :scroll-top="top" id="id_chats" class="flex1" style="overflow: auto;" scroll-y> <scroll-view @scrolltoupper="chgupper" :scroll-top="top" id="id_chats" class="flex1" style="overflow: auto;" scroll-y>
<view class="ciy-list"> <view class="ciy-list">
<view class="l2" v-html="tobr(init.once.data.content)"></view> <view class="l2" v-html="tobr(init.problem.content)"></view>
<ciy-showimgs :src="init.once.data.imgs" label="图片截图"></ciy-showimgs> <ciy-showimgs :src="init.problem.imgs" label="图片截图"></ciy-showimgs>
<view class="rt"> <view class="rb">{{todatetime(init.problem.addtimes)}} 提交</view>
<button class="btn smm" @tap="closechat">关闭工单</button>
</view>
<view class="rb">{{todatetime(init.once.data.addtimes)}} 提交</view>
</view> </view>
<view :class="item._od" class="vchat" v-for="(item,index) in init.list" :key="item.id"> <view :class="item._od" class="vchat" v-for="(item,index) in init.list" :key="item.id">
<view class="nick" v-if="item.nick">{{item.nick}}</view> <view class="nick" v-if="item.nick">{{item.nick}}</view>
@ -22,11 +19,11 @@
<view class="time">{{todatetime(item.addtimes,'st')}}</view> <view class="time">{{todatetime(item.addtimes,'st')}}</view>
</view> </view>
</scroll-view> </scroll-view>
<form @submit="submitsend" v-if="init.once.data.closetimes==0"> <form v-if="init.problem.closetimes==0">
<view class="bg2 vchatsend"> <view class="bg2 vchatsend">
<!-- <view><button class="btn def" @tap="sendimg">图片</button></view> --> <!-- <view><button class="btn def" @tap="sendimg">图片</button></view> -->
<view style="flex:1;"><ciy-textarea name="content" v-model="content"></ciy-textarea></view> <view style="flex:1;"><ciy-textarea v-model="editdata.content"></ciy-textarea></view>
<view><button form-type="submit" class="btn">发送</button></view> <view><button @tap="submitsend" class="btn">发送</button></view>
</view> </view>
</form> </form>
<view class="bg2 txt-center px4 py4" v-else> <view class="bg2 txt-center px4 py4" v-else>
@ -67,6 +64,7 @@
.vchat.me .chat { .vchat.me .chat {
background: var(--succ4); background: var(--succ4);
color: var(--txt9);
display: inline-block; display: inline-block;
clear: both; clear: both;
padding: 0.5em; padding: 0.5em;
@ -89,8 +87,7 @@
export default { export default {
data() { data() {
return { return {
top: 0, top: 999999999,
content: ''
} }
}, },
onLoad() { onLoad() {
@ -114,8 +111,8 @@
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.problechat_get', func: 'me.problem_chat_get',
data: { data: {
mid: this.minid, mid: this.minid,
op: 'min', op: 'min',
@ -130,8 +127,8 @@
this.minid = 0; this.minid = 0;
}, },
async getnew(blong) { async getnew(blong) {
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.problechat_get', func: 'me.problem_chat_get',
data: { data: {
mid: this.maxid, mid: this.maxid,
op: 'max', op: 'max',
@ -168,19 +165,20 @@
chgupper(e) { chgupper(e) {
this.getlist(); this.getlist();
}, },
async submitsend(e) { async submitsend() {
if (!e.detail.value.content) if (!this.editdata.content)
return this.toast('请输入内容'); return this.toast('请输入内容');
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
e.detail.value.id = this.opn.id; var retjson = await this.callfunc({
var retjson = await this.callajax({ func: 'me.problem_chat_send',
func: 'me.problechat_send', data: this.editdata
data: e.detail.value
}); });
this._loading = false; this._loading = false;
this.content = ''; if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.editdata.content = '';
retjson.list = [retjson.data]; retjson.list = [retjson.data];
this.callist(retjson.list); this.callist(retjson.list);
this.init = this.objdeepmerge(this.init, retjson); this.init = this.objdeepmerge(this.init, retjson);
@ -188,21 +186,6 @@
this.top = 999999999 + this.maxid; this.top = 999999999 + this.maxid;
}, 300); }, 300);
}, },
async closechat(e) {
if (await this.askmsg('是否关闭工单?', '关闭') != 'ok')
return;
if (this._loading)
return;
this._loading = true;
var retjson = await this.callajax({
func: 'me.problechat_close',
data: {
id: this.opn.id
}
});
this._loading = false;
uni.navigateBack();
},
sendimg() {} sendimg() {}
} }
} }

View File

@ -7,10 +7,10 @@
</view> </view>
<view v-else> <view v-else>
<view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}"> <view class="sti" :style="{top:(header_statusbar_height+header_title_height)+'px'}">
<ciy-segment :lis="init.lis" v-model="liid" @change="segment_change"></ciy-segment> <ciy-segment lis=":等待中,3:有回复,9:已关闭" v-model="liid" @change="segment_change"></ciy-segment>
</view> </view>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id"> <view class="ciy-list" v-for="(item,index) in init.list" :key="item.id" @tap="showmenu(index)">
<view class="l2" v-html="tobr(item.content)" @tap="gourl" :data-url="'me_problechat?id=' + item.id"></view> <view class="l2" v-html="tobr(item.content)"></view>
<ciy-showimgs :src="item.imgs" label="图片截图"></ciy-showimgs> <ciy-showimgs :src="item.imgs" label="图片截图"></ciy-showimgs>
<view class="rt" v-if="item.closetimes>0">已关闭</view> <view class="rt" v-if="item.closetimes>0">已关闭</view>
<view class="rt" style="color:var(--succ5)" v-else-if="item.replytimes>0">有回复</view> <view class="rt" style="color:var(--succ5)" v-else-if="item.replytimes>0">有回复</view>
@ -21,29 +21,27 @@
<ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend> <ciy-listend :page="pageno" :listlen="init.list.length" :nodataimg="file_stor('/img/mbnone.png')"></ciy-listend>
<view class="ciy-add" @tap="openadd()"></view> <view class="ciy-add" @tap="openadd()"></view>
<ciy-dialog ref="dialog"> <ciy-dialog ref="dialog">
<form @submit="editsubmit"> <view class="ciy-form v">
<view class="ciy-form v"> <label class="imp">问题描述</label>
<label class="imp">问题描述</label> <view>
<view> <ciy-textarea bb v-model="editdata.content" ciystyle="min-height:4em"></ciy-textarea>
<ciy-textarea name="content" type="text" bb ciystyle="min-height:4em"></ciy-textarea>
</view>
</view> </view>
<view class="ciy-form"> </view>
<label>图片截图</label> <view class="ciy-form">
<view> <label>图片截图</label>
<ciy-upload left num="8" path="problem" name="imgs" imgwidth="1600" sourcetype="camera,album,message"></ciy-upload> <view>
</view> <ciy-upload left num="8" path="problem" v-model="editdata.imgs" imgwidth="1600" sourcetype="camera,album,message"></ciy-upload>
</view> </view>
<view class="ciy-form"> </view>
<label>联系方式</label> <view class="ciy-form">
<view> <label>联系方式</label>
<ciy-input :value="me.mobile" name="contract" type="text" bb></ciy-input> <view>
</view> <ciy-input bb v-model="editdata.contract"></ciy-input>
</view> </view>
<view class="ciy-form-bottom"> </view>
<button class="btn lg cc" form-type="submit">建立工单</button> <view class="ciy-form-bottom">
</view> <button class="btn lg cc" @tap="edited">建立工单</button>
</form> </view>
</ciy-dialog> </ciy-dialog>
</view> </view>
</template> </template>
@ -54,25 +52,9 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
liid: 0,
pageno: 0,
}
}, },
onLoad() { onLoad() {
this.init.lis = [];
this.init.lis.push({
id: '',
name: '等待中'
});
this.init.lis.push({
id: 3,
name: '有回复'
});
this.init.lis.push({
id: 9,
name: '已关闭'
});
this.getlist(); this.getlist();
}, },
onReachBottom(b) { onReachBottom(b) {
@ -91,13 +73,12 @@
async getlist() { async getlist() {
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.query.liid = this.liid;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.problem_get', func: 'me.problem_pub_list',
data: this.pagepost data: this.pagepost
}); });
this._loading = false; this._loading = false;
@ -111,32 +92,70 @@
this.pageno = -1; this.pageno = -1;
}, },
openadd() { openadd() {
this.editdata.contract = this.me.mobile;
this.getrefsSync('dialog').Open({ this.getrefsSync('dialog').Open({
title: '新建工单' title: '新建工单'
}); });
}, },
async editsubmit(e) { async edited() {
if (!e.detail.value.content) if (!this.editdata.content)
return this.toast('请输入问题描述'); return this.toast('请输入问题描述');
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.problem_add', func: 'me.problem_pub_add',
data: e.detail.value data: this.editdata
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.getrefsSync('dialog').Close(); this.getrefsSync('dialog').Close();
this.init.list.unshift(retjson.data); this.init.list.unshift(retjson.data);
}, },
segment_change() { segment_change(e) {
this.pagepost.liid = e.value.id;
this.pageno = 0; this.pageno = 0;
this.getlist(); this.getlist();
uni.pageScrollTo({ uni.pageScrollTo({
scrollTop: 0, scrollTop: 0,
duration: 800 duration: 800
}); });
} },
async close(item) {
if (await this.askmsg('是否关闭工单?', '关闭工单') != 'ok')
return;
var retjson = await this.callfunc({
func: 'me.problem_pub_close',
data: {
id: item.data.id
}
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.init.list[item.data._idx].closetimes = this.tostamp();
},
showmenu(idx) {
var dat = this.init.list[idx];
dat._idx = idx;
var items = [];
items.push({
url: 'problem_chat?id=' + dat.id,
name: '详情',
});
if (dat.closetimes == 0) {
items.push({
func: 'close',
name: '关闭工单',
data: dat,
style: 'color:var(--warn6)',
});
}
this.popmenu({
one: true,
items
});
},
} }
} }
</script> </script>

View File

@ -0,0 +1,98 @@
<template>
<ciy-header title="申请众识码"></ciy-header>
<view v-if="init.code != 1" class="px4 py4">
<view style="height:60vw;width:100%;" class="ciy-skeleton"></view>
</view>
<view v-else-if="me.cciy.length > 10" class="txt-center py4">
您已申请成功
<view @tap="copyboard(me.cciy)" class="txt-lgg py4">{{me.cciy}}</view>
</view>
<view v-else-if="init.data && init.data.auditstatus != 90">
<view class="ciy-tip" v-if="init.data.auditstatus == 20">您已提交申请等待审核...</view>
<view class="ciy-tip" v-if="init.data.auditstatus == 50">您的申请正在审核中...</view>
<view class="ciy-tip" v-if="init.data.auditstatus == 100">您已申请通过</view>
<view class="ciy-list">
<view class="l1">{{init.data.name}}</view>
<view class="l1">{{init.data.country}}</view>
<view class="rb">{{todatetime(init.data.addtimes)}} 申请</view>
</view>
</view>
<view v-else>
<view class="ciy-tip" v-if="init.data?.auditmsg">
{{init.data.auditmsg}}
</view>
<view class="ciy-card char4">
<view class="ciy-form">
<label class="imp">主体国籍</label>
<view>
<ciy-input bb v-model="editdata.country" type="idcard"></ciy-input>
</view>
<view class="flexnone px4" @tap="editdata.country='中国'">
中国
</view>
</view>
<view class="ciy-form">
<label class="imp">多国身份</label>
<view class="txt-left">
<ciy-selbool v-model="editdata.dualcitizen" y="存在" n="没有"></ciy-selbool>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="submit">申请众识码</button>
</view>
</view>
<view class="ciy-tip"><ciy-markdown :md="init.tip"></ciy-markdown></view>
</view>
</template>
<style>
</style>
<script>
export default {
data() {
return {
}
},
onLoad() {
this.getinit();
},
methods: {
async getinit() {
await this.getauth('real');
if(this.me.cciy.length > 11)
return this.init.code = 1;
this.editdata.dualcitizen = 2;
var retjson = await this.callfunc({
func: 'me.safe_ccub_init'
});
this.init = retjson;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
if (retjson.data && retjson.data.auditstatus == 100 && this.me.cciy.length < 12) {
this.me.cciy = retjson.data.cciy;
this.setstorage('me', this.me);
var app = getApp();
var page = app.getpage(1);
page.me = this.me;
}
},
async submit(e) {
if (this.editdata.country.length < 1)
return this.toast('请输入主体国籍');
if (this._loading)
return;
this._loading = true;
var retjson = await this.callfunc({
func: 'me.safe_ccub_submit',
data: this.editdata
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
await this.toast('申请提交成功');
uni.navigateBack();
},
}
}
</script>

View File

@ -0,0 +1,64 @@
<template>
<ciy-header title="修改密码"></ciy-header>
<view>
<view class="ciy-card char4">
<view class="content">
<view class="ciy-form" v-if="!me.needpass">
<label class="imp">旧密码</label>
<view>
<ciy-input v-model="editdata.oldpass" type="password" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label class="imp">新密码</label>
<view>
<ciy-input v-model="editdata.newpass" type="password" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label class="imp">再次输入</label>
<view>
<ciy-input v-model="editdata.repass" type="password" bb></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="submit">修改密码</button>
</view>
</view>
</view>
</view>
</template>
<style>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {},
methods: {
async submit() {
if (this.editdata.newpass.length < 1)
return this.toast('请输入新密码');
if (this.editdata.newpass != this.editdata.repass)
return this.toast('两次输入的新密码不同');
if (this._loading)
return;
this._loading = true;
var retjson = await this.callfunc({
func: 'me.safe_password_change',
data: this.editdata
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.me.needpass = false;
this.setstorage('me', this.me);
await this.toast('修改成功');
uni.navigateBack();
}
}
}
</script>

View File

@ -3,63 +3,69 @@
<view v-if="init.code != 1" class="px4 py4"> <view v-if="init.code != 1" class="px4 py4">
<view style="height:60vw;width:100%;" class="ciy-skeleton"></view> <view style="height:60vw;width:100%;" class="ciy-skeleton"></view>
</view> </view>
<view v-else-if="me.truename" class="txt-center py4">
{{me.truename}}已通过实名认证<br/>
{{tomsk(me.idid, '*#**')}}
</view>
<view v-else-if="init.data && init.data.auditstatus != 90"> <view v-else-if="init.data && init.data.auditstatus != 90">
<view class="ciy-tip" v-if="init.data.auditstatus == 20">您已提交申请等待审核...</view> <view class="ciy-tip" v-if="init.data.auditstatus == 20">您已提交申请等待审核...</view>
<view class="ciy-tip" v-if="init.data.auditstatus == 50">您的申请正在审核中...</view> <view class="ciy-tip" v-if="init.data.auditstatus == 50">您的申请正在审核中...</view>
<view class="ciy-tip" v-if="init.data.auditstatus == 100">您已申请通过</view> <view class="ciy-tip" v-if="init.data.auditstatus == 100">您已申请通过</view>
<view class="ciy-list"> <view class="ciy-list">
<view class="l1">{{init.data.name}}</view> <view class="l1">{{init.data.name}}</view>
<view class="l1">{{init.data.idid}}</view> <view class="l1">{{tomsk(init.data.idid, '**###***')}}</view>
<view class="rb">{{todatetime(init.data.addtimes)}} 申请</view> <view class="rb">{{todatetime(init.data.addtimes)}} 申请</view>
</view> </view>
</view> </view>
<view v-else> <view v-else>
<view class="ciy-tip" v-if="init.data && init.data.auditmsg"> <view class="ciy-tip" v-if="init.data?.auditmsg">
{{init.data.auditmsg}} {{init.data.auditmsg}}
</view> </view>
<!-- <view class="ciy-card"> <view class="ciy-card char4">
<view class="ciy-form" v-if="inputtype==2">
<label class="imp">人像面</label>
<view>
<ciy-upload left num="1" path="idid" v-model="editdata.idcard1" imgwidth="1600" sourcetype="camera,album,message"></ciy-upload>
</view>
</view>
<view class="ciy-form" v-if="inputtype==2">
<label class="imp">国徽面</label>
<view>
<ciy-upload left num="1" path="idid" v-model="editdata.idcard2" imgwidth="1600" sourcetype="camera,album,message"></ciy-upload>
</view>
</view>
<view class="ciy-form">
<label class="imp">实名姓名</label>
<view>
<ciy-input bb :disabled="inputtype!=2" v-model="editdata.name" ciystyle="width:6em;" type="text"></ciy-input>
</view>
</view>
<view class="ciy-form">
<label class="imp">身份证号</label>
<view>
<ciy-input bb :disabled="inputtype!=2" v-model="editdata.idid" type="idcard"></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="submit">申请实名认证</button>
</view>
<view class="content" v-if="inputtype==1">
<label>摄像头拍摄身份证正面(人像面)自动识别</label>
<view>
<ciy-aicameraocr ref="cameraocr" checkidcard="front" mode="idcard" @change="chgcameraocr"></ciy-aicameraocr>
</view>
</view>
</view>
<view v-if="inputtype==2" style="position: fixed;bottom: 3em;left: calc(50vw - 1.5em);">
<ciy-aivoice @change="chgvoice"></ciy-aivoice>
</view>
<view class="ciy-card" v-if="inputtype==3">
<view class="content"> <view class="content">
<view class="ciy-form-bottom"> <view class="ciy-form-bottom">
<button class="btn lg cc" @tap="readnfc">{{nfcwork==0?'手机贴近身份证识别':'停止NFC扫描'}}</button> <button class="btn lg cc" @tap="readnfc">{{nfcwork==0?'手机贴近身份证识别':'停止NFC扫描'}}</button>
</view> </view>
<view>
无需审核立即完成实名认证
</view>
<view v-if="nfcdata.name">
<view v-if="nfcdata.name">姓名 {{nfcdata.name}}</view>
<view v-if="nfcdata.idno">证号 {{nfcdata.idno}}</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="autoreal">立即实名完成</button>
</view>
</view>
</view> </view>
</view> --> </view>
<form @submit="submit" class="char4">
<view class="ciy-card">
<view class="content">
<label>摄像头拍摄身份证正面(人像面)自动识别</label>
<view>
<ciy-aicameraocr ref="cameraocr" checkidcard="front" mode="idcard" @change="chgidcard"></ciy-aicameraocr>
</view>
<view class="ciy-form">
<label>实名姓名</label>
<view>
<ciy-input name="name" disabled ciystyle="width:6em;" :value="name" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label>身份证号</label>
<view>
<ciy-input name="idno" disabled :value="idno" type="idcard" bb></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" form-type="submit">申请实名认证</button>
</view>
</view>
</view>
</form>
<!-- <ciy-aivoice @change="chgvoice"></ciy-aivoice> -->
</view> </view>
</template> </template>
@ -70,10 +76,9 @@
export default { export default {
data() { data() {
return { return {
name: '', inputtype: 0, //123nfc
idno: '',
nfcdata: {}, nfcdata: {},
nfcwork: 0 nfcwork: 0,
} }
}, },
onLoad() { onLoad() {
@ -81,58 +86,68 @@
}, },
methods: { methods: {
async getinit() { async getinit() {
var retjson = await this.callajax({ await this.getauth('info');
func: 'me.userreal_apply_get' if(this.me.truename)
return this.init.code = 1;
var app = getApp();
var retjson = await this.callfunc({
func: 'me.safe_real_init'
}); });
this.init = retjson; this.init = retjson;
if (retjson.code != 1) if (retjson.code != 1)
return; return this.alert(retjson.errmsg);
if (retjson.data && retjson.data.auditstatus == 100 && !this.me.truename) { if (retjson.data && retjson.data.auditstatus == 100 && !this.me.truename) {
this.me.truename = retjson.data.name; this.me.truename = retjson.data.name;
this.me.idid = retjson.data.idid; this.me.idid = retjson.data.idid;
this.setstorage('me', this.me); this.setstorage('me', this.me);
var app = getApp();
var page = app.getpage(1); var page = app.getpage(1);
page.me = this.me; page.me = this.me;
} }
setTimeout(() => { if(retjson.data && retjson.data.auditstatus != 90)
this.getrefsSync('cameraocr').Step(1); return;
}, 500); this.inputtype = retjson.inputtype;
this.editdata.name = this.me.truename;
this.editdata.idid = this.me.idid;
if (this.inputtype == 1) {
setTimeout(() => {
this.getrefsSync('cameraocr').Step(1);
}, 500);
}
}, },
async submit(e) { async submit(e) {
// e.detail.value.name = ''; // this.editdata.name = '';
// e.detail.value.idno = '152304200111157127'; // this.editdata.idid = '152304200111157127';
if (e.detail.value.name.length < 1) if (this.editdata.name.length < 1)
return this.toast('请输入姓名'); return this.toast('请输入姓名');
if (e.detail.value.idno.length < 10) if (this.editdata.idid.length < 10)
return this.toast('请输入身份证号'); return this.toast('请输入身份证号');
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
if (this.idimg) { if (this.inputtype == 1 && this.idimg) {
var opn = {}; var opn = {};
opn.basepath = 'idcard'; opn.basepath = 'idcard';
opn.stor = '/'; opn.stor = '/';
e.detail.value.idcard1 = await this.file_upload1(this.idimg, opn); this.editdata.idcard1 = await this.file_upload1(this.idimg, opn);
} }
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.userreal_apply_submit', func: 'me.safe_real_submit',
data: e.detail.value data: this.editdata
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)
return this.alert(retjson.errmsg); return this.alert(retjson.errmsg);
await this.toast('申请提交'); await this.toast('申请提交成功');
uni.navigateBack(); uni.navigateBack();
}, },
async chgidcard(e) { async chgcameraocr(e) {
console.log(e); console.log(e);
this.idimg = e.tempimg; this.idimg = e.tempimg;
if (this._loading) if (this._loading)
return this.toast('请稍后再试'); return this.toast('请稍后再试');
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'ai.aidecision', func: 'ciyai.aidecision',
data: { data: {
id: 3, id: 3,
idcardocr: e.txts.join('\n') idcardocr: e.txts.join('\n')
@ -141,8 +156,25 @@
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)
return this.alert(retjson.errmsg); return this.alert(retjson.errmsg);
this.name = retjson.ai.name; this.editdata.name = retjson.ai.name;
this.idno = retjson.ai.idno; this.editdata.idid = retjson.ai.idno;
},
async chgvoice(e) {
//@change
//
var retjson = await this.callfunc({
func: 'ciyai.aidecision',
data: {
id: 4,
voicetxt: e.txt
}
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
if (retjson.ai.name)
this.editdata.name = retjson.ai.name;
if (retjson.ai.idno)
this.editdata.idid = retjson.ai.idno;
}, },
async readnfc() { async readnfc() {
var ciynfc = res => { var ciynfc = res => {
@ -162,8 +194,10 @@
console.log('connect', res); console.log('connect', res);
nfc.transceive({ nfc.transceive({
data: buffer, data: buffer,
success(res) { success: (res) => {
console.log('transecive', res); console.log('transecive', res);
this.editdata.name = res.nfcdata.name;
this.editdata.idid = res.nfcdata.idno;
}, },
fail(res) { fail(res) {
console.log('transecive fail', res); console.log('transecive fail', res);
@ -202,23 +236,6 @@
//res.id = ArrayBuffer(8) {byteLength: 8, maxByteLength: 8, resizable: false, detached: false} //res.id = ArrayBuffer(8) {byteLength: 8, maxByteLength: 8, resizable: false, detached: false}
//res.techs = ['NFC-B'] //res.techs = ['NFC-B']
}, },
async chgvoice(e) {
//@change
//
var retjson = await this.callajax({
func: 'ai.aidecision',
data: {
id: 4,
voicetxt: e.txt
}
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
if (retjson.ai.name)
this.name = retjson.ai.name;
if (retjson.ai.idno)
this.idno = retjson.ai.idno;
}
} }
} }
</script> </script>

View File

@ -24,8 +24,8 @@
}, },
methods: { methods: {
async getinit() { async getinit() {
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.getqrcode', func: 'me.share_qrcode_get',
data: {} data: {}
}); });
if (retjson.code != 1) if (retjson.code != 1)

View File

@ -6,33 +6,31 @@
<view class="ciy-skeleton" style="height:6em;width:100%;"></view> <view class="ciy-skeleton" style="height:6em;width:100%;"></view>
</view> </view>
<view v-else> <view v-else>
<form @submit="submit"> <view class="ciy-card">
<view class="ciy-card"> <view class="content char4">
<view class="content char4"> <view class="ciy-form v">
<view class="ciy-form v"> <label class="imp">意见建议</label>
<label class="imp">意见建议</label> <view>
<view> <ciy-textarea v-model="editdata.content" type="text" bb ciystyle="min-height:5em"></ciy-textarea>
<ciy-textarea name="content" type="text" bb ciystyle="min-height:5em"></ciy-textarea>
</view>
</view>
<view class="ciy-form">
<label>图片截图</label>
<view>
<ciy-upload left num="8" path="suggest" name="imgs" imgwidth="1600" sourcetype="camera,album,message"></ciy-upload>
</view>
</view>
<view class="ciy-form">
<label>联系方式</label>
<view>
<ciy-input name="contract" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" form-type="submit">提交</button>
</view> </view>
</view> </view>
<view class="ciy-form">
<label>图片截图</label>
<view>
<ciy-upload left num="5" path="suggest" v-model="editdata.imgs" imgwidth="1600" sourcetype="camera,album,message"></ciy-upload>
</view>
</view>
<view class="ciy-form">
<label>联系方式</label>
<view>
<ciy-input v-model="editdata.contract" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="submit">提交</button>
</view>
</view> </view>
</form> </view>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id"> <view class="ciy-list" v-for="(item,index) in init.list" :key="item.id">
<view class="l2" v-html="tobr(item.content)"></view> <view class="l2" v-html="tobr(item.content)"></view>
<ciy-showimgs :src="item.imgs" label="图片截图"></ciy-showimgs> <ciy-showimgs :src="item.imgs" label="图片截图"></ciy-showimgs>
@ -40,7 +38,7 @@
<template v-if="item.replytimes > 0"> <template v-if="item.replytimes > 0">
<view class="ciy-hr my4"></view> <view class="ciy-hr my4"></view>
<view class="l2 ciy-tip" v-html="tobr(item.replymsg)"></view> <view class="l2 ciy-tip" v-html="tobr(item.replymsg)"></view>
<view class="rt" style="color:var(--succ5)">已答复</view> <view class="rt" style="color:var(--succ5)">已答复</view>
</template> </template>
<view class="rt" v-else>未答复</view> <view class="rt" v-else>未答复</view>
<view class="rb">{{todatetime(item.addtimes)}}</view> <view class="rb">{{todatetime(item.addtimes)}}</view>
@ -54,15 +52,15 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
}
}, },
onLoad() { onLoad() {
this.editdata.contract = this.me.mobile;
this.getinit(); this.getinit();
}, },
methods: { methods: {
async getinit() { async getinit() {
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.suggest_get', func: 'me.suggest_get',
data: {} data: {}
}); });
@ -71,19 +69,20 @@
this.init = retjson; this.init = retjson;
}, },
async submit(e) { async submit(e) {
if (e.detail.value.content.length < 5) if (this.editdata.content.length < 5)
return this.toast('内容至少输入5个字'); return this.toast('内容至少输入5个字');
if (this._loading)
return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.suggest_submit', func: 'me.suggest_submit',
data: e.detail.value data: this.editdata
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)
return this.alert(retjson.errmsg); return this.alert(retjson.errmsg);
await this.toast('已提交'); this.init.list.unshift(retjson.data);
uni.navigateBack(); await this.toast('提交成功');
} }
} }
} }

View File

@ -0,0 +1,90 @@
<template>
<ciy-header title="收款银行"></ciy-header>
<view class="ciy-card char3">
<view class="ciy-form">
<label class="imp">账户名称</label>
<view>
<ciy-input v-model="editdata.bankaccount" type="text" bb></ciy-input>
</view>
<view class="flexnone" style="padding-left:1em" @tap="editdata.bankaccount=me.truename">
{{me.truename}}
</view>
</view>
<view class="ciy-form">
<label class="imp">银行账号</label>
<view>
<ciy-input v-model="editdata.bankno" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label class="imp">开户银行</label>
<view>
<ciy-input v-model="editdata.bankname" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-form">
<label>联行号</label>
<view>
<ciy-input v-model="editdata.bankcode" type="text" bb></ciy-input>
</view>
</view>
<view class="ciy-tip">实名认证人{{me.truename}}
<br />账户名称与实名不一致需为对公账户
<br />对公账户收款(含提现)需开具发票
<br />个人银行账户收款平台代缴个税
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="submit">设置收款信息</button>
</view>
</view>
</template>
<style>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {
this.getauth('real');
this.editdata.bankaccount = this.me.bankaccount;
this.editdata.bankno = this.me.bankno;
this.editdata.bankname = this.me.bankname;
this.editdata.bankcode = this.me.bankcode;
},
methods: {
async submit(e) {
if (!this.editdata.bankaccount)
return this.toast('请输入账户名称');
if (!this.editdata.bankno)
return this.toast('请输入银行账号');
if (!this.editdata.bankname)
return this.toast('请输入开户银行');
//
if (this.me.truename != this.editdata.bankaccount) {
if (await this.askmsg(this.editdata.bankaccount + '\n请确认该账户为对公账户\n对公账户提现需开具发票', '是对公户') != 'ok')
return;
}
this._loading = true;
var retjson = await this.callfunc({
func: 'me.user_bank_change',
data: this.editdata
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.me.bankno = this.editdata.bankno;
this.me.bankname = this.editdata.bankname;
this.me.bankaccount = this.editdata.bankaccount;
this.me.bankcode = this.editdata.bankcode;
this.setstorage('me', this.me);
await this.toast('设置成功');
uni.navigateBack();
}
}
}
</script>

View File

@ -0,0 +1,102 @@
<template>
<ciy-header title="本人信息"></ciy-header>
<view class="ciy-card char3">
<view class="content char4">
<view class="ciy-form">
<label class="imp">姓名称呼</label>
<view>
<ciy-input bb v-model="editdata.name" type="nickname"></ciy-input>
</view>
</view>
<view class="ciy-form">
<label>头像</label>
<view>
<ciy-upload left v-model="editdata.icon" path="icon" imgwidth="400" imgheight="400" camheight="100" sourcetype="rehcam,album,message"></ciy-upload>
</view>
<!-- #ifdef MP-WEIXIN -->
<view>
<button class="btn sm" open-type="chooseAvatar" @chooseavatar="wxavar">从微信获取</button>
</view>
<!-- #endif -->
</view>
<view class="ciy-form">
<label class="imp">手机号</label>
<view>
<ciy-input bb v-model="editdata.mobile" type="text"></ciy-input>
</view>
</view>
<view class="ciy-form">
<label>微信</label>
<view>
<ciy-input bb v-model="editdata.wxno" type="text"></ciy-input>
</view>
</view>
<view class="ciy-form">
<label>电子信箱</label>
<view>
<ciy-input bb v-model="editdata.email" type="text"></ciy-input>
</view>
</view>
<view class="ciy-form-bottom">
<button class="btn lg cc" @tap="submit">更新个人信息</button>
</view>
</view>
</view>
</template>
<style>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {
this.editdata = {
...this.me
};
},
methods: {
async wxavar(e) {
var app = getApp();
var opn = {};
opn.post = {
from: 'avar'
};
opn.path = 'icon';
opn.stor = app.globalData.stordefault;
opn.maxkb = 0;
opn.imgwidth = 400;
opn.imgheight = 400;
opn.zipjpg = 70;
this.editdata.icon = await this.file_upload1(e.detail.avatarUrl, opn);
},
async submit() {
if (!this.editdata.name)
return this.toast('请输入姓名称呼');
if (!this.editdata.mobile)
return this.toast('请输入手机号');
if (this.editdata.name[0] == ':')
return this.toast('姓名称呼不能以:开头');
this._loading = true;
var retjson = await this.callfunc({
func: 'me.user_info_change',
data: this.editdata
});
this._loading = false;
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.me.name = this.editdata.name;
this.me.icon = this.editdata.icon;
this.me.mobile = this.editdata.mobile;
this.me.wxno = this.editdata.wxno;
this.me.email = this.editdata.email;
this.setstorage('me', this.me);
await this.toast('修改成功');
uni.navigateBack();
}
}
}
</script>

View File

@ -7,18 +7,18 @@
<view class="ciy-skeleton" style="height:6em;width:100%;"></view> <view class="ciy-skeleton" style="height:6em;width:100%;"></view>
</view> </view>
<view v-else> <view v-else>
<view class="ciy-list" :class="{selected:opn.sel&&item.id==opn.id,del:item._clas=='del'}" v-for="(item,index) in init.list" :key="item.id" @click="select(item.id)"> <view class="ciy-list" :class="{selected:opn.sel&&item.id==opn.id,del:item._del}" v-for="(item,index) in init.list" :key="item.id" @tap="select(item.id)">
<view class="l2">收件人 {{item.name}}</view> <view class="l2">收件人 {{item.name}}</view>
<view class="l2">联系电话 {{item.phone}}</view> <view class="l2">联系电话 {{item.phone}}</view>
<view class="l2">{{mcode(g.ciy_arearpc,item.areacode,'name').join(' . ')}}</view> <view class="l2">{{mcode(g.ciy_arearpc,item.areacode,'name').join(' . ')}}</view>
<view class="l2">{{item.addr}}</view> <view class="l2">{{item.addr}}</view>
<view class="dot" @click="showmenu(index)"></view> <view class="dot" @tap.stop="showmenu(index)"></view>
</view> </view>
<view style="height:5em;"></view> <view style="height:5em;"></view>
<view class="ciy-add" style="z-index:41;" @tap="editshow()"></view> <view class="ciy-add" style="z-index:41;" @tap="editshow()"></view>
<view v-if="opn.sel"> <view v-if="opn.sel">
<view class="bg1 txt-center py4 ciy-bottom"> <view class="bg1 txt-center py4 ciy-bottom">
<button class="btn lg" @click="selectok">选定</button> <button class="btn lg" @tap="selectok">选定</button>
</view> </view>
</view> </view>
<ciy-anipop v-model="popedit" :zindex="998" maskbg="#00000077" :title="edit.id>0?'更新地址':'新建地址'"> <ciy-anipop v-model="popedit" :zindex="998" maskbg="#00000077" :title="edit.id>0?'更新地址':'新建地址'">
@ -52,7 +52,7 @@
<view> <view>
<ciy-input name="addr" v-model="edit.addr" bb ciystyle="margin-right:0.5em;"></ciy-input> <ciy-input name="addr" v-model="edit.addr" bb ciystyle="margin-right:0.5em;"></ciy-input>
</view> </view>
<view style="flex:none;display: block;line-height: 1em;font-size: 0.7em;text-align: center;margin-right: 1em;" @click="getloc"> <view style="flex:none;display: block;line-height: 1em;font-size: 0.7em;text-align: center;margin-right: 1em;" @tap="getloc">
<i class="iconloc"></i><br /> <i class="iconloc"></i><br />
定位 定位
</view> </view>
@ -113,8 +113,8 @@
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.shipaddr_get' func: 'me.user_shipaddr_list'
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)
@ -171,8 +171,8 @@
if (this._loading) if (this._loading)
return; return;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.shipaddr_edit', func: 'me.user_shipaddr_edit',
data: e.detail.value data: e.detail.value
}); });
this._loading = false; this._loading = false;
@ -188,15 +188,15 @@
async del(item) { async del(item) {
if (await this.askmsg('是否删除?') != 'ok') if (await this.askmsg('是否删除?') != 'ok')
return; return;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'me.shipaddr_del', func: 'me.user_shipaddr_del',
data: { data: {
id: item.data.id id: item.data.id
} }
}); });
if (retjson.code != 1) if (retjson.code != 1)
return this.alert(retjson.errmsg); return this.alert(retjson.errmsg);
this.init.list[item.data._idx]._clas = 'del'; this.init.list[item.data._idx]._del = true;
setTimeout(() => { setTimeout(() => {
this.init.list.splice(item.data._idx, 1); this.init.list.splice(item.data._idx, 1);
}, 500); }, 500);

View File

@ -0,0 +1,57 @@
<template>
<ciy-header title="用户详情"></ciy-header>
<view class="ciy-list">
<view style="width:10em;margin: auto;">
<ciy-svgimg :src="pagedata.userinfo.icon"></ciy-svgimg>
</view>
<view class="l1">{{pagedata.userinfo.name}}</view>
<view class="ciy-hr my4"></view>
<view class="flex">
<view class="flex1">
<view class="l2">活跃 {{pagedata.userinfo.mypnt}}</view>
<view class="l2">{{totimespan(pagedata.userinfo.addtimes)}}前加入</view>
</view>
</view>
</view>
<view class="ciy-title mk">技能等级情况</view>
<view class="ciy-title mk">技能贡献情况</view>
<view class="ciy-title mk">商单协理统计</view>
<view class="ciy-title mk">项目参与情况</view>
<view class="txt-center">
<!-- <button class="btn" @tap="getmore">更多</button> -->
</view>
<view style="height:1em;"></view>
<view :style="{height:header_statusbar_height+'px'}"></view>
</template>
<style scoped>
</style>
<script>
export default {
data() {
return {}
},
onLoad() {},
methods: {
async getmore() {
return;
//<view class="flex1">{{ccode(init.depts, pagedata.member.deptid, 'name', '[]')}}</view>
var retjson = await this.callfunc({
func: 'me.user_show_more',
data: {
id: this.init.list[idx].id
}
});
if (retjson.code != 1)
return this.alert(retjson.errmsg);
this.objtolist(this.init.list, retjson.data);
this.init.list[idx]._stated = true;
this.toast('已统计');
},
}
}
</script>

View File

@ -30,7 +30,7 @@
onUnload() { onUnload() {
var postparam = {}; var postparam = {};
postparam.id = this.opn.id; postparam.id = this.opn.id;
var retjson = this.callajax({ var retjson = this.callfunc({
func: 'pub.imgend', func: 'pub.imgend',
data: postparam data: postparam
}); });
@ -47,7 +47,7 @@
postparam.id = this.opn.id; postparam.id = this.opn.id;
postparam.txts = e.txts.join('\n'); postparam.txts = e.txts.join('\n');
postparam.img = await this.file_upload1(e.tempimg, opn); postparam.img = await this.file_upload1(e.tempimg, opn);
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'pub.imgadd', func: 'pub.imgadd',
data: postparam data: postparam
}); });

View File

@ -9,7 +9,7 @@
<ciy-header ref="header" v-if="init.data.title" :title="init.data.title"></ciy-header> <ciy-header ref="header" v-if="init.data.title" :title="init.data.title"></ciy-header>
<ciy-header ref="header" mode="tran" v-else></ciy-header> <ciy-header ref="header" mode="tran" v-else></ciy-header>
<view class="bg1" style="min-height:100vh;"> <view class="bg1" style="min-height:100vh;">
<ciy-markdown :md="init.data.content"></ciy-markdown> <ciy-markdown padding="1.5em" :md="init.data.content"></ciy-markdown>
</view> </view>
</view> </view>
</template> </template>
@ -28,8 +28,8 @@
computed: {}, computed: {},
methods: { methods: {
async getinit() { async getinit() {
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'index.paper', func: 'main.paper_get',
data: this.opn data: this.opn
}); });
if (retjson.code != 1) if (retjson.code != 1)

View File

@ -17,13 +17,11 @@
<ciy-markdown :md="init.data.content"></ciy-markdown> <ciy-markdown :md="init.data.content"></ciy-markdown>
</scroll-view> </scroll-view>
<view class="bg2" style="border-top:1px solid var(--bg5)"> <view class="bg2" style="border-top:1px solid var(--bg5)">
<form @submit="submitsend"> <view class="flex flex-center">
<view class="flex flex-center"> <!-- <view><button class="btn def" @tap="sendimg">图片</button></view> -->
<!-- <view><button class="btn def" @tap="sendimg">图片</button></view> --> <view class="flex1"><ciy-textarea v-model="editdata.content" ciystyle="min-height:1em;padding:0.5em"></ciy-textarea></view>
<view class="flex1"><ciy-textarea name="content" v-model="content" ciystyle="min-height:1em;padding:0.5em"></ciy-textarea></view> <view><button @tap="submitsend" :disabled="init.vent" class="btn">吐槽</button></view>
<view><button form-type="submit" :disabled="init.vent" class="btn">吐槽</button></view> </view>
</view>
</form>
</view> </view>
<view class="bg2" :style="{height:footer_safe_height+'px'}"></view> <view class="bg2" :style="{height:footer_safe_height+'px'}"></view>
</view> </view>
@ -35,8 +33,7 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
}
}, },
onLoad() { onLoad() {
this.getinit(); this.getinit();
@ -53,8 +50,8 @@
computed: {}, computed: {},
methods: { methods: {
async getinit() { async getinit() {
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'index.art_read', func: 'main.part_init',
data: this.pagepost data: this.pagepost
}); });
if (retjson.code != 1) if (retjson.code != 1)
@ -66,22 +63,21 @@
return; return;
this._hot = true; this._hot = true;
this.pagepost.sec = this.tostamp() - this.readtimes; this.pagepost.sec = this.tostamp() - this.readtimes;
this.callajax({ this.callfunc({
func: 'index.art_hot', func: 'main.part_hot',
data: this.pagepost data: this.pagepost
}); });
}, },
async submitsend(e) { async submitsend() {
if (!e.detail.value.content) if (!this.editdata.content)
return this.toast('请输入内容'); return this.toast('请输入内容');
e.detail.value.sectionid = this.init.section.id;
e.detail.value.id = this.opn.id;
if (this._loading) if (this._loading)
return; return;
this.editdata.sectionid = this.init.section.id;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'index.art_vent', func: 'main.part_vent',
data: e.detail.value data: this.editdata
}); });
this._loading = false; this._loading = false;
if (retjson.code != 1) if (retjson.code != 1)

View File

@ -1,5 +1,5 @@
<template> <template>
<ciy-header :title="init.code==1?init.once.section.name:'加载中'" ref="header"></ciy-header> <ciy-header :title="init.code==1?init.section.name:'加载中'" ref="header"></ciy-header>
<view v-if="init.code != 1" class="px4 py4"> <view v-if="init.code != 1" class="px4 py4">
<view class="ciy-skeleton" style="height:2em;width:100%;"></view> <view class="ciy-skeleton" style="height:2em;width:100%;"></view>
<view class="ciy-skeleton" style="height:8em;width:100%;"></view> <view class="ciy-skeleton" style="height:8em;width:100%;"></view>
@ -10,7 +10,7 @@
<ciy-searchbar placeholder="请输入关键字" @confirm="search_change"></ciy-searchbar> <ciy-searchbar placeholder="请输入关键字" @confirm="search_change"></ciy-searchbar>
</view> </view>
<view class="ciy-list" v-for="(item,index) in init.list" :key="item.id"> <view class="ciy-list" v-for="(item,index) in init.list" :key="item.id">
<ciy-svgimg :src="item.img"></ciy-svgimg> <ciy-svgimg v-if="item.img" :src="item.img"></ciy-svgimg>
<view class="l1 txt-wb" @tap="gourl" :data-url="'part?id=' + item.id">{{item.name}}</view> <view class="l1 txt-wb" @tap="gourl" :data-url="'part?id=' + item.id">{{item.name}}</view>
<view class="l3" v-html="tobr(item.descs)"></view> <view class="l3" v-html="tobr(item.descs)"></view>
</view> </view>
@ -24,9 +24,7 @@
<script> <script>
export default { export default {
data() { data() {
return { return {}
pageno: 0,
}
}, },
onLoad() { onLoad() {
this.getlist(); this.getlist();
@ -47,13 +45,13 @@
async getlist() { async getlist() {
if (this.pageno < 0) if (this.pageno < 0)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.once = !this.init.once;
if (this._loading) if (this._loading)
return; return;
this.pagepost.pageno = this.pageno + 1;
this.pagepost.once = !this.init.once;
this._loading = true; this._loading = true;
var retjson = await this.callajax({ var retjson = await this.callfunc({
func: 'index.section_get', func: 'main.psection_list',
data: this.pagepost data: this.pagepost
}); });
this._loading = false; this._loading = false;
@ -67,7 +65,7 @@
this.pageno = -1; this.pageno = -1;
}, },
search_change(e) { search_change(e) {
this.pagepost.query.key = e.value; this.pagepost.key = e.value;
this.pageno = 0; this.pageno = 0;
this.getlist(); this.getlist();
}, },

View File

@ -14,6 +14,7 @@
}, },
onLoad() { onLoad() {
this.web = decodeURIComponent(this.opn.web); this.web = decodeURIComponent(this.opn.web);
var app = getApp();
// #ifdef APP-PLUS // #ifdef APP-PLUS
setTimeout(() => { setTimeout(() => {
var currentWebview = this.$scope.$getAppWebview(); var currentWebview = this.$scope.$getAppWebview();
@ -21,7 +22,7 @@
var top = this.header_statusbar_height + this.header_title_height; var top = this.header_statusbar_height + this.header_title_height;
wv.setStyle({ wv.setStyle({
top: top, top: top,
height: this.sysinfo.screenHeight - top height: app.globalData._sysinfo.screenHeight - top
}); });
this.name = wv.getTitle(); this.name = wv.getTitle();
}, 500); }, 500);

File diff suppressed because it is too large Load Diff

View File

@ -65,6 +65,7 @@ card bg3
/* 主色 */ /* 主色 */
--man2: #e1f6ff;
--man3: #a6d2fa; --man3: #a6d2fa;
--man4: #80c1f3; --man4: #80c1f3;
--man5: #1E9FFF; --man5: #1E9FFF;
@ -161,7 +162,10 @@ body,
view, view,
text { text {
box-sizing: border-box; box-sizing: border-box;
/* font-size: clamp(14px, 4vw, 40px); */
font-size-adjust: ex-height 0.53; font-size-adjust: ex-height 0.53;
user-select: text;
-webkit-user-select: text;
} }
::-webkit-scrollbar { ::-webkit-scrollbar {
@ -240,10 +244,10 @@ text {
/*列表页*/ /*列表页*/
.ciy-list { .ciy-list {
position: relative; position: relative;
margin: 1em; margin: 1rem;
padding: 0.8em; padding: 0.8rem;
background: var(--bg1); background: var(--bg1);
border-radius: 0.5em; border-radius: 0.5rem;
overflow: hidden; overflow: hidden;
transition: transform ease-in 0.5s; transition: transform ease-in 0.5s;
} }
@ -254,14 +258,14 @@ text {
} }
.ciy-list .l0 { .ciy-list .l0 {
font-size: 0.8em; font-size: 0.8rem;
padding-right: 6em; padding-right: 6rem;
color: var(--txt1); color: var(--txt1);
} }
.ciy-list .l1 { .ciy-list .l1 {
font-size: 1.2em; font-size: 1.2rem;
padding: 0.3em 1.5em 0.3em 0.5em; padding: 0.3em 1.5em 0.3em 0.5rem;
} }
.ciy-list .l2 { .ciy-list .l2 {
@ -272,10 +276,10 @@ text {
.ciy-list .l2>label { .ciy-list .l2>label {
color: var(--txt9); color: var(--txt9);
min-width: 5em; min-width: 5rem;
flex-shrink: 0; flex-shrink: 0;
white-space: nowrap; white-space: nowrap;
padding-right: 1em; padding-right: 1rem;
} }
.ciy-list .l2>view { .ciy-list .l2>view {
@ -285,82 +289,82 @@ text {
} }
.ciy-list .l3 { .ciy-list .l3 {
font-size: 0.9em; font-size: 0.9rem;
padding: 0.3em 1.3em; padding: 0.3em 1.3rem;
color: var(--txt3); color: var(--txt3);
} }
.ciy-list .rtz { .ciy-list .rtz {
position: absolute; position: absolute;
top: 1em; top: 1rem;
right: -2.5em; right: -2.5rem;
height: 2em; height: 2rem;
line-height: 2em; line-height: 2rem;
width: 9em; width: 9rem;
text-align: center; text-align: center;
transform: rotate(45deg); transform: rotate(45deg);
} }
.ciy-list .rt { .ciy-list .rt {
position: absolute; position: absolute;
top: 0.8em; top: 0.8rem;
right: 0.8em; right: 0.8rem;
text-align: right; text-align: right;
font-size: 0.9em; font-size: 0.9rem;
} }
.ciy-list .rb { .ciy-list .rb {
text-align: right; text-align: right;
font-size: 0.9em; font-size: 0.9rem;
} }
.ciy-list .lb { .ciy-list .lb {
position: absolute; position: absolute;
bottom: 0.9em; bottom: 0.9rem;
left: 1.2em; left: 1.2rem;
font-size: 0.9em; font-size: 0.9rem;
} }
.ciy-list .dot { .ciy-list .dot {
position: absolute; position: absolute;
bottom: 0.5em; bottom: 0.5rem;
right: 1em; right: 1rem;
padding: 1em; padding: 1rem;
width: 1.3em; width: 1.3rem;
height: 1.3em; height: 1.3rem;
background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUwOS4xMDAyMzQyNiA1MTJtLTE1My4yNzMzMzEzNCAwYTE1My4yNzMzMzEzNiAxNTMuMjczMzMxMzYgMCAxIDAgMzA2LjU0NjY2MjcgMCAxNTMuMjczMzMxMzYgMTUzLjI3MzMzMTM2IDAgMSAwLTMwNi41NDY2NjI3IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PHBhdGggZD0iTTc4OS43NjE4NDA4MiA1MTJtLTkxLjQ2MTE4MTY0IDBhOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAgMTgyLjkyMjM2MzI5IDAgOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAtMTgyLjkyMjM2MzI5IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PHBhdGggZD0iTTIzNC4yMzgxNTkxOCA1MTJtLTkxLjQ2MTE4MTY0IDBhOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAgMTgyLjkyMjM2MzI4IDAgOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAtMTgyLjkyMjM2MzI4IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PC9zdmc+"); background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTUwOS4xMDAyMzQyNiA1MTJtLTE1My4yNzMzMzEzNCAwYTE1My4yNzMzMzEzNiAxNTMuMjczMzMxMzYgMCAxIDAgMzA2LjU0NjY2MjcgMCAxNTMuMjczMzMxMzYgMTUzLjI3MzMzMTM2IDAgMSAwLTMwNi41NDY2NjI3IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PHBhdGggZD0iTTc4OS43NjE4NDA4MiA1MTJtLTkxLjQ2MTE4MTY0IDBhOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAgMTgyLjkyMjM2MzI5IDAgOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAtMTgyLjkyMjM2MzI5IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PHBhdGggZD0iTTIzNC4yMzgxNTkxOCA1MTJtLTkxLjQ2MTE4MTY0IDBhOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAgMTgyLjkyMjM2MzI4IDAgOTEuNDYxMTgxNjQgOTEuNDYxMTgxNjQgMCAxIDAtMTgyLjkyMjM2MzI4IDBaIiBmaWxsPSIjNzA3MDcwIj48L3BhdGg+PC9zdmc+");
} }
.ciy-add { .ciy-add {
position: fixed; position: fixed;
bottom: 1em; bottom: 1rem;
right: 1em; right: 1rem;
width: 4em; width: 4rem;
height: 4em; height: 4rem;
opacity: 0.95; opacity: 0.95;
z-index: 10; z-index: 10;
border-radius: 2em; border-radius: 2rem;
background: linear-gradient(90deg, #8568f7, #4981ff); background: linear-gradient(90deg, #8568f7, #4981ff);
} }
.ciy-add::after { .ciy-add::after {
content: ' '; content: ' ';
position: absolute; position: absolute;
margin: 1em; margin: 1rem;
width: 2em; width: 2rem;
height: 2em; height: 2rem;
background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkyNS42OTYgMzg0cTE5LjQ1NiAwIDM3LjM3NiA3LjY4dDMwLjcyIDIwLjQ4IDIwLjQ4IDMwLjcyIDcuNjggMzcuMzc2cTAgMjAuNDgtNy42OCAzNy44ODh0LTIwLjQ4IDMwLjIwOC0zMC43MiAyMC40OC0zNy4zNzYgNy42OGwtMjg3Ljc0NCAwIDAgMjg3Ljc0NHEwIDIwLjQ4LTcuNjggMzcuODg4dC0yMC40OCAzMC4yMDgtMzAuNzIgMjAuNDgtMzcuMzc2IDcuNjhxLTIwLjQ4IDAtMzcuODg4LTcuNjh0LTMwLjIwOC0yMC40OC0yMC40OC0zMC4yMDgtNy42OC0zNy44ODhsMC0yODcuNzQ0LTI4Ny43NDQgMHEtMjAuNDggMC0zNy44ODgtNy42OHQtMzAuMjA4LTIwLjQ4LTIwLjQ4LTMwLjIwOC03LjY4LTM3Ljg4OHEwLTE5LjQ1NiA3LjY4LTM3LjM3NnQyMC40OC0zMC43MiAzMC4yMDgtMjAuNDggMzcuODg4LTcuNjhsMjg3Ljc0NCAwIDAtMjg3Ljc0NHEwLTE5LjQ1NiA3LjY4LTM3LjM3NnQyMC40OC0zMC43MiAzMC4yMDgtMjAuNDggMzcuODg4LTcuNjhxMzkuOTM2IDAgNjguMDk2IDI4LjE2dDI4LjE2IDY4LjA5NmwwIDI4Ny43NDQgMjg3Ljc0NCAweiIgZGF0YS1zcG0tYW5jaG9yLWlkPSJhMzEzeC5zZWFyY2hfaW5kZXguMC5pNi41NTEwM2E4MW5Iald1ViIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjwvc3ZnPg=="); background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTkyNS42OTYgMzg0cTE5LjQ1NiAwIDM3LjM3NiA3LjY4dDMwLjcyIDIwLjQ4IDIwLjQ4IDMwLjcyIDcuNjggMzcuMzc2cTAgMjAuNDgtNy42OCAzNy44ODh0LTIwLjQ4IDMwLjIwOC0zMC43MiAyMC40OC0zNy4zNzYgNy42OGwtMjg3Ljc0NCAwIDAgMjg3Ljc0NHEwIDIwLjQ4LTcuNjggMzcuODg4dC0yMC40OCAzMC4yMDgtMzAuNzIgMjAuNDgtMzcuMzc2IDcuNjhxLTIwLjQ4IDAtMzcuODg4LTcuNjh0LTMwLjIwOC0yMC40OC0yMC40OC0zMC4yMDgtNy42OC0zNy44ODhsMC0yODcuNzQ0LTI4Ny43NDQgMHEtMjAuNDggMC0zNy44ODgtNy42OHQtMzAuMjA4LTIwLjQ4LTIwLjQ4LTMwLjIwOC03LjY4LTM3Ljg4OHEwLTE5LjQ1NiA3LjY4LTM3LjM3NnQyMC40OC0zMC43MiAzMC4yMDgtMjAuNDggMzcuODg4LTcuNjhsMjg3Ljc0NCAwIDAtMjg3Ljc0NHEwLTE5LjQ1NiA3LjY4LTM3LjM3NnQyMC40OC0zMC43MiAzMC4yMDgtMjAuNDggMzcuODg4LTcuNjhxMzkuOTM2IDAgNjguMDk2IDI4LjE2dDI4LjE2IDY4LjA5NmwwIDI4Ny43NDQgMjg3Ljc0NCAweiIgZGF0YS1zcG0tYW5jaG9yLWlkPSJhMzEzeC5zZWFyY2hfaW5kZXguMC5pNi41NTEwM2E4MW5Iald1ViIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjwvc3ZnPg==");
} }
.ciy-close { .ciy-close {
position: absolute; position: absolute;
font-size: 2em; font-size: 2rem;
color: var(--dagt); color: var(--dagt);
line-height: 0.9em; line-height: 0.9rem;
background: var(--dag5); background: var(--dag5);
width: 1em; width: 1rem;
height: 1em; height: 1rem;
text-align: center; text-align: center;
border-radius: 50%; border-radius: 50%;
} }
@ -371,9 +375,9 @@ text {
border: 1px solid var(--man6); border: 1px solid var(--man6);
position: relative; position: relative;
display: inline-block; display: inline-block;
padding: 0.5em 0.8em; padding: 0.5em 0.8rem;
font-size: 1em; font-size: 1rem;
line-height: 1em; line-height: 1rem;
margin: 2px; margin: 2px;
text-align: center; text-align: center;
white-space: nowrap; white-space: nowrap;
@ -381,19 +385,19 @@ text {
-ms-touch-action: manipulation; -ms-touch-action: manipulation;
touch-action: manipulation; touch-action: manipulation;
cursor: pointer; cursor: pointer;
border-radius: 0.7em; border-radius: 0.7rem;
} }
.btn::after { .btn::after {
content: "Loading..."; content: "Loading...";
position: absolute; position: absolute;
bottom: 0; bottom: 0;
right: 0.3em; right: 0.3rem;
width: auto; width: auto;
height: auto; height: auto;
top: auto; top: auto;
left: auto; left: auto;
font-size: 1em; font-size: 1rem;
transform-origin: right bottom; transform-origin: right bottom;
opacity: 0; opacity: 0;
transform: scale(0.8); transform: scale(0.8);
@ -413,35 +417,35 @@ text {
} }
.btn.lg { .btn.lg {
font-size: 1.3em; font-size: 1.3rem;
padding-left: 1.5em; padding-left: 1.5rem;
padding-right: 1.5em; padding-right: 1.5rem;
} }
.btn.lgg { .btn.lgg {
font-size: 1.5em; font-size: 1.5rem;
padding: 0.7em 1.5em; padding: 0.7em 1.5rem;
} }
.btn.sm { .btn.sm {
font-size: 0.8em; font-size: 0.8rem;
} }
.btn.smm { .btn.smm {
font-size: 0.7em; font-size: 0.7rem;
} }
.btn.xs { .btn.xs {
font-size: 0.7em; font-size: 0.7rem;
padding: 0.2em 0.8em; padding: 0.2em 0.8rem;
} }
.btn.sq { .btn.sq {
border-radius: 0.3em; border-radius: 0.3rem;
} }
.btn.cc { .btn.cc {
border-radius: 1.5em; border-radius: 1.5rem;
} }
.btn.long { .btn.long {
@ -483,16 +487,16 @@ text {
/*说明块*/ /*说明块*/
.ciy-tip { .ciy-tip {
background: var(--warn4); background: var(--warn4);
margin: 0.5em; margin: 0.5rem;
padding: 0.5em; padding: 0.5rem;
border: 1px solid var(--warn5); border: 1px solid var(--warn5);
border-radius: 0.3em; border-radius: 0.3rem;
color: var(--txt8); color: var(--txt8);
} }
/*断行*/ /*断行*/
.ciy-height { .ciy-height {
height: 0.3em; height: 0.3rem;
} }
@ -515,8 +519,8 @@ text {
.ciy-grid .grid { .ciy-grid .grid {
width: 25%; width: 25%;
text-align: center; text-align: center;
padding-top: 0.8em; padding-top: 0.8rem;
padding-bottom: 0.2em; padding-bottom: 0.2rem;
} }
.ciy-grid.grid3 .grid { .ciy-grid.grid3 .grid {
@ -530,12 +534,14 @@ text {
.ciy-grid .name { .ciy-grid .name {
padding: 0.5em 0; padding: 0.5em 0;
color: var(--txt7); color: var(--txt7);
font-size: 0.9em; font-size: 0.9rem;
user-select: none;
-webkit-user-select: none;
} }
.ciy-grid .icon { .ciy-grid .icon {
width: 2em; width: 2rem;
height: 2em; height: 2rem;
display: block; display: block;
position: relative; position: relative;
margin: 0 auto; margin: 0 auto;
@ -549,7 +555,7 @@ text {
.ciy-grid .title { .ciy-grid .title {
width: 100%; width: 100%;
margin: 1em 0 0 0.5em; margin: 1em 0 0 0.5rem;
font-weight: bolder; font-weight: bolder;
text-shadow: 0 0 2px var(--bg2); text-shadow: 0 0 2px var(--bg2);
letter-spacing: 2px; letter-spacing: 2px;
@ -560,8 +566,8 @@ text {
.ciy-title { .ciy-title {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0.8em 1em; padding: 0.8em 1rem;
font-size: 1.1em; font-size: 1.1rem;
position: relative; position: relative;
font-weight: bolder; font-weight: bolder;
color: var(--txt9); color: var(--txt9);
@ -569,10 +575,10 @@ text {
.ciy-title.mk::before { .ciy-title.mk::before {
content: ""; content: "";
width: 0.4em; width: 0.4rem;
height: 1.5em; height: 1.5rem;
margin-right: 0.3em; margin-right: 0.3rem;
border-radius: 0.3em; border-radius: 0.3rem;
vertical-align: middle; vertical-align: middle;
background: linear-gradient(-60deg, var(--man4), var(--man7)); background: linear-gradient(-60deg, var(--man4), var(--man7));
} }
@ -584,7 +590,7 @@ text {
} }
.ciy-title .right { .ciy-title .right {
font-size: 0.9em; font-size: 0.9rem;
font-weight: normal; font-weight: normal;
color: var(--txt5); color: var(--txt5);
} }
@ -592,8 +598,8 @@ text {
.ciy-caption { .ciy-caption {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 0.8em 1em; padding: 0.8em 1rem;
font-size: 1.1em; font-size: 1.1rem;
position: relative; position: relative;
font-weight: bolder; font-weight: bolder;
background: var(--bg2); background: var(--bg2);
@ -604,10 +610,10 @@ text {
.ciy-caption.mk::before { .ciy-caption.mk::before {
content: ""; content: "";
width: 0.3em; width: 0.3rem;
height: 1.5em; height: 1.5rem;
margin-right: 0.3em; margin-right: 0.3rem;
border-radius: 0.3em; border-radius: 0.3rem;
vertical-align: middle; vertical-align: middle;
background: var(--man5); background: var(--man5);
} }
@ -618,7 +624,7 @@ text {
} }
.ciy-caption .right { .ciy-caption .right {
font-size: 0.9em; font-size: 0.9rem;
font-weight: normal; font-weight: normal;
color: var(--txt5); color: var(--txt5);
} }
@ -626,17 +632,17 @@ text {
.ciy-caption .sub { .ciy-caption .sub {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 3em; left: 3rem;
font-size: 0.7em; font-size: 0.7rem;
font-weight: normal; font-weight: normal;
color: var(--txt1); color: var(--txt1);
} }
/*卡片块*/ /*卡片块*/
.ciy-card { .ciy-card {
margin: 0.5em; margin: 0.5rem;
border: 1px solid var(--bg6); border: 1px solid var(--bg6);
border-radius: 0.3em; border-radius: 0.3rem;
box-shadow: 0 0 6px var(--bg6); box-shadow: 0 0 6px var(--bg6);
background: var(--bg2); background: var(--bg2);
position: relative; position: relative;
@ -644,46 +650,46 @@ text {
.ciy-card>.title { .ciy-card>.title {
border-radius: 0.3em 0.3em 0 0; border-radius: 0.3em 0.3em 0 0;
padding-left: 1em; padding-left: 1rem;
height: 2.5em; height: 2.5rem;
line-height: 2.5em; line-height: 2.5rem;
background: var(--bg4); background: var(--bg4);
font-weight: bold; font-weight: bold;
} }
.ciy-card>.title.mk::before { .ciy-card>.title.mk::before {
content: ""; content: "";
width: 0.2em; width: 0.2rem;
display: inline-block; display: inline-block;
border-radius: 0.2em; border-radius: 0.2rem;
margin-right: 0.4em; margin-right: 0.4rem;
vertical-align: middle; vertical-align: middle;
height: 1.5em; height: 1.5rem;
background: var(--man5); background: var(--man5);
} }
.ciy-card .right { .ciy-card .right {
position: absolute; position: absolute;
height: 2.5em; height: 2.5rem;
line-height: 2.5em; line-height: 2.5rem;
padding-right: 1em; padding-right: 1rem;
color: var(--txt5); color: var(--txt5);
top: 0; top: 0;
right: 0; right: 0;
} }
.ciy-card>.content { .ciy-card>.content {
padding: 1em; padding: 1rem;
} }
.ciy-card>.content>view { .ciy-card>.content>view {
line-height: 1.5em; line-height: 1.5rem;
margin-bottom: 0.5em; margin-bottom: 0.5rem;
} }
.ciy-load { .ciy-load {
padding: 3em 0 8em 3em; padding: 3em 0 8em 3rem;
line-height: 2em; line-height: 2rem;
background: linear-gradient(180deg, var(--bg5), transparent); background: linear-gradient(180deg, var(--bg5), transparent);
} }
@ -692,8 +698,8 @@ text {
background: linear-gradient(45deg, var(--bg4) 25%, var(--bg1) 50%, var(--bg4) 75%); background: linear-gradient(45deg, var(--bg4) 25%, var(--bg1) 50%, var(--bg4) 75%);
background-size: 200% 100%; background-size: 200% 100%;
animation: skeleton 3s linear infinite; animation: skeleton 3s linear infinite;
border-radius: 0.3em; border-radius: 0.3rem;
margin-bottom: 1em; margin-bottom: 1rem;
} }
@keyframes skeleton { @keyframes skeleton {
@ -709,11 +715,11 @@ text {
.code, .code,
.kbd { .kbd {
font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
padding: 0.1em 0.4em 0 0.4em; padding: 0.1em 0.4em 0 0.4rem;
margin: 0 0.2em; margin: 0 0.2rem;
font-size: 0.9em; font-size: 0.9rem;
line-height: 1.3em; line-height: 1.3rem;
border-radius: 0.2em; border-radius: 0.2rem;
display: inline-block; display: inline-block;
vertical-align: baseline; vertical-align: baseline;
} }
@ -735,9 +741,9 @@ text {
.ciy-form-group { .ciy-form-group {
background: var(--bg2); background: var(--bg2);
margin: 1em; margin: 1rem;
overflow: hidden; overflow: hidden;
border-radius: 0.5em; border-radius: 0.5rem;
position: relative; position: relative;
border: 1px solid var(--bg4); border: 1px solid var(--bg4);
border-bottom: 2px solid var(--bg6); border-bottom: 2px solid var(--bg6);
@ -749,7 +755,7 @@ text {
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
padding: 1em; padding: 1rem;
z-index: 40; z-index: 40;
text-align: center; text-align: center;
background: var(--bg1); background: var(--bg1);
@ -769,7 +775,7 @@ text {
position: relative; position: relative;
align-items: center; align-items: center;
border-bottom: 1px solid var(--bg5); border-bottom: 1px solid var(--bg5);
min-height: 4em; min-height: 4rem;
} }
.ciy-form>view { .ciy-form>view {
@ -778,15 +784,15 @@ text {
} }
.ciy-form>view:last-child { .ciy-form>view:last-child {
margin-right: 1em; margin-right: 1rem;
} }
.ciy-form>label { .ciy-form>label {
margin: 0 1em; margin: 0 1rem;
flex-shrink: 0; flex-shrink: 0;
white-space: nowrap; white-space: nowrap;
align-self: flex-start; align-self: flex-start;
line-height: 4em; line-height: 4rem;
} }
.ciy-form>label.imp { .ciy-form>label.imp {
@ -796,10 +802,10 @@ text {
.ciy-form>label.imp::before { .ciy-form>label.imp::before {
content: ''; content: '';
position: absolute; position: absolute;
left: 0.3em; left: 0.3rem;
top: 0.8em; top: 0.8rem;
width: 0.4em; width: 0.4rem;
height: 0.4em; height: 0.4rem;
background: var(--dag5); background: var(--dag5);
border-radius: 50%; border-radius: 50%;
} }
@ -809,7 +815,7 @@ text {
.char4 label.imp::before, .char4 label.imp::before,
.char5 label.imp::before, .char5 label.imp::before,
.char6 label.imp::before { .char6 label.imp::before {
right: -0.5em; right: -0.5rem;
left: auto; left: auto;
} }
@ -823,50 +829,50 @@ text {
} }
.char2 label { .char2 label {
min-width: 2em; min-width: 2rem;
} }
.char3 label { .char3 label {
min-width: 3em; min-width: 3rem;
} }
.char4 label { .char4 label {
min-width: 4em; min-width: 4rem;
} }
.char5 label { .char5 label {
min-width: 5em; min-width: 5rem;
} }
.char6 label { .char6 label {
min-width: 6em; min-width: 6rem;
} }
.ciy-form.v { .ciy-form.v {
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
padding-top: 0.5em; padding-top: 0.5rem;
padding-bottom: 0.5em; padding-bottom: 0.5rem;
} }
.ciy-form.v>view { .ciy-form.v>view {
text-align: left; text-align: left;
margin: 0 0.5em; margin: 0 0.5rem;
width: calc(100% - 1em); width: calc(100% - 1em);
} }
.ciy-form.v>label { .ciy-form.v>label {
height: 2em; height: 2rem;
line-height: 2em; line-height: 2rem;
} }
.ciy-waterfall { .ciy-waterfall {
column-count: 2; column-count: 2;
column-gap: 0.5em; column-gap: 0.5rem;
} }
.ciy-waterfall .itmcont { .ciy-waterfall .itmcont {
margin-bottom: 0.5em; margin-bottom: 0.5rem;
width: 100%; width: 100%;
break-inside: avoid; break-inside: avoid;
} }
@ -878,49 +884,63 @@ text {
.md-h1 { .md-h1 {
font-weight: bold; font-weight: bold;
font-size: 1.2em; font-size: 1.2rem;
margin-left: 0.3em; line-height: 1.5rem;
line-height: 1.5em;
text-align: left; text-align: left;
padding: 0.5em 0 0.5em 0.5em; padding: 0.5em 0 0.5em 0.5rem;
} }
.md-h2 { .md-h2 {
font-weight: bold; font-weight: bold;
font-size: 1.1em; font-size: 1.1rem;
margin-left: 0.4em; line-height: 1.8rem;
line-height: 1.8em; padding: 0.5em 0 0.5em 0.5rem;
padding: 0.5em 0 0.5em 0.5em;
} }
.md-h3, .md-h3,
.md-h4, .md-h4,
.md-h5 { .md-h5 {
font-weight: bold; font-weight: bold;
font-size: 1em; font-size: 1rem;
margin-left: 0.5em; line-height: 1.5rem;
line-height: 1.5em; padding: 0.5em 0 0.5em 0.5rem;
padding: 0.5em 0 0.5em 0.5em;
} }
.md-content { .md-content {
font-size: 1em; font-size: 1rem;
text-indent: 1em; text-indent: 1rem;
line-height: 2em; line-height: 2rem;
white-space: pre-wrap; white-space: pre-wrap;
} }
.md-code { .md-code {
text-indent: 0; text-indent: 0;
padding: 0.2em 0.4em; padding: 0.2em 0.4rem;
font-size: 0.9em; font-size: 0.9rem;
line-height: 1em; line-height: 1rem;
margin: 0 0.2em; margin: 0 0.2rem;
display: inline-block; display: inline-block;
white-space: nowrap; white-space: nowrap;
color: #ffffff; color: #ffffff;
background: linear-gradient(340deg, var(--man5), var(--man7)); background: linear-gradient(340deg, var(--man5), var(--man7));
border-radius: 0.2em; border-radius: 0.2rem;
}
.md-table-div {
width: 100%;
overflow: auto;
}
.md-table {
border-collapse: collapse;
background: var(--bg2);
white-space: nowrap;
}
.md-table th, .md-table td {
border: 1px solid var(--bg6);
padding: 0.5em;
text-align: left;
} }
.txt-smmm.txt-smmm.txt-smmm { .txt-smmm.txt-smmm.txt-smmm {
@ -956,13 +976,17 @@ text {
} }
.txt-wl.txt-wl.txt-wl { .txt-wl.txt-wl.txt-wl {
font-weight: lighter; font-weight: 300;
} }
.txt-un.txt-un.txt-un { .txt-un.txt-un.txt-un {
text-decoration: underline; text-decoration: underline;
} }
.txt-del.txt-del.txt-del {
text-decoration: line-through;
}
.txt-left.txt-left.txt-left { .txt-left.txt-left.txt-left {
text-align: left; text-align: left;
} }
@ -1187,6 +1211,7 @@ text {
.noselect.noselect.noselect { .noselect.noselect.noselect {
user-select: none; user-select: none;
-webkit-user-select: none;
} }
.tran5.tran5.tran5 { .tran5.tran5.tran5 {
@ -1232,57 +1257,49 @@ text {
} }
.t1.t1.t1 { .t1.t1.t1 {
top: 0.5em; top: 0.5rem;
} }
.l1.l1.l1 { .l1.l1.l1 {
left: 0.5em; left: 0.5rem;
} }
.r1.r1.r1 { .r1.r1.r1 {
right: 0.5em; right: 0.5rem;
} }
.b1.b1.b1 { .b1.b1.b1 {
bottom: 0.5em; bottom: 0.5rem;
} }
.t2.t2.t2 { .t2.t2.t2 {
top: 1em; top: 1rem;
} }
.l2.l2.l2 { .l2.l2.l2 {
left: 1em; left: 1rem;
} }
.r2.r2.r2 { .r2.r2.r2 {
right: 1em; right: 1rem;
} }
.b2.b2.b2 { .b2.b2.b2 {
bottom: 1em; bottom: 1rem;
} }
.lh1.lh1.lh1 { .lh1.lh1.lh1 {
line-height: 1em; line-height: 1rem;
} }
.lh2.lh2.lh2 { .lh2.lh2.lh2 {
line-height: 1.5em; line-height: 1.5rem;
} }
.lh3.lh3.lh3 { .lh3.lh3.lh3 {
line-height: 2em; line-height: 2rem;
} }
.lh4.lh4.lh4 { .lh4.lh4.lh4 {
line-height: 2.5em; line-height: 2.5rem;
} }
.ti1.ti1.ti1 {
text-indent: 1em;
}
.ti2.ti2.ti2 {
text-indent: 2em;
}

View File

@ -0,0 +1,122 @@
var websocket = function(addr) {
var app = getApp();
var thos = this;
this.buffer = new Array(); //发送数据缓冲区
this.reOpenData = [2, 5, 3, 5, 5, 3, 5, 8, 10, 20, 30, 30]; //断线重连,每次间隔时间/秒
this.reOpen = 0; //断线重连次数
this.keepAliveTimer = setInterval(function() {
console.log('keep');
try {
if (thos.wsock && thos.wsock.readyState !== 1) {
thos.reOpenSec--;
if (thos.reOpenSec <= 0) {
thos.reOpen++;
thos.reOpenSec = 10;
thos.open();
}
return;
}
if (thos.buffer.length > 0) {
var data = thos.buffer.pop();
thos.send(data);
} else {
if (new Date().getTime() - thos.last_health_time >= 15000 && thos.wsock
.readyState === 1) {
thos.wsock.send({
data: 'h'
});
thos.last_health_time = new Date().getTime();
}
}
} catch (err) {
app.uperr("app.ws.error", err);
}
}, 1000);
this.setOpenSec = function() {
(thos.reOpen < thos.reOpenData.length) ? thos.reOpenSec = thos.reOpenData[thos.reOpen]: thos
.reOpenSec = 90; //断线重试太多后的间隔时间
}
this.open = function() {
try {
if (thos.wsock && thos.wsock.trueClose)
return;
thos.setOpenSec();
if (thos.wsock) {
if (thos.wsock.readyState == 1)
return;
thos.wsock.close();
}
thos.wsock = uni.connectSocket({
url: addr,
complete: () => {}
});
thos.wsock.onOpen(function(event) {
try {
thos.reOpen = 0;
thos.last_health_time = new Date().getTime();
if (typeof(thos.onopen) == "function")
thos.onopen(event);
} catch (err) {
app.uperr('app.ws.onopen', err);
}
});
thos.wsock.onMessage(function(e) {
try {
if (typeof(thos.onmessage) == "function")
thos.onmessage(e);
} catch (err) {
app.uperr('app.ws.onmessage', err);
}
});
thos.wsock.onClose(function(e) {
try {
if (thos.wsock.trueClose) {
clearInterval(thos.keepAliveTimer);
return;
}
thos.setOpenSec();
if (typeof(thos.onclose) == "function")
thos.onclose(e);
} catch (err) {
app.uperr('app.ws.onclose', err);
}
});
thos.wsock.onError(function(e) {
try {
thos.setOpenSec();
if (typeof(thos.onerror) == "function")
thos.onerror(e);
} catch (err) {
app.uperr('app.ws.onerror', err);
}
});
} catch (err) {
console.log(app, err);
app.uperr('app.ws.open', err);
}
}
this.send = function(msg) {
try {
if (this.wsock === undefined || this.wsock.trueClose)
return false;
if (this.wsock.readyState !== 1 || this.wsock.bufferedAmount > 0)
this.buffer.push(msg);
else {
this.wsock.send({
data: msg
});
this.last_health_time = new Date().getTime();
}
return true;
} catch (err) {
app.uperr('app.ws.send', err);
}
}
this.close = function(send) {
this.wsock.trueClose = true;
this.wsock.close();
}
this.open();
};
export default websocket

View File

@ -14,6 +14,7 @@ const htmlPlugin_ciy = () => {
pft += '<ciy-auth ref="auth"></ciy-auth>'; //暂时只做微信生态 pft += '<ciy-auth ref="auth"></ciy-auth>'; //暂时只做微信生态
pft += '<ciy-alert ref="alert"></ciy-alert>'; pft += '<ciy-alert ref="alert"></ciy-alert>';
pft += '<ciy-toast ref="toast"></ciy-toast>'; pft += '<ciy-toast ref="toast"></ciy-toast>';
//pft += '<ciy-dbg ref="dbg"></ciy-dbg>';
pft += '<ciy-popmenu ref="popmenu"></ciy-popmenu>'; pft += '<ciy-popmenu ref="popmenu"></ciy-popmenu>';
let pfb = '</view>'; let pfb = '</view>';

View File

@ -3,6 +3,8 @@ xcopy ciydao\pages\demo ciyon_ap\pages\demo /s /y /v
xcopy ciydao\pages\main ciyon_ap\pages\main /s /y /v xcopy ciydao\pages\main ciyon_ap\pages\main /s /y /v
xcopy ciydao\pages\pub ciyon_ap\pages\pub /s /y /v xcopy ciydao\pages\pub ciyon_ap\pages\pub /s /y /v
xcopy ciydao\util ciyon_ap\util /s /y /v xcopy ciydao\util ciyon_ap\util /s /y /v
xcopy ciydao\index.html ciyon_ap\index.html /s /y /v
xcopy ciydao\main.js ciyon_ap\main.js /s /y /v xcopy ciydao\main.js ciyon_ap\main.js /s /y /v
xcopy ciydao\vite.config.js ciyon_ap\vite.config.js /s /y /v xcopy ciydao\vite.config.js ciyon_ap\vite.config.js /s /y /v
xcopy ..\web\ambdao ..\web\ambap /s /y /v
pause pause

View File

@ -20,7 +20,7 @@ import (
func main() { func main() {
//nohup ./zgo & //nohup ./zgo &
//nohup /data/go/ciyon/zgo > /dev/null 2>&1 & //nohup /data/go/ciyon/zgo > /dev/null 2>&1 &
c.CiyVars.Version = "1.0.1" c.CiyVars.Version = "1.0.2"
c.Clog("---=========================Ciyon=========================---") c.Clog("---=========================Ciyon=========================---")
c.Clog("Version:", c.CiyVars.Version, " WorkDir:", c.CiyWebDir) c.Clog("Version:", c.CiyVars.Version, " WorkDir:", c.CiyWebDir)
//读取配置文件ini //读取配置文件ini
@ -99,7 +99,7 @@ func main() {
c.Log = c.NewCiyLog(500) c.Log = c.NewCiyLog(500)
c.Log.SupportStack(c.CiyVars.Version) c.Log.SupportStack(c.CiyVars.Version)
c.Log.InitFile(logfile, logfilelevel) c.Log.InitFile(logfile, logfilelevel)
c.Log.InitTCP(logtcp, logtcplevel) //c.Log.InitTCP(logtcp, logtcplevel)
c.Log.Info("Ciyon", "Ciyon Start.") c.Log.Info("Ciyon", "Ciyon Start.")
go watchMe() go watchMe()
@ -131,7 +131,7 @@ func main() {
web.SetMockFile() //在web/ud/mock目录下建立对应的json文件。 web.SetMockFile() //在web/ud/mock目录下建立对应的json文件。
} else if mock != "" { } else if mock != "" {
web.SetMockFn(func(w http.ResponseWriter, r *http.Request) error { web.SetMockFn(func(w http.ResponseWriter, r *http.Request) error {
funname := c.GetQuery("func", r) funname := r.URL.Path
funs := strings.Split(funname, ".") funs := strings.Split(funname, ".")
if len(funs) < 2 { if len(funs) < 2 {
return fmt.Errorf("func fmterr func=%v", funname) return fmt.Errorf("func fmterr func=%v", funname)

View File

@ -8,6 +8,7 @@ import (
"ciyon/web/admin/autotask" "ciyon/web/admin/autotask"
"ciyon/web/admin/datasse" "ciyon/web/admin/datasse"
"ciyon/web/admin/demo" "ciyon/web/admin/demo"
"ciyon/web/admin/demo/dyn"
"ciyon/web/admin/rigger" "ciyon/web/admin/rigger"
"ciyon/web/admin/wsdemo" "ciyon/web/admin/wsdemo"
c "ciyon/zciyon" c "ciyon/zciyon"
@ -17,14 +18,11 @@ import (
本文件由node生成 本文件由node生成
*/ */
func setWebRoute_adm(web *c.CiyWebServer) { func setWebRoute_adm(web *c.CiyWebServer) {
web.RouterFunc("admin/rigger", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{ web.RouterFunc("/admin/rigger", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"logfile": { "logfile": {
"init": rigger.Logfile_init, "init": rigger.Logfile_init,
"viewlog": rigger.Logfile_viewlog, "viewlog": rigger.Logfile_viewlog,
}, },
"datasse": {
"demo": datasse.DataSSE_demo,
},
"statsfunc": { "statsfunc": {
"init": rigger.Statsfunc_init, "init": rigger.Statsfunc_init,
"del": rigger.Statsfunc_del, "del": rigger.Statsfunc_del,
@ -51,9 +49,9 @@ func setWebRoute_adm(web *c.CiyWebServer) {
"del": rigger.Logdb_del, "del": rigger.Logdb_del,
"multiread": rigger.Logdb_multiread, "multiread": rigger.Logdb_multiread,
}, },
"luser": { "lug": {
"init": rigger.Luser_init, "init": rigger.Lug_init,
"del": rigger.Luser_del, "del": rigger.Lug_del,
}, },
"funcslow": { "funcslow": {
"init": rigger.Funcslow_init, "init": rigger.Funcslow_init,
@ -134,7 +132,7 @@ func setWebRoute_adm(web *c.CiyWebServer) {
"update": rigger.Role_u_update, "update": rigger.Role_u_update,
}, },
}) })
web.RouterFunc("admin/ap", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{ web.RouterFunc("/admin/ap", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"paper": { "paper": {
"init": ap.Paper_init, "init": ap.Paper_init,
"update": ap.Paper_update, "update": ap.Paper_update,
@ -142,7 +140,7 @@ func setWebRoute_adm(web *c.CiyWebServer) {
"del": ap.Paper_del, "del": ap.Paper_del,
}, },
}) })
web.RouterFunc("admin/demo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{ web.RouterFunc("/admin/demo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"normal": { "normal": {
"list": demo.Normal_list, "list": demo.Normal_list,
"del": demo.Normal_del, "del": demo.Normal_del,
@ -154,17 +152,28 @@ func setWebRoute_adm(web *c.CiyWebServer) {
"importxls_data": demo.Normal_importxls_data, "importxls_data": demo.Normal_importxls_data,
}, },
}) })
web.RouterFunc("admin/autotask", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{ web.RouterFunc("/admin/demo/dyn", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"sse": {
"get": dyn.SSE_get,
"post": dyn.SSE_get,
},
})
web.RouterFunc("/admin/autotask", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"task": { "task": {
"main": autotask.Task_main, "main": autotask.Task_main,
}, },
}) })
web.RouterFunc("admin/wsdemo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{ web.RouterFunc("/admin/datasse", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"index": {
"demo": datasse.Index_demo,
},
})
web.RouterFunc("/admin/wsdemo", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"go": { "go": {
"demo": wsdemo.Wsdemo, //需nginx转发upgrade为websocket协议 "demo": wsdemo.Wsdemo, //需nginx转发upgrade为websocket协议
}, },
}) })
web.RouterFunc("admin", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{ web.RouterFunc("/admin", map[string]map[string]func(http.ResponseWriter, *http.Request) bool{
"welcome": { "welcome": {
"init": admin.Welcome_init, "init": admin.Welcome_init,
}, },

View File

@ -1,59 +0,0 @@
[db]
host=127.0.0.1
port=3306
user=root
pass=wkxroot
name=c5_ciyon
maxopenconn=0
maxidelconn=0
maxlifesec=0
[php]
;127.0.0.1:801
host=
[mock]
;file zc_ymock
target=zc_ymock
[main]
runmode=dev
[log]
logfile=log/ciyon.log
logtcp=
logfilelevel=1
logtcplevel=3
[web]
webmode=http
webipsk=127.0.0.1:4003
webhttp2=
[cdn]
weburl=https://xxx.ciy.cn
files=.html;.js;.css
provider=cloud.tencent.com
secretId=xxx
secretKey=xxx
[ciyapi]
apiid=13453
apikey=a52c7b64
[s3A]
access=dce226e23a8455
secret=c4d60a219abcf5c0837af80
endpoint=1d46d0c3.r2.cloudflarestorage.com
region=us-east-1
bucket=ciy5
acl=public-read
[s3Z]
access=dce226e23a8455
secret=c4d60a219abcf5c0837af80
endpoint=1d46d0c3.r2.cloudflarestorage.com
region=us-east-1
bucket=ciy5
acl=public-read

110
web/KunWeb/AIChat.php Normal file
View File

@ -0,0 +1,110 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI助手</title>
<style>
.chat-box {
width: 600px;
margin: 30px auto;
border: 1px solid #ddd;
border-radius: 10px;
padding: 20px;
background: #f9f9f9;
}
.msg {
padding: 12px 15px;
border-radius: 10px;
margin: 10px 0;
}
.user {
background: #007bff;
color: #fff;
text-align: right;
}
.ai {
background: #e9e9eb;
color: #333;
text-align: left;
white-space: pre-wrap;
}
textarea {
width: 100%;
height: 80px;
padding: 10px;
border-radius: 8px;
border: 1px solid #ccc;
margin-top: 10px;
}
button {
padding: 10px 20px;
background: #007bff;
color: #fff;
border: none;
border-radius: 8px;
cursor: pointer;
}
</style>
</head>
<body>
<?php
require_once '../zciyphp/openai.php';
$config = [
'aikey' => 'sk-0cd7b8c72ae04d049306e345f17c6790',
'baseurl' => 'https://dashscope.aliyuncs.com/compatible-mode/v1',
'model' => 'qwen-turbo',
'maxtoken' => 2000
];
$openai = new ciy\openai($config);
$openai->newsystem('你是seo的规划师');
$user_msg = $_POST['msg'] ?? '';
// clog($user_msg);
// clog($openai->completion($user_msg));
$response='';
$ai_response = '';
if($user_msg){
$response = $openai->completion($user_msg);
$ai_response = $response['content'];
// clog($ai_response);
}
?>
<div class="chat-box">
<h3>我是AI</h3>
<?php
echo $ai_response;
?>
<form method="post">
<textarea name="msg" placeholder="您想问些什么..." v-model="content"></textarea>
<br>
<button type="submit">发送</button>
</form>
</div>
</body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.0.5/vue.global.js"></script>
<script>
const {
createApp
} = Vue;
createApp({
data() {
return {
content:''
}
}
}).mount(".chat-box")
</script>
</html>

133
web/KunWeb/core_member.php Normal file
View File

@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>关于坤班 - 核心成员</title>
<link rel="stylesheet" href="/css/common.css">
<link rel="stylesheet" href="/css/core_member.css">
</head>
<body>
<div class="form-mask" id="formMask"></div>
<!-- 导航栏 -->
<?php
$currentPath = getCurrentPurePath();
$db = new ciy\db();
$csql = new ciy\sql('www_list_art');
$PageSize = 4;
$currentPage = Web_getint('currentPage');
$totalData = $db->execute('select keyw from www_list_art where keyw=?', ['坤班成员']);
$csql->limit($currentPage, $PageSize);
$csql->where('keyw','坤班成员');
$csql->order('uptimes desc');
$csql->column('name,keyw,descs,icon,id');
$count = -1;
$rows = $db->get($csql, $count);
include_once('wwpage/Kun_header.php');
?>
<!-- 核心成员头部Banner -->
<section class="member-banner">
<div class="member-banner-text">
<h1>核心成员</h1>
<p>前辈领衔,聚力同行</p>
</div>
</section>
<!-- 核心成员列表 -->
<div class="container">
<div class="member-list">
<?php
foreach ($rows as $row) {
if ($row['keyw'] == '坤班成员') {
$new_descs = explode(' ', $row['descs']);
// clog($new_descs[1]);
// foreach($new_descs as $new){
// clog($new);
// }
$imgsrc = '/ud' . $row['icon'];
echo '
<div class="member-card">
<div class="member-avatar">
<img src="' . $imgsrc . '" alt="' . $row['name'] . '">
</div>
<div class="member-info">
<h3>' . $row['name'] . '</h3>
<p>' . $new_descs[0] . '</p>
<p>' . $new_descs[1] . '</p>
<p>' . $new_descs[2] . '</p>
</div>
<div class="member-more"><a href="/core_member_detail/'.$row['id'].'">了解更多</a></div>
</div>';
}
}
?>
<!-- <div class="member-card">
<div class="member-avatar">
<img src="images/member1.jpg" alt="成员1">
</div>
<div class="member-info">
<h3>张三</h3>
<p>学历/职位:本科大三 / 前端组组长</p>
<p>专业:计算机科学与技术</p>
<p>项目经历:坤班活动管理系统前端开发</p>
</div>
<div class="member-more"><a href="core_member_detail.html">了解更多</a></div>
</div> -->
</div>
<!-- 分页导航 -->
<div class="pagination">
<?php
$page = new web\cwebcomon();
$page->www_Kun_showpage($totalData, $PageSize, $currentPage, '/core_member', function ($currentPage) {
return '/' . $currentPage;
});
?>
</div>
</div>
<div id="consult-fixed" class="consult-fixed">
<span></span>
</div>
<div class="form-modal" id="formModal">
<div class="form-header">
<h3>业务需求提交</h3>
<button class="close-modal-btn" id="closeModalBtn">×</button>
</div>
<form class="business-form" id="businessForm">
<div class="form-item">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" placeholder="请输入姓名" required>
</div>
<div class="form-item">
<label for="phone">电话:</label>
<input type="tel" id="phone" name="phone" placeholder="请输入手机号" required>
</div>
<div class="form-item">
<label for="demand">业务需求(非必填)</label>
<textarea id="demand" name="demand" rows="4" placeholder="请描述你的业务需求"></textarea>
</div>
<div class="form-btn-group">
<button type="submit">提交</button>
<button type="button" class="close-form-btn" id="closeFormBtn">取消</button>
</div>
</form>
</div>
<!-- 底部 -->
<?php
include_once('wwpage/Kun_footer.php');
?>
<script src="/js/common.js"></script>
<script src="js/ask.js"></script>
<script src="js/core_member.js"></script>
</body>
</html>

View File

@ -0,0 +1,188 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>核心成员 - 张三详情</title>
<link rel="stylesheet" href="/css/common.css">
<link rel="stylesheet" href="/css/core_member_detail.css">
</head>
<body>
<div class="form-mask" id="formMask"></div>
<?php
$member_id = Web_getint('id');
$db = new ciy\db();
$csql = new ciy\sql('www_list_art');
$csql->where('id', $member_id);
$csql->column("name,content,descs,icon");
$count = -1;
$rows = $db->get($csql, $count);
// 成员产品
$member_product_sql = new ciy\sql('www_list_art');
$member_product_sql->where('keyw', '坤班产品');
$member_product_sql->column("id,name");
$product_name = $db->get($member_product_sql, $count);
// 随机成员
$member_sql = new ciy\sql('www_list_art');
$member_sql->where('keyw', '坤班成员');
$member_sql->where('id != ?', $member_id);
$member_sql->column("id,name");
$member_rows = $db->get($member_sql, $count);
// clog($member_rows);
$recommendRows = [];
if (!empty($member_rows)) {
shuffle($member_rows);
$recommendRows = array_slice($member_rows, 0, 3);
}
include_once('wwpage/Kun_header.php');
?>
<!-- 详情页头部Banner -->
<section class="member-detail-banner">
<div class="member-detail-banner-text">
<h1>核心成员</h1>
<p>前辈领衔,聚力同行</p>
</div>
</section>
<!-- 详情内容 -->
<div class="container">
<div class="member-detail-container">
<?php
foreach ($rows as $row) {
$imgsrc = '/ud' . $row['icon'];
$descs = explode("专业", $row['descs']);
$content = trim($row['content']);
$b = '';
$research_projects = '';
if (preg_match('/在研项目:\s*(.*?)\s*负责产品:/s', $content, $matches)) {
$project_list = explode('、', trim($matches[1]));
$research_projects .= '<p><strong>在研项目:</strong></p>';
foreach ($project_list as $project) {
$project = trim($project);
// clog($project);
if (!empty($project)) {
$matched_id = '';
foreach ($product_name as $pn) {
// clog($pn);
if (trim($pn['name']) == $project) {
$matched_id = $pn['id'];
// clog(1);
break;
}
}
if ($matched_id) {
$research_projects .= '<p><a href="/product_detail/' . $matched_id . '" style="text-decoration: none;">' . $project . '</a></p>';
} else {
$research_projects .= '<p>' . $project . '</p>';
}
}
}
}
$responsible_products = '';
if (preg_match('/负责产品:\s*(.*)/s', $content, $matches)) {
$product_list = explode('、', trim($matches[1]));
$responsible_products .= '<p><strong>负责产品:</strong></p>';
foreach ($product_list as $product) {
$product = trim($product);
if (!empty($product)) {
$matched_id = '';
foreach ($product_name as $pn) {
if (trim($pn['name']) == $product) {
$matched_id = $pn['id'];
break;
}
}
if ($matched_id) {
$responsible_products .= '<p><a href="/product_detail/' . $matched_id . '" style="text-decoration: none;">' . $product . '</a></p>';
} else {
$responsible_products .= '<p>' . $product . '</p>';
}
}
}
}
$b = $research_projects . $responsible_products;
echo '
<div class="member-main-content">
<div class="member-basic">
<div class="member-detail-avatar">
<img src="' . $imgsrc . '" alt="' . $row['name'] . '形象照">
</div>
<div class="member-detail-info">
<h3>姓名:' . $row['name'] . '</h3>
<p>' . $descs[0] . '</p>
</div>
</div>
<div class="member-section">
<h4>核心实践成果</h4>
' . $b . '
</div>
<a href="/core_member/" class="back-link">返回核心成员页</a>
</div>
<div class="member-sidebar">
<div class="other-members">
<h4 class="other-members-title">其他核心成员</h4>
<div class="other-members-list">';
if (!empty($recommendRows)) {
foreach ($recommendRows as $rec) {
echo '<a href="/core_member_detail/' . $rec['id'] . '" class="recommend-item">' . $rec['name'] . '</a> ';
}
} else {
echo '<div class="other-members-empty">暂无其他核心成员</div>';
}
echo '
</div>
</div>
</div>
';
}
?>
</div>
</div>
<div id="consult-fixed" class="consult-fixed">
<span></span>
</div>
<div class="form-modal" id="formModal">
<div class="form-header">
<h3>业务需求提交</h3>
<button class="close-modal-btn" id="closeModalBtn">×</button>
</div>
<form class="business-form" id="businessForm">
<div class="form-item">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" placeholder="请输入姓名" required>
</div>
<div class="form-item">
<label for="phone">电话:</label>
<input type="tel" id="phone" name="phone" placeholder="请输入手机号" required>
</div>
<div class="form-item">
<label for="demand">业务需求(非必填)</label>
<textarea id="demand" name="demand" rows="4" placeholder="请描述你的业务需求"></textarea>
</div>
<div class="form-btn-group">
<button type="submit">提交</button>
<button type="button" class="close-form-btn" id="closeFormBtn">取消</button>
</div>
</form>
</div>
<?php
include_once('wwpage/Kun_footer.php');
?>
<script src="/js/common.js"></script>
<script src="js/ask.js"></script>
</body>
</html>

87
web/KunWeb/declare.php Normal file
View File

@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>免责声明</title>
<link rel="stylesheet" href="/css/common.css">
<link rel="stylesheet" href="/css/declare.css">
</head>
<body>
<div class="form-mask" id="formMask"></div>
<!-- 导航栏 -->
<?php
$currentPath = getCurrentPurePath();
include_once('wwpage/Kun_header.php');
?>
<!-- 坤班简介头部Banner -->
<section class="declare-banner">
<div class="declare-banner-text">
<h1>免责声明</h1>
</div>
</section>
<!-- 免责信息 -->
<section class="declare-section1">
<?php
$db = new ciy\db();
$web = new ciy\web();
$csql = new ciy\sql('www_single');
// clog($csql);
$csql->where("name",'declare');
$csql->column('content');
$count = -1;
$rows = $db->get($csql,$count);
// clog($rows);
foreach($rows as $row){
$contentText = $row['content'];
// clog($contentText);
echo $web->Web_markdown_convert($contentText);
}
?>
</section>
<div id="consult-fixed" class="consult-fixed">
<span></span>
</div>
<div class="form-modal" id="formModal">
<div class="form-header">
<h3>业务需求提交</h3>
<button class="close-modal-btn" id="closeModalBtn">×</button>
</div>
<form class="business-form" id="businessForm">
<div class="form-item">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" placeholder="请输入姓名" required>
</div>
<div class="form-item">
<label for="phone">电话:</label>
<input type="tel" id="phone" name="phone" placeholder="请输入手机号" required>
</div>
<div class="form-item">
<label for="demand">业务需求(非必填)</label>
<textarea id="demand" name="demand" rows="4" placeholder="请描述你的业务需求"></textarea>
</div>
<div class="form-btn-group">
<button type="submit">提交</button>
<button type="button" class="close-form-btn" id="closeFormBtn">取消</button>
</div>
</form>
</div>
<!-- 底部-->
<?php
include_once('wwpage/Kun_footer.php');
?>
<script src="/js/common.js"></script>
</body>
</html>

274
web/KunWeb/index.php Normal file
View File

@ -0,0 +1,274 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>坤班 - 链接校内外</title>
<!-- 引入外部CSS样式文件 -->
<link rel="stylesheet" href="/css/common.css">
<link rel="stylesheet" href="/css/index.css">
</head>
<body>
<!-- 头部 -->
<?php
$currentPath = getCurrentPurePath();
include_once("wwpage/Kun_header.php");
?>
<!-- Banner区域 -->
<section class="banner">
<div class="banner-text">
<h1>坤班——链接校内外</h1>
<p>校内育才 · 校外赋能 聚核领路 技筑成长</p>
<div class="banner-btn-group">
<a href="/join/" class="banner-link primary">申请加入坤班</a>
<a href="/product/" class="banner-link secondary">查看实战项目</a>
</div>
</div>
</section>
<!-- 板块1产研学用融合发展模式 -->
<section class="feature-section">
<div class="container">
<div class="section-title">
<h2>坤班核心特色</h2>
</div>
<div class="feature-container">
<div class="feature-card">
<div class="feature-img">
<img src="images/IMUT_night.jpg" alt="产业需求">
</div>
<h3></h3>
<p>产业需求为核心牵引,定方向、提要求、供场景</p>
</div>
<div class="feature-card">
<div class="feature-img">
<img src="images/IMUT_night.jpg" alt="项目育人">
</div>
<h3></h3>
<p>以项目育人为核心,融知识、练能力、适配产业</p>
</div>
<div class="feature-card">
<div class="feature-img">
<img src="images/IMUT_night.jpg" alt="行业痛点攻关">
</div>
<h3></h3>
<p>以行业痛点为科研导向,轻攻关、重落地、强积累</p>
</div>
<div class="feature-card">
<div class="feature-img">
<img src="images/IMUT_night.jpg" alt="资本对接">
</div>
<h3></h3>
<p>对接资本,反哺开发</p>
</div>
</div>
</div>
</section>
<!-- 板块2坤班业务范围 - 背景图随业务卡片切换 -->
<div class="section-title">
<h2>坤班业务范围</h2>
</div>
<section class="business-section">
<img src="images/IMUT_day.jpg" alt="业务范围默认背景" class="bg-img" id="businessBgImg">
<div class="container">
<div class="business-content" id="businessContent">
</div>
<div class="business-card-group">
<div class="business-card">
<h3> 区块链与分布式技术领域</h3>
</div>
<div class="business-card">
<h3>AI 全链路技术与应用领域</h3>
</div>
<div class="business-card">
<h3>高性能技术与开发工具领域</h3>
</div>
<div class="business-card">
<h3>产业数字化与安全服务领域</h3>
</div>
</div>
</div>
</section>
<!-- 板块3坤班团体活动照片墙 -->
<section class="activity-section">
<div class="container">
<div class="section-title">
<h2>坤班团体活动</h2>
</div>
<div class="photo-scroll-wrapper">
<div class="photo-wall" id="photoWall">
<div class="photo-item">
<img src="ud/img/first_Slong1.jpg" alt="活动照片1">
<div class="photo-desc">从坤班出发,成为行业里的技术中坚力量</div>
</div>
<div class="photo-item">
<img src="ud/img/first_Slong2.jpg" alt="活动照片2">
<div class="photo-desc">用代码破冰,第一次见面就成了技术搭子</div>
</div>
<div class="photo-item">
<img src="ud/img/first_Slong3.jpg" alt="活动照片3">
<div class="photo-desc">一人一个干货,全员共同成长</div>
</div>
<div class="photo-item">
<img src="ud/2026/0313/wartc/162832_5391.jpg" alt="活动照片4">
<div class="photo-desc">因技术相遇,因热爱同行</div>
</div>
</div>
</div>
</div>
</section>
<!-- 板块4 -->
<section class="list-section">
<div class="container">
<div class="list-container">
<div class="list-card">
<h3>
坤班活动
<a href="/activity" style="margin-left: auto; font-size: 14px; color: #165DFF;">更多</a>
</h3>
<div class="list-content">
<?php
$db = new ciy\db();
$csql = new ciy\sql("www_list_art");
$csql->where('cateid', 9);
$csql->column('id,name,keyw');
$count = -1;
$line = 0;
$rows = $db->get($csql, $count);
foreach ($rows as $row) {
if ($row['keyw'] == 'Ac_Sal' && $line < 2) {
echo '
<div class="list-item">
<a href="/detail/Slong/' . $row['id'] . '">' . $row['name'] . '</a>
</div>
';
$line += 1;
} else if ($row['keyw'] == 'Ac_Welcome' && $line < 3) {
echo '
<div class="list-item">
<a href="/detail/Welcome/' . $row['id'] . '">' . $row['name'] . '</a>
</div>
';
$line += 1;
} else if ($row['keyw'] == 'Ac_SaiS' && $line <= 4) {
echo '
<div class="list-item">
<a href="/detail/Sai/' . $row['id'] . '">' . $row['name'] . '</a>
</div>
';
$line += 1;
}
}
?>
</div>
</div>
<div class="list-card">
<h3>
常见问题
<a href="/resource" style="margin-left: auto; font-size: 14px; color: #165DFF;">更多</a>
</h3>
<div class="list-content">
<?php
$db = new ciy\db();
$csql = new ciy\sql("www_list_art");
$csql->where('cateid', 8);
$csql->column('id,name');
$count = -1;
$rows = $db->get($csql, $count);
// clog($rows);
foreach ($rows as $row) {
// clog($row['name']);
echo
'
<div class="list-item">
<a href="/detail/quest/' . $row['id'] . '">' . $row['name'] . '</a>
</div>';
}
?>
</div>
</div>
<div class="list-card list-card--weak">
<h3>
行业观察
</h3>
<div class="list-content">
<?php
$db = new ciy\db();
$csql = new \ciy\sql('www_list_art');
$csql->order('id desc');
$csql->where('cateid', 2);
$csql->column('id,name');
$count = -1;
$rows = $db->get($csql, $count);
foreach ($rows as $row) {
echo '
<div class="list-item">
<a href="/detail/insight/' . $row['id'] . '">' . $row['name'] . '</a>
</div>';
}
?>
<!-- -->
</div>
</div>
</div>
</div>
</section>
<!-- 固定在线咨询入口 -->
<div id="consult-fixed" class="consult-fixed">
<span></span>
</div>
<div class="form-modal" id="formModal">
<div class="form-header">
<h3>业务需求提交</h3>
<button class="close-modal-btn" id="closeModalBtn">×</button>
</div>
<form class="business-form" id="businessForm">
<div class="form-item">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" placeholder="请输入姓名" required>
</div>
<div class="form-item">
<label for="phone">电话:</label>
<input type="tel" id="phone" name="phone" placeholder="请输入手机号" required>
</div>
<div class="form-item">
<label for="demand">业务需求(非必填):</label>
<textarea id="demand" name="demand" rows="4" placeholder="请描述你的业务需求"></textarea>
</div>
<div class="form-btn-group">
<button type="submit" class="submit_btn">提交</button>
<button type="button" class="close-form-btn" id="closeFormBtn">取消</button>
</div>
</form>
</div>
<!-- 底部 -->
<?php include_once("wwpage/Kun_footer.php"); ?>
<!-- 引入外部JS脚本文件 -->
<script src="/js/common.js"></script>
<script src="/js/index.js"></script>
<script src="/js/ask.js"></script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More