first commit

main
kevin 7 months ago
commit 51785b6761
  1. 29
      .gitignore
  2. 16
      .hbuilderx/launch.json
  3. 29
      App.vue
  4. 29
      index.html
  5. 33
      main.js
  6. 75
      manifest.json
  7. 15
      package.json
  8. 430
      pages.json
  9. 596
      pages/all/all.vue
  10. 130
      pages/all/dynamicdetails.vue
  11. 135
      pages/index/addshoppingcart.vue
  12. 27
      pages/index/customerservice.vue
  13. 702
      pages/index/index.vue
  14. 1113
      pages/index/outsourcing/outsourcing.vue
  15. 237
      pages/index/searchfor.vue
  16. 14
      pages/index/test.vue
  17. 381
      pages/index/testcrowdsourc/companyInfo.vue
  18. 995
      pages/index/testcrowdsourc/crowdsourcingdetails.vue
  19. 2618
      pages/index/testcrowdsourc/testcrowdsourc.vue
  20. 2625
      pages/index/testcrowdsourc/testcrowdsourcChange.vue
  21. 695
      pages/index/testtraining/signup.vue
  22. 926
      pages/index/testtraining/testtraining.old2vue
  23. 2193
      pages/index/testtraining/testtraining.vue
  24. 670
      pages/index/testtraining/testtrainingold.vue
  25. 746
      pages/index/toolleasing/tooldetails.vue
  26. 26
      pages/index/toolleasing/tooldetailsold.vue
  27. 295
      pages/index/toolleasing/toolleasing.vue
  28. 19
      pages/index/toolleasing/toolleasingold.vue
  29. 63
      pages/message/message.vue
  30. 247
      pages/personal/leavemessage/index.vue
  31. 177
      pages/personal/login.vue
  32. 367
      pages/personal/mycrowdtest/mycrowdtest.vue
  33. 93
      pages/personal/mysignup/notice.vue
  34. 63
      pages/personal/mytestkit/mytestkit.vue
  35. 444
      pages/personal/ordernumber/ordernumber.vue
  36. 474
      pages/personal/personal - 副本.vue
  37. 545
      pages/personal/personal.vue
  38. 77
      pages/personal/personalresume/advantage.vue
  39. 323
      pages/personal/personalresume/basicinform.vue
  40. 245
      pages/personal/personalresume/personalresume.vue
  41. 179
      pages/personal/personalresume/projectexperience.vue
  42. 90
      pages/personal/personalresume/workexperience.vue
  43. 180
      pages/personal/phonelogin.vue
  44. 266
      pages/personal/privacy.vue
  45. 316
      pages/personal/setup/Information.vue
  46. 216
      pages/personal/setup/Withdrawal.vue
  47. 53
      pages/personal/setup/aboutus.vue
  48. 502
      pages/personal/setup/accountoverview.vue
  49. 435
      pages/personal/setup/certification.vue
  50. 61
      pages/personal/setup/guide.vue
  51. 114
      pages/personal/setup/index.vue
  52. 126
      pages/personal/setup/myreview.vue
  53. 442
      pages/personal/setup/oldcertification.vue
  54. 161
      pages/personal/setup/pclogin.vue
  55. 46
      pages/personal/setup/pcweb.vue
  56. 113
      pages/personal/setup/peixunban.vue
  57. 213
      pages/personal/setup/tranpassword.vue
  58. 168
      pages/personal/setup/transaction.vue
  59. 157
      pages/personal/setup/usepeople.vue
  60. 381
      pages/personal/userAgreemen.vue
  61. 378
      pages/shoppingtrolley/shoppingtrolley.vue
  62. 56
      pages/shoppingtrolley/shoppingtrolleyold.vue
  63. 33
      project.config.json
  64. 7
      project.private.config.json
  65. BIN
      static/crowd/PAYB.png
  66. BIN
      static/crowd/add.png
  67. BIN
      static/crowd/bankcad.png
  68. BIN
      static/crowd/commny.png
  69. BIN
      static/crowd/daxue.png
  70. BIN
      static/crowd/defaultAva.jpg
  71. BIN
      static/crowd/email.png
  72. BIN
      static/crowd/fjupload.png
  73. BIN
      static/crowd/lesftt.png
  74. BIN
      static/crowd/like.png
  75. BIN
      static/crowd/noemail.png
  76. BIN
      static/crowd/nophone.png
  77. BIN
      static/crowd/phone.png
  78. BIN
      static/crowd/reeamil.png
  79. BIN
      static/crowd/rihhj.png
  80. BIN
      static/crowd/setpx.png
  81. BIN
      static/crowd/setyr.png
  82. BIN
      static/crowd/success.png
  83. BIN
      static/crowd/tubiao1.png
  84. BIN
      static/crowd/upload.png
  85. BIN
      static/crowd/zhuanye.png
  86. BIN
      static/crowd/zhuyi.png
  87. BIN
      static/index/actcedt.png
  88. BIN
      static/index/activeall.png
  89. BIN
      static/index/activeindex.png
  90. BIN
      static/index/activemessage.png
  91. BIN
      static/index/activeperson.png
  92. BIN
      static/index/activeshopping.png
  93. BIN
      static/index/all.png
  94. BIN
      static/index/baoming.png
  95. BIN
      static/index/cedt.png
  96. BIN
      static/index/dd.png
  97. BIN
      static/index/downarrow.png
  98. BIN
      static/index/duihuazixun.png
  99. BIN
      static/index/grxx.png
  100. BIN
      static/index/gzjl.png
  101. Some files were not shown because too many files have changed in this diff Show More

29
.gitignore vendored

@ -0,0 +1,29 @@
# 忽略以下文件和目录
node_modules/
/dist/
/dev/
/.DS_Store
# 忽略UniApp编译生成的小程序相关目录
/unpackage/
# 忽略本地配置文件(请根据实际情况修改)
/manifest.local.json
# 忽略编辑器自动生成的文件
.idea/
.vscode/
# 忽略日志文件
/logs/
# 忽略临时文件
/temp/
# 忽略构建工具自动生成的文件
/build/
# 忽略npm安装的包文件
/package-lock.json
/yarn.lock

@ -0,0 +1,16 @@
{ // launch.json configurations app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/
// launchtypelocalremote, localremote
"version": "0.0",
"configurations": [{
"default" :
{
"launchtype" : "local"
},
"mp-weixin" :
{
"launchtype" : "local"
},
"type" : "uniCloud"
}
]
}

@ -0,0 +1,29 @@
<script>
export default {
onLaunch: function() {
// console.log('App Launch')
},
onShow: function() {
// console.log('App Show')
},
onHide: function() {
// console.log('App Hide')
}
}
</script>
<style lang="scss">
/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
@import "uview-ui/index.scss";
page{
width: 100%;
height: 100%;
background-color: #F5F7FA!important;
}
/*隐藏滚动条*/
::-webkit-scrollbar {
display: none;
width: 0 !important;
height: 0 !important;
}
</style>

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?30b6456829dfaf92770afef5b2f7feb2";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
</body>
</html>

@ -0,0 +1,33 @@
import App from './App'
// #ifndef VUE3
import Vue from 'vue'
import uView from "uview-ui";
// import ElementUI from "element-ui";
// import "element-ui/lib/theme-chalk/index.css";
import './uni.promisify.adaptor';
import http from "./utils/http";
// 导入并挂载全局的分享方法
import share from './utils/share.js'
Vue.mixin(share)
Vue.use(uView);
// 使用element
// Vue.use(ElementUI)
Vue.config.productionTip = false
Vue.prototype.http=http
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
// #endif
// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif

@ -0,0 +1,75 @@
{
"name" : "CloudTesting",
"appid" : "__UNI__6D30C35",
"description" : "云测试平台",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App */
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* */
"modules" : {},
/* */
"distribute" : {
/* android */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios" : {},
/* SDK */
"sdkConfigs" : {}
}
},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wx0606cba78611e49b",
"setting" : {
"urlCheck" : false,
"minified" : true,
"postcss" : true,
"es6" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "2"
}

@ -0,0 +1,15 @@
{
"name": "cloudtesting",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"crypto-js": "^4.2.0"
}
}

@ -0,0 +1,430 @@
{
"easycom": {
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
},
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/mytestkit/mytestkit",
"style" :
{
"navigationBarTitleText" : "我的测试宝",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/setup/Information",
"style" :
{
"navigationBarTitleText" : "个人信息",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/personalresume/personalresume",
"style" :
{
"navigationBarTitleText" : "个人简历",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/personalresume/advantage",
"style" :
{
"navigationBarTitleText" : "我的优势",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/personalresume/workexperience",
"style" :
{
"navigationBarTitleText" : "",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/privacy",
"style" :
{
"navigationBarTitleText" : "隐私政策",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/userAgreemen",
"style" :
{
"navigationBarTitleText" : "用户协议",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/personalresume/projectexperience",
"style" :
{
"navigationBarTitleText" : "",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/setup/index",
"style" :
{
"navigationBarTitleText" : "设置",
"navigationBarBackgroundColor": "#284CD1"
}
},{
// "path": "pages/all/all",
// "style": {
// "navigationBarTitleText": "全部",
// "navigationBarBackgroundColor": "#284CD1"
// }
},{
// "path": "pages/shoppingtrolley/shoppingtrolley",
// "style": {
// "navigationBarTitleText": "购物车",
// "navigationBarBackgroundColor": "#284CD1"
// }
},{
"path": "pages/personal/personal",
"style": {
"navigationBarTitleText": "我的",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
// "path" : "pages/index/searchfor",
// "style" :
// {
// "navigationBarTitleText" : "搜索",
// "navigationBarBackgroundColor": "#284CD1"
// }
},
{
// "path" : "pages/index/addshoppingcart",
// "style" :
// {
// "navigationBarTitleText" : "加入购物车",
// "navigationBarBackgroundColor": "#284CD1"
// }
},{
"path" : "pages/personal/mysignup/notice",
"style" :
{
"navigationBarTitleText" : "我的报名",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/ordernumber/ordernumber",
"style" :
{
"navigationBarTitleText" : "我的订单",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/index/testtraining/testtraining",
"style" :
{
"navigationBarTitleText" : "培训服务",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/index/outsourcing/outsourcing",
"style" :
{
"navigationBarTitleText" : "人力服务",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/index/toolleasing/toolleasing",
"style" :
{
"navigationBarTitleText" : "工具服务",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/index/toolleasing/tooldetails",
"style" :
{
"navigationBarTitleText" : "工具详情",
"navigationBarBackgroundColor": "#284CD1",
"app-plus":{
"scrollIndicator":"none"
}
}
},
{
"path" : "pages/index/testcrowdsourc/testcrowdsourc",
"style" :
{
"navigationBarTitleText" : "众包服务",
"navigationBarBackgroundColor": "#284CD1"
// "enablePullDownRefresh": true, //true
// "onReachBottomDistance":100 // px
}
},
{
"path" : "pages/index/testcrowdsourc/crowdsourcingdetails",
"style" :
{
"navigationBarTitleText" : "",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/index/customerservice",
"style" :
{
"navigationBarTitleText" : "客服",
"navigationBarBackgroundColor": "#284CD1"
}
},{
// "path" : "pages/all/dynamicdetails",
// "style" :
// {
// "navigationBarTitleText" : "动态详情",
// "navigationBarBackgroundColor": "#284CD1"
// }
},{
"path" : "pages/personal/login",
"style" :
{
"navigationBarTitleText" : "登录关键测试宝",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/phonelogin",
"style" :
{
"navigationBarTitleText" : "关键测试宝",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/index/testtraining/signup",
"style" :
{
"navigationBarTitleText" : "",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/leavemessage/index",
"style" :
{
"navigationBarTitleText" : "我的留言",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/setup/aboutus",
"style" :
{
"navigationBarTitleText" : "关于我们",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/setup/certification",
"style" :
{
"navigationBarTitleText" : "实名认证",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/message/message",
"style" :
{
"navigationBarTitleText" : "消息中心",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/setup/pcweb",
"style" :
{
"navigationBarTitleText" : "关键测试宝",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/mycrowdtest/mycrowdtest",
"style" :
{
"navigationBarTitleText" : "我的众包",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/setup/transaction",
"style" :
{
"navigationBarTitleText" : "交易记录",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/setup/tranpassword",
"style" :
{
"navigationBarTitleText" : "交易密码",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/setup/pclogin",
"style" :
{
"navigationBarTitleText" : "设置密码",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/setup/Withdrawal",
"style" :
{
"navigationBarTitleText" : "金额提现",
"navigationBarBackgroundColor": "#284CD1"
}
},{
"path" : "pages/personal/setup/accountoverview",
"style" :
{
"navigationBarTitleText" : "",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path" : "pages/personal/personalresume/basicinform",
"style" :
{
"navigationBarTitleText" : "基本信息",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/index/test",
"style": {
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/personal/setup/peixunban",
"style": {
"navigationBarTitleText": "培训班",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/personal/setup/usepeople",
"style": {
"navigationBarTitleText": "用人需求",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/personal/setup/myreview",
"style": {
"navigationBarTitleText": "我的评价",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/index/testcrowdsourc/companyInfo",
"style": {
"navigationBarTitleText": "发布者主页",
"navigationBarBackgroundColor": "#284CD1"
}
},
{
"path": "pages/personal/setup/guide",
"style": {
"navigationBarTitleText": "PC端使用指南",
"navigationBarBackgroundColor": "#284CD1"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color" : "#7A7E83",
// "selectedColor" : "#7A7E83",
"selectedColor" : "#1578ED",
"borderStyle" : "black",
"backgroundColor" : "#F8F8F8",
"list":[
{
"pagePath" : "pages/index/index",
"iconPath" : "static/index/index.png",
"selectedIconPath" : "static/index/activeindex.png",
"text" : "首页"
},
// {
// "pagePath" : "pages/message/message",
// "iconPath" : "static/index/message.png",
// "selectedIconPath" : "static/index/activemessage.png",
// "text" : "消息"
// },
{
"pagePath" : "pages/index/testcrowdsourc/testcrowdsourc",
"iconPath" : "static/index/cedt.png",
"selectedIconPath" : "static/index/actcedt.png",
"text" : "众包大厅"
},
// {
// "pagePath" : "pages/all/all",
// "iconPath" : "static/index/all.png",
// "selectedIconPath" : "static/index/activeall.png",
// "text" : "全部"
// },
// {
// "pagePath" : "pages/shoppingtrolley/shoppingtrolley",
// "iconPath" : "static/index/shopping.png",
// "selectedIconPath" : "static/index/activeshopping.png",
// "text" : "购物车"
// },
{
"pagePath" : "pages/personal/personal",
"iconPath" : "static/index/person.png",
"selectedIconPath" : "static/index/activeperson.png",
"text" : "我的"
}
]
},
"uniIdRouter": {}
}

@ -0,0 +1,596 @@
<template>
<view class="content">
<!-- <image class="logo" src="http://image.keyitest.cn/static/logo.png"></image> -->
<!-- <view class="text-area">
<u-tabs-swiper :list="tablist" :scrollable="false" @change="taclick" :current="current" active-color="#1578ED" ref="tabs" ></u-tabs-swiper>
</view>
-->
<view style="width:23vw;position: fixed;">
<view class="activestu" v-if="current==0" style="background-color: #FFFFFF;"><view class="tabls"></view><p>开源专区</p></view>
<view class="activestua" v-else @click="taclick('0')"><p>开源专区</p></view>
<view class="activestu" v-if="current==1" style="background-color: #FFFFFF;"><view class="tabls"></view><p>CNAS服务</p></view>
<view class="activestua" v-else @click="taclick('1')"><p>CNAS服务</p></view>
<view class="activestu" v-if="current==2" style="background-color: #FFFFFF;"><view class="tabls"></view><p>GJB5000B</p></view>
<view class="activestua" v-else @click="taclick('2')"><p>GJB5000B</p></view>
<view class="activestu" v-if="current==3" style="background-color: #FFFFFF;"><view class="tabls"></view><p>行业动态</p></view>
<view class="activestua" v-else @click="taclick('3')"><p>行业动态</p></view>
<view class="activestu" v-if="current==4" style="background-color: #FFFFFF;"><view class="tabls"></view><p>关于我们</p></view>
<view class="activestua" v-else @click="taclick('4')"><p>关于我们</p></view>
</view>
<view v-if="current==0" class="tabledetails" >
<img class="logobg" src="http://image.keyitest.cn/static/all/banner.png" alt="" />
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/10.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">Codacy</p>
<p style="margin:7px 0;line-height:18px;">Codacy是一款企业级安全保障工具能够完成静态分析安全和性能检查代码重复率代码复杂性和测试覆盖率等分析...</p>
<p>
<span>类型源代码扫描工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">https://www.codacy.com/</p> -->
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/1.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">LGTM</p>
<p style="margin:7px 0;line-height:18px;">LGTM是一款开源且高效的代码审查工具可通过变体分析检查代码中的常见漏洞与披露CVE同时支持几乎所有主...</p>
<p>
<span>类型源代码扫描工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">https://lgtm.com/</p> -->
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/2.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">SonarQube</p>
<p style="margin:7px 0;line-height:18px;">SonarQube 是最著名的静态代码分析工具之一旨在清理并保护 DevOps 工作流及代码通过对代码质量的持续分析, .</p>
<p>
<span>类型源代码扫描工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">https://www.sonarqube.org/</p> -->
<u-link href="https://uviewui.com/" text="打开uView UI文档" color="#19be6b" line-color="#19be6b"></u-link>
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/3.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">JUnit</p>
<p style="margin:7px 0;line-height:18px;">JUnit是一个为Java编程语言设计的开源单元测试框架 Kent Beck 和Erich Gamma建立它是单元测试框</p>
<p>
<span>类型源代码扫描工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">https://junit.org/junit5/</p> -->
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/4.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">TestNG</p>
<p style="margin:7px 0;line-height:18px;">TestNG是另一个为Java编程语言设计的开源单元测试框架是一个受JUnit和NUnit启发而来的测试框架但它引入了一些...</p>
<p>
<span>类型源代码扫描工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">https://testng.org/</p> -->
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/5.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">GoogleTest</p>
<p style="margin:7px 0;line-height:18px;">GoogleTest是一个跨平台的(LiunxMac OS XWindows Cygwin Windows CE and Symbian ) C++单元测试框架...</p>
<p>
<span>类型源代码扫描工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">https://github.com/google/goog.../</p> -->
<u-link href="https://uviewui.com/" text="打开uView UI文档" color="#19be6b" line-color="#19be6b"></u-link>
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/6.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">Pytest</p>
<p style="margin:7px 0;line-height:18px;">pytest是一个非常成熟的全功能的支持Python语言的单元自动化测试框架简单灵活容易上手支持参数化能够支持 ...</p>
<p>
<span>类型单元测试工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">http://pytest.org/</p> -->
<u-link href="https://uviewui.com/" text="打开uView UI文档" color="#19be6b" line-color="#19be6b"></u-link>
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/7.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">Unittest</p>
<p style="margin:7px 0;line-height:18px;">unittest是Python自带的一个单元测试框架无需安装使用简便引入包 import unittest 即可使用unittest单元测试框...</p>
<p>
<span>类型单元测试工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">http://docs.python.org/zh-cn/3/....</p> -->
<u-link href="https://uviewui.com/" text="打开uView UI文档" color="#19be6b" line-color="#19be6b"></u-link>
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/8.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">JMockit</p>
<p style="margin:7px 0;line-height:18px;">JMockit是一个用于Java语言单元测试的开源Mock工具包含了工具和API集合Jmockit可以和junit和TestNG配合使用...</p>
<p>
<span>类型源代码扫描工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">http://jmockit.org/</p> -->
<u-link href="https://uviewui.com/" text="打开uView UI文档" color="#19be6b" line-color="#19be6b"></u-link>
</view>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:23px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/all/9.png" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">Jacoco</p>
<p style="margin:7px 0;line-height:18px;">Jacoco是一个开源的免费Java代码覆盖工具由EclEmma创建其使用方法很灵活可以嵌入到AntMaven中可以...</p>
<p>
<span>类型源代码扫描工具</span>
<p style="margin-top: 5px;">
<span>当前版本</span>
<span style="color: #FD461A">V7.92</span>
</p>
</p>
<!-- <p style="color: #1578ED;font-size: 25rpx;margin:7px 0">http://jmockit.org/</p> -->
</view>
</view>
<!-- <view class="opensq">
<img src="http://image.keyitest.cn/static/all/11.png" alt="">
<view style="width: 50vw;">
<p>更多内容请点击进入官网了解详情</p>
<p style="color: #1578ED;margin:3px 0">http://218.30.67.85:19212/openSource</p>
</view>
</view> -->
<view style="height:10px;"></view>
</view>
<view v-if="current==1" class="tabledetails">
<img class="logobg" src="http://image.keyitest.cn/static/all/CNAS/bannercnas.png" alt="" />
<img class="titlebg" src="http://image.keyitest.cn/static/all/CNAS/1.png" alt="">
<p class="aboutp">北京关键科技股份有限公司测评实验室隶属于北京关键科技股份有限公司成立于2017年5月8日接受北京关键科技股份有限公司
等上级部门的指导并于2017年8月23号获取中国合格评定国家认可委员会CNAS注册号CNAS L10233和中国国防科技工
业实验室认可委员DILAC
</p>
<p class="aboutp">
实验室在职职工40余人其中具有软件测试及实验室管理经验人员9人有丰富软件测试技术及
实验室管理能力人员15人拥有测试平台服务器PC机等仪器设备以及各类软件测试工具固定资产原值为人民币近600多万元
实验室工作及检测区域总面积200多平方米
</p>
<img class="titlebg" style="margin-top:20px;" src="http://image.keyitest.cn/static/all/CNAS/2.png" alt="">
<p class="aboutp">实验室技术力量雄厚拥有符合相关标准和规程要求的检测软件设备设施和环境条件</p>
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;">
<view class="bureau">
<img src="http://image.keyitest.cn/static/all/CNAS/11.png" alt="">
<p >军队/军工院所</p>
<view class="suline"></view>
</view>
<view class="bureau">
<img src="http://image.keyitest.cn/static/all/CNAS/5.png" alt="">
<p >政府事业单位</p>
<view class="suline" style="background: #EC9D13;"></view>
</view>
<view class="bureau">
<img src="http://image.keyitest.cn/static/all/CNAS/6.png" alt="">
<p >银行金融</p>
<view class="suline" style="background: #0AC991;"></view>
</view>
<view class="bureau">
<img src="http://image.keyitest.cn/static/all/CNAS/7.png" alt="">
<p >银行金融</p>
<view class="suline" style="background: #F93737;"></view>
</view>
</view>
<img class="titlebg" style="margin:35px 0 20px 0;" src="http://image.keyitest.cn/static/all/CNAS/3.png" alt="">
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;">
<img class="successal" src="http://image.keyitest.cn/static/all/CNAS/8.png" alt="">
<img class="successal" src="http://image.keyitest.cn/static/all/CNAS/9.png" alt="">
<img class="successal" src="http://image.keyitest.cn/static/all/CNAS/10.png" alt="">
<img class="successal" src="http://image.keyitest.cn/static/all/CNAS/12.png" alt="">
<img class="successal" src="http://image.keyitest.cn/static/all/CNAS/15.png" alt="">
<img class="successal" src="http://image.keyitest.cn/static/all/CNAS/13.png" alt="">
</view>
<img class="titlebg" style="margin:35px 0 20px 0;" src="http://image.keyitest.cn/static/all/CNAS/4.png" alt="">
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;">
<view class="statictool">
<img src="http://image.keyitest.cn/static/all/CNAS/14.png" alt="">
<p >静态测试工具</p>
</view>
<view class="statictool">
<img src="http://image.keyitest.cn/static/all/CNAS/16.png" alt="">
<p >性能测试工具</p>
</view>
<view class="statictool">
<img src="http://image.keyitest.cn/static/all/CNAS/17.png" alt="">
<p >静态测试工具</p>
</view>
<view class="statictool">
<img src="http://image.keyitest.cn/static/all/CNAS/18.png" alt="">
<p >性能测试工具</p>
</view>
<view class="statictool">
<img src="http://image.keyitest.cn/static/all/CNAS/19.png" alt="">
<p >静态测试工具</p>
</view>
<view class="statictool">
<img src="http://image.keyitest.cn/static/all/CNAS/20.png" alt="">
<p >性能测试工具</p>
</view>
</view>
<!-- <view class="opensq" style="margin-top: 20px;">
<img src="http://image.keyitest.cn/static/all/11.png" alt="">
<view style="width: 50vw;">
<p>更多内容请点击进入官网了解详情</p>
<p style="color: #1578ED;margin:3px 0">http://218.30.67.85:19212/soion/CNAS</p>
</view>
</view> -->
<view style="height:10px;"></view>
</view>
<view v-if="current==2" class="tabledetails">
<img class="logobg" src="http://image.keyitest.cn/static/all/GJB/banner.png" alt="" />
<img class="titlebg" src="http://image.keyitest.cn/static/all/GJB/9.png" alt="">
<p class="aboutp">公司拥有专业咨询和技术实施团队已协助40多家军工企业通过GJB5000BL2L3认证公司提供的GJB5000B咨询服务会对
客户单位的GJB5000BL2L3级认证过程进行总体规划确定管理体系的总体框架结合企业业务特点软件过程改进的实际情况和软件能力的
现状等因素协助制定管理体系文件建立体系运行管理机构保障贯标和过程改进工作达到服务目标
</p>
<img class="titlebg" style="margin:35px 0 -10px 0;" src="http://image.keyitest.cn/static/all/GJB/10.png" alt="">
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;">
<view class="bureau">
<img src="http://image.keyitest.cn/static/all/GJB/1.png" alt="">
<p style="font-size: 28rpx;text-align: left">进行理念和实务培训帮助员工提高过程管理意识</p>
</view>
<view class="bureau">
<img src="http://image.keyitest.cn/static/all/GJB/2.png" alt="">
<p style="font-size: 28rpx;text-align: left">建立适合企业管理要求的软件研制过程管理体系</p>
</view>
<view class="bureau">
<img src="http://image.keyitest.cn/static/all/GJB/3.png" alt="">
<p style="font-size: 28rpx;text-align: left">跟踪指导企业软件项目研制工作过程持续提升能力</p>
</view>
<view class="bureau">
<img src="http://image.keyitest.cn/static/all/GJB/4.png" alt="">
<p style="font-size: 28rpx;text-align: left">通过GJB5000B 认证</p>
</view>
</view>
<img class="titlebg" style="margin:35px 0 20px 0;" src="http://image.keyitest.cn/static/all/GJB/11.png" alt="">
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;align-items: center;">
<view class="statictosol">
<img src="http://image.keyitest.cn/static/all/GJB/5.png" alt="">
<p style="color:#1A1A1A;font-size: .9rem;font-weight: bold;">01</p>
<p>培训及诊断分析阶段</p>
</view>
<img style="width:12rpx;height: 16rpx;" src="http://image.keyitest.cn/static/all/GJB/12.png" alt="">
<view class="statictosol">
<img src="http://image.keyitest.cn/static/all/GJB/6.png" alt="">
<p style="color:#1A1A1A;font-size: .9rem;font-weight: bold;">02</p>
<p>过程定义阶段</p>
</view>
<view class="statictosol">
<img src="http://image.keyitest.cn/static/all/GJB/6.png" alt="">
<p style="color:#1A1A1A;font-size: .9rem;font-weight: bold;">03</p>
<p>过程实施阶段</p>
</view>
<img style="width:12rpx;height: 16rpx;" src="http://image.keyitest.cn/static/all/GJB/12.png" alt="">
<view class="statictosol">
<img src="http://image.keyitest.cn/static/all/GJB/6.png" alt="">
<p style="color:#1A1A1A;font-size: .9rem;font-weight: bold;">04</p>
<p>评价阶段</p>
</view>
</view>
<!-- <view class="opensq" style="margin-top: 20px;">
<img src="http://image.keyitest.cn/static/all/11.png" alt="">
<view style="width: 50vw;">
<p>更多内容请点击进入官网了解详情</p>
<p style="color: #1578ED;margin:3px 0">http://218.30.67.:12/solution/GJB</p>
</view>
</view> -->
<view style="height:10px;"></view>
</view>
<view v-if="current==3" class="tabledetails">
<img class="logobg" src="http://image.keyitest.cn/static/all/hang/banner.png" alt="" />
<view style="display: flex;justify-content: space-between;margin-bottom:23px;"
v-for="(item,key) of newlist" :key="key" @click="hangdeyails(item.id,item.picWeb)">
<!-- <img v-if="item.title=='如何组织一次成功的全链路压测'" class="deyalimg" style="width:20vw;" src="http://www.keyitest.cn/assets/dynamic/dydeau.png" alt="" /> -->
<img class="deyalimg" style="width:20vw;" :src="item.picWeb?item.picWeb:'http://www.keyitest.cn/assets/dynamic/dydeau.png'" alt="">
<view style="color:#808080;font-size:22rpx;width:53vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;line-height: 22px;">{{item.title | tiilhange}}</p>
<p style="margin:7px 0;color: #808080;">{{item.summary | tiilnamechange}}</p>
<p style="color: #BFBFBF;">发布时间{{item.ptime.slice(0,10)}}</p>
</view>
</view>
<view style="height:10px;"></view>
</view>
<view v-if="current==4" class="tabledetails">
<img class="logobg" src="http://image.keyitest.cn/static/all/zbout/banner.png" alt="" />
<img class="titlebg" src="http://image.keyitest.cn/static/all/zbout/1.png" alt="">
<p class="aboutp">
北京关键科技股份有限公司成立于2005年总部位于北京昌平未来科学城国电投研究院园区内目前在西安上海武汉重庆成都及广州
均有分公司及办事处我公司是一家以自主可控产品研制软件测试技术研究软件工程咨询服务和系统集成云平台大数据信息安全为一体的国家级高新技术企业
公司以自主研发软件测试软件工程工具为主体软件定制开发云平台大数据人工智能为两翼面向军队及军工各系统政府
主管部门和高等院校及科研院所国家能源交通医疗教育与金融保险等行业提供软件工程软件测试信息安全云平台大数据等方面的产品咨询服务和技术智力支撑
公司拥有专业研发团队和专家组承研了多项重大软件专项预研课题和测试质量试训等大数据项目公司自研产品已进入国家和军方自主可控产品名录产品覆盖软件全生
命周期各阶段形成了完整的工具生态链各产品已完成平台化集成推出云测试平台软件集成研发一体化平台
</p>
<p class="aboutp">
关键科技18年来坚守质量第一服务至上的核心价值观不忘初心满怀爱国拥军济天下的情怀长期助力军工企业发展服务的客户包括火箭军
战略支源部队 军事科学研究科中国融通 中国航空中国航天中国船舶中国电子中国核工业中国兵器中科院等
</p>
<p class="aboutp">
为员工服务为用户奋斗是关键科技的司训宗旨关键科技的一切来自于员工为员工服务源自于用户为用户奋斗是关键科技事业持续发展的必然结果为员工服务是为实现为用户奋斗准备有生力量为用户奋斗是为实现为员工服务提供再生能量
两者有机统一互为支撑
</p>
<p class="aboutp">
个人为事业服务事业为社会服务个人的服务是超报酬的社会的服务是超经济的是公司理念的价值链公司为员工增值员工为事业创造价值事业为社会创造价值
新的价值所形成的新的经济会超越并提升现有的经济
</p>
<p class="aboutp">
谋关键的事创关键的业做关键的人何为关键的事何为关键的业又何为关键的人呢关键的事是一个战术问题对内推动变革保持价值观一致实行有效沟通保证信息对称员工价值增值创造价值再把价值贡献给社会
</p>
<img class="titlebg" style="margin:20px 0" src="http://image.keyitest.cn/static/all/zbout/2.png" alt="">
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;">
<img class="successal" style='height: 11vw;' src="http://image.keyitest.cn/static/all/zbout/4.png" alt="">
<img class="successal" style='height: 11vw;' src="http://image.keyitest.cn/static/all/zbout/5.png" alt="">
<img class="successal" style='height: 11vw;' src="http://image.keyitest.cn/static/all/zbout/6.png" alt="">
<img class="successal" style='height: 11vw;' src="http://image.keyitest.cn/static/all/zbout/7.png" alt="">
<img class="successal" style='height: 11vw;' src="http://image.keyitest.cn/static/all/zbout/8.png" alt="">
<img class="successal" style='height: 11vw;' src="http://image.keyitest.cn/static/all/zbout/9.png" alt="">
</view>
<img class="titlebg" style="margin:20px 0" src="http://image.keyitest.cn/static/all/zbout/3.png" alt="">
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;">
<img class="honor" src="http://image.keyitest.cn/static/all/zbout/19.png" alt="">
<img class="honor" src="http://image.keyitest.cn/static/all/zbout/17.png" alt="">
<img class="honor" src="http://image.keyitest.cn/static/all/zbout/18.png" alt="">
<img class="honor" src="http://image.keyitest.cn/static/all/zbout/16.png" alt="">
<img class="honor" src="http://image.keyitest.cn/static/all/zbout/12.png" alt="">
<img class="honor" src="http://image.keyitest.cn/static/all/zbout/14.png" alt="">
<img class="honor" src="http://image.keyitest.cn/static/all/zbout/13.png" alt="">
<img class="honor" src="http://image.keyitest.cn/static/all/zbout/15.png" alt="">
</view>
<!-- <view style="height:10px;"></view> -->
</view>
</view>
</template>
<script>
export default {
data() {
return {
tablist:[{name:'开源专区'},{name:'CNAS服务'},{name:'GJB5000B'},{name:'行业动态'},{name:'关于我们'}],
current:0,
newlist:[],//
}
},
onLoad() {
this.http.quickGet('/news/newsList?pageNum=1&pageSize=100').then(res=>{
let newlistdata=res.data.rows
this.newlist=newlistdata.filter(item=>item.id!=127)
console.log('行业动态',res)
})
},
filters:{
tiilnamechange(value){
if (!value) return ''
if(value.length>50){
return value.slice(0, 50) + '...'
}
return value
},
tiilhange(value){
if (!value) return ''
if(value.length>10){
return value.slice(0, 10) + '...'
}
return value
},
},
methods: {
taclick(item){
this.current = item;
console.log('item', item);
},
hangdeyails(id,picWeb){
uni.navigateTo({
url:`./dynamicdetails?id=${id}&picWeb=${picWeb}`
})
}
}
}
</script>
<style>
.content {
display: flex;
/* align-items: center;
justify-content: center; */
}
.activestu{
height:60px;
display: flex;
line-height:60px;
font-size: .9rem;
color: #1578ED;
}
.activestua{
height:60px;
line-height:60px;
text-align: center;
font-size: .8rem;
}
.tabls{
width: 6rpx;
height: 32rpx;
background: #1578ED;
border-radius: 3rpx;
display: inline-block;
margin-right: 10px;
margin-top:22px;
}
/* .text-area {
display: flex;
justify-content: center;
} */
.tabledetails{
width:76vw;
/* height: 100vh; */
background-color: #FFFFFF;
padding:13px;
margin-left:23vw ;
}
.logobg {
width:100%;
height:24vw;
margin-bottom: 15px;
}
.titlebg {
width:100%;
height:4.2vw;
margin:5px 0 15px 0;
object-fit: cover;
/* max-width: 100%;
max-height: 100%;
width: auto;
height: auto; */
}
.deyalimg{
width: 15vw;
height: 15vw;
margin-right: 10px;
}
.opensq{
display: flex;
justify-content: space-between;
background: #ECF3FD;
border: 1px solid #96C3F7;
border-radius: 10rpx;
padding: 28rpx 40rpx 28rpx 18rpx;
color: #808080;
font-size: .7rem;
}
.opensq img{
width:9vw;
height:9vw;
margin-right:5px;
}
.aboutp{
font-size:24rpx;
color: #808080;
line-height:43rpx;
text-indent:26px;
}
.bureau{
width: 49%;
/* height: 210rpx; */
background: #FFFFFF;
box-shadow: 0rpx 1rpx 8rpx 0rpx rgba(47,48,56,0.1);
border-radius: 10rpx;
text-align: center;
margin-top: 20px;
padding: 10px 5px;
}
.bureau img{
width:28vw;
height:15vw;
margin:10px auto;
}
.bureau p{
font-size:30rpx;
color: #4D4D4D;
}
.suline{
width: 252rpx;
height: 4rpx;
background: #2D85F9;
border-radius: 10rpx;
margin-top: 10px;
}
.successal{
width:33vw;
height:10vw;
margin-bottom: 13px;
/* margin:10px; */
}
.statictool{
width: 49%;
height:180rpx;
background: #FFFFFF;
box-shadow: 0rpx 1rpx 8rpx 0rpx rgba(47,48,56,0.1);
border-radius: 10rpx;
text-align: center;
margin-top: 20px;
}
.statictool img{
width:10vw;
height:10vw;
margin:10px auto;
}
.statictool p{
font-size:30rpx;
color: #4D4D4D;
}
.statictosol{
width:45%;
height:116px;
background: #FFFFFF;
/* box-shadow: 0rpx 1rpx 8rpx 0rpx rgba(47,48,56,0.1); */
border-radius: 10rpx;
text-align: center;
margin-top: 20px;
}
.statictosol img{
width:10vw;
height:10vw;
margin:10px auto;
}
.statictosol p{
font-size:.8rem;
color:#808080;
margin-bottom: 5px;
}
.honor{
width: 33vw;
height:24vw;
margin-bottom: 13px;
}
</style>

@ -0,0 +1,130 @@
<template>
<view class="schedule">
<view v-if="industryinform">
<view class='dytasl' >
<p v-if="industryinform">{{industryinform.title}}</p>
<p v-if="industryinform" style="color: #BFBFBF;font-size: 26rpx;font-weight: 500;margin:10px 0;">{{industryinform.ptime}} 来源{{industryinform.source}}</p>
<!-- <img src="http://image.keyitest.cn/static/all/hang/7.png" alt=""> -->
<img style="height:95vw;" v-if="industryinform.title=='美国网络安全企业向阿联酋出售iMessage漏洞利用工具'" src="https://www.keyitest.cn/prod-api/profile/article/wKgBaWFnpNSARmDiAAGvxfWHWMw450.png" alt="">
<!-- <img v-else :src="logoimg?logoimg:'http://www.keyitest.cn/assets/dynamic/dydeau.png'" alt=""> -->
</view>
<view v-if="industryinform.content">
<!-- <div class="article-body" v-html='industryinform.content'></div> -->
<rich-text class="article-body" :nodes="industryinform&&industryinform.content | filtersRichText"></rich-text>
</view>
</view>
<u-divider v-else bg-color='transparent'>加载中...</u-divider>
<view style="height:20px;"></view>
</view>
</template>
<script>
export default {
data() {
return {
// industryinform:{ptime:'',source:'',content:'',title:''},
industryinform:null,
logoimg:''
}
},
filters: {
filtersRichText(html) { //
if(html){
let newContent = html.replace(/<img[^>]*>/gi, (match, capture)=>{
match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
return match;
});
newContent = newContent.replace(/style="[^"]+"/gi, (match, capture)=>{
match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
return match;
});
// let newContentsss = html.replace(/<span[^>]*>/gi, (match, capture)=>{
// console.log('sss---',match, capture)
// if(capture==12428 || capture==12693){
// match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
// match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
// match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
// }
// return match;
// });
newContent = newContent.replace(/<br[^>]*\/>/gi, '');
newContent = newContent.replace(/\<img/gi,
'<img style="max-width:100%;height:auto;display:inline-block;margin:10rpx auto;"');
// newContentsss = newContentsss.replace(/\<span/gi,
// '<span style="word-wrap:break-word;width:90vw;display:block;margin:10rpx auto;"');newContentsss;
return newContent;
}
}
},
onLoad(options) {
console.log('options--',options)
this.logoimg=options.picWeb
this.http.quickGet(`/news/${options.id}`).then(res=>{
this.industryinform=res.data
console.log('咨询详情',res.data)
// this.industryinform.content=content.replace(/\<span/gi, '<span style="color:#BFBFBF" ');
})
},
methods: {
}
}
</script>
<style>
page{
background-color: rgb(255, 255, 255)!important;
}
.schedule{
width:90vw;
margin:16px 5vw 20px 5vw;
}
.dytasl{
display: flex;
align-items: center;
flex-direction: column;
text-align: center;
}
.dytasl p{
font-size: 34rpx;
font-weight: bold;
color: #1A1A1A;
}
.dytasl img{
max-width:100%;
object-fit:contain;
/* height:34vw; */
margin:10px auto;
}
.article-body{
line-height: 26px!important;
/* width: 100%; */
/* color:rgb(17, 16, 16)!important; */
}
.detailsp{
font-size:24rpx;
color:#666666;
line-height:43rpx;
padding:5px 10px!;
}
.article-body p {
font-size: 34rpx!important;
color: #666666!important;
line-height: 35rpx!important;
background-color:transparent!important;
}
.article-body>>> span {
font-size: 34rpx!important;
color: #666666!important;
line-height: 35rpx!important;
background-color:transparent!important;
}
</style>

@ -0,0 +1,135 @@
<template>
<view >
<img class="logobg" src="http://image.keyitest.cn/g1.png" alt="" />
<img class="logoauto" src="http://image.keyitest.cn/static/index/g2.png" alt="" />
<view style="background-color: #FFFFFF;">
<view class="schedule">
<view style='display:flex;justify-content:space-between;margin:10rpx 0 10px 0;'>
<p style="color:#FD461A;">
<span>¥ </span>
<span style="font-size:40rpx;margin-left:10rpx;font-weight: 800;">1200</span>
</p>
<p style="color:#999999;font-size:24rpx;">X</p>
</view>
<view class="graycol" style="font-size:26rpx;">您已选择{{cartnumber}} </view>
</view>
<view class="horizontalline"></view>
<view class="schedule">
<view class="commodity">
<p>商品名称</p>
<p style="color:#333333;">Kinterface接口测试工具-软件版</p>
</view>
<view class="commodity">
<p>商品规格</p>
<p style="color:#333333;">按月</p>
</view>
<view class="commodity">
<p>交付方式</p>
<p style="color:#333333;">License</p>
</view>
<view class="commodity">
<p>应付金额</p>
<p style="color:#FD461A;margin-top: -3px;">
<span>¥ </span>
<span style="font-size:40rpx;margin-left:10rpx;font-weight: 800;">1200</span>
</p>
</view>
<view class="commodity">
<p>购买数量</p>
<u-number-box v-model="cartnumber" @change="valChange"></u-number-box>
<!-- <p style="color:#333333 ;">Kinterface接口测试工具-软件版</p> -->
</view>
</view>
</view>
<view class="submitt">
<view class="button-g" style="background:#FFFFFF;border: 1px solid #1578ED;color: #1578ED;margin-left:0" @click="shopping('rests')">重置</view>
<view class="button-g" @click="shopping('cart')">加入购物车</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
cartnumber: 0
}
},
methods: {
valChange(e) {
console.log('当前值为: ' + e.value)
},
shopping(type){
if(type=='rests'){
this.cartnumber=0
}else{
console.log('加入购物车: ')
uni.switchTab({
url:'/pages/shoppingtrolley/shoppingtrolley'
})
}
}
}
}
</script>
<style>
.logobg {
width:100vw;
object-fit: contain;
position: relative;
/* z-index:0; */
}
.logoauto{
width:261rpx;
height:261rpx;
object-fit: contain;
position: absolute;
top:8%;
left: 30%;
}
.schedule{
width:94vw;
margin:16px 3vw 20px 3vw;
}
.graycol{
color: #999999
}
.horizontalline{
width:100vw;
height:.5rpx;
margin: 10px 0;
background-color: #EBEBEB;
}
.commodity{
display: flex;
color:#808080 ;
font-size:30rpx;
margin:20px 0;
}
.submitt {
height:70px;
/* line-height: 55px; */
/* text-align: center; */
font-size: 20px;
background: #FFFFFF;
box-shadow: 0rpx 2rpx 24rpx 0rpx rgba(7,70,144,0.3);
margin-top:60px;
position: fixed;
bottom: 0;
width: 100vw;
padding: 10px 20px;
display: flex;
}
.button-g{
width:46vw;
height: 70rpx;
background: linear-gradient(90deg, #FF8600, #FE2B2B);
border-radius: 35rpx;
text-align: center;
line-height: 70rpx;
color: #FFFFFF;
font-size: 30rpx;
margin-left:13px;
}
</style>

@ -0,0 +1,27 @@
<template>
<view>
<web-view :src="externalLink" />
</view>
</template>
<script>
export default {
data() {
return {
externalLink:''
}
},
onLoad(options) {
//
console.log('url---',options)
this.externalLink = options.url || '';
},
methods: {
}
}
</script>
<style>
</style>

@ -0,0 +1,702 @@
<template>
<view>
<!-- <button type="primary" open-type="contact">在线咨询</button> -->
<!-- <button type="primary" @click="test">在线咨询</button> -->
<!-- class="contents" :actionStyle="customActionStyle"actionText="搜索" @custom='serchfot'-->
<view class="logobg">
<!-- <view style="display: flex;justify-content: space-between;align-items: center;">
<u-search class="keyewar" v-model='keywares' placeholder='输入搜索内容' :clearabled='true' clear='cleardata' :show-action="false" :animation="false"></u-search>
<view class="customActionStyle" @click="serchfot">搜索</view>
</view> -->
</view>
<!-- <u-input class="keywar" />
<div style="display: flex;justify-content: space-between;">
<view style="display:flex;align-items: center;">
<img style="width:30rpx;height:30rpx;margin-left: 10px;" src="http://image.keyitest.cn/static/index/ss.png">
<text style="color:#999999;margin:0 10px;font-size:14px">输入搜索内容</text>
<view class="sos" @click="serchfot">搜索</view>
</div> -->
<!-- <img src="src="http://image.keyitest.cn/static/index/ss.png" alt=""> -->
<view class="fouassociation">
<view class="association" @click="gametype('tool')">
<img src="http://image.keyitest.cn/static/index/hzuli.png" alt="">
<text>工具服务</text>
<!-- <view class="tostnew">
<image class="tostnewimg" src="../../static/index/toast.png" mode=""></image>
<text class="tostnewtext">即将上线</text>
</view> -->
</view>
<view class="association" @click="gametype('test')">
<img src="http://image.keyitest.cn/static/index/hstudu.png" alt="">
<text>培训服务</text>
<!-- <view class="tostnew">
<image class="tostnewimg" src="../../static/index/toast.png" mode=""></image>
<text class="tostnewtext">即将上线</text>
</view> -->
</view>
<view class="association" @click="gametype('crowd')">
<img src="http://image.keyitest.cn/static/index/hzhongb.png" alt="">
<text>众包服务</text>
</view>
<view class="association" @click="gametype('human')">
<img src="http://image.keyitest.cn/static/index/hhuman.png" alt="">
<text>人才服务</text>
</view>
</view>
<view class='schedule'>
<!-- 测试工具 -->
<view style='display:flex;justify-content:space-between;margin:20px 0'>
<view style='display:flex;align-items: center;'>
<img style="width:29rpx;height:40rpx" src="http://image.keyitest.cn/static/index/hhot.png"></image>
<p style='font-size:20px;font-weight: bold;color: #333333;margin-left:10px'>测试工具</p>
</view>
<view style='display:flex;align-items: center;' @click="gametype('tool')">
<text style='color: #999999;font-size:13px;'>更多</text>
<img style='width:15rpx;height:25rpx;margin-top:3px;margin-left:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
</view>
<view class='koeui'>
<view class="currekei" v-for="(item,key) of toollist" :key="key">
<view class="imgone" @click="details('tool',item.toolId)">
<view style="width: 120rpx;height: 120rpx;">
<img :src="item.img" alt="">
<!-- <img v-if="item.name=='代码静态分析工具'" :src="item.imgs" alt="">
<img v-if="item.name=='源代码安全检测工具'" :src="item.imgs" alt="">
<img v-if="item.name=='C/C++单元测试工具'" :src="item.imgs" alt="">
<img v-if="item.name=='接口测试工具'" :src="item.imgs" alt="">
<img v-if="item.name=='JAVA单元测试工具'" :src="item.imgs" alt="">
<img v-if="item.name=='功能测试工具AutoFun'" :src="item.imgs" alt="">
<img v-if="item.name=='代码组成分析平台'" :src="item.imgs" alt="">
<img v-if="item.name=='性能测试工具'" :src="item.imgs" alt="">
<img v-if="item.name=='自鉴-交互式应用安全测试系统IAST'" :src="item.imgs" alt="">
<img v-if="item.name=='Web应用安全测试工具'" :src="item.imgs" alt="">
<img v-if="item.name=='资产识别及漏洞管理工具'" :src="item.imgs" alt="">
<img v-if="item.name=='性能测试工具AutoLoad'" :src="item.imgs" alt=""> -->
</view>
</view>
<p class="leop leop1">{{item.name}}</p>
<view style='display:flex;margin:30rpx 0'>
<view v-if='item.toolTypeName' class="tabone">{{item.typel}}测试</view>
<view class="tabone" style="color: #FF8A00;border: 1px solid #FF8A00;margin-left: 10px;">{{item.deliverType}}</view>
</view>
<view style='display:flex;justify-content:space-between;margin:15rpx 0;width:100%'>
<p style="font-size: 24rpx;" v-if="item.price == 0">限时免费</p>
<p style="font-size: 34rpx;" v-else>¥ {{item.price}}</p>
<!-- <img class="imgtwo" src="http://image.keyitest.cn/static/index/add.png" alt="" @click="addcart(item.toolId)"> -->
</view>
</view>
</view>
<!-- 培训服务 -->
<!-- <view style='display:flex;justify-content:space-between;margin:20px 0'>
<view style='display:flex;align-items: center;'>
<img style="width:1.5rem;height:2rem" src="http://image.keyitest.cn/static/index/hhot.png"></image>
<p style='font-size:20px;font-weight: bold;color: #333333;margin-left:10px'>推荐-培训服务</p>
</view>
<view style='display:flex;align-items: center;' @click="gametype('test')">
<text style='color: #999999;font-size:13px;'>更多</text>
<img style='width:15rpx;height:25rpx;margin-top:3px;margin-left:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
</view>
<view style="margin-top:20px; background: #FFFFFF; border-radius:10px;padding: 10px 0px 15px 0;" @click="applytest(1)">
<view style='display:flex;justify-content:space-between;margin:10px 15px' >
<img style="width:160px;height:30px;" src="http://image.keyitest.cn/xian_kjdx.png" alt="">
<view style='display:flex;align-items: center;' >
<p style="color: #1F84F9;">查看详情</p>
<u-icon name="arrow-right" color="#2084F9" style='margin-top: 2px;margin-left: 5px;'></u-icon>
</view>
</view>
<view class="fline"></view>
<view style="margin-left:15px">
<p style="font-size: 16px;font-weight: bold;color: #000000;margin:14px 0 11px 0px;">智能软件测试协同创新班 </p>
<p style="font-size:12px;font-weight:500;color: #808080;">培训静态测试单元测试配置项测试测试管理等课程 </p>
</view>
</view>
<view style="margin-top:15px; background: #FFFFFF; border-radius:10px;padding: 10px 0px 15px 0;" @click="applytest(2)">
<view style='display:flex;justify-content:space-between;margin:10px 15px'>
<img style="width:139px;height:30px;" src="http://image.keyitest.cn/chongqing_gcxy.png" alt="">
<view style='display:flex;align-items: center;' >
<p style="color: #1F84F9;">查看详情</p>
<u-icon name="arrow-right" color="#2084F9" style='margin-top: 2px;margin-left: 5px;'></u-icon>
</view>
</view>
<view class="fline"></view>
<view style="margin-left:15px">
<p style="font-size: 16px;font-weight: bold;color: #000000;margin:14px 0 11px 0px;">软件测试创新班</p>
<p style="font-size:12px;font-weight:500;color: #808080;">培训静态测试单元测试配置项测试测试管理等课程 </p>
</view>
</view> -->
<!-- 众包服务 -->
<view style='display:flex;justify-content:space-between;margin:20px 0'>
<view style='display:flex;align-items: center;'>
<p style='font-size:20px;font-weight: bold;color: #333333;margin-left:10px' @click='nearfuture'>众包服务
</p>
</view>
<view style='display:flex;align-items: center;' @click="gametype('crowd')">
<text style='color: #999999;font-size:13px;'>更多</text>
<img style='width:15rpx;height:25rpx;margin-top:3px;margin-left:5px;'
src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
</view>
<view class="notice" @click="details('crpwd',item.taskId)" v-for="(item,key) of crowdlist" :key="key">
<!-- <img v-if="item.icon" style='width:160rpx;height:160rpx;margin-right:39rpx;' :src="item.icon" alt="">
<img v-else style='width:160rpx;height:160rpx;margin-right:39rpx;' src="http://image.keyitest.cn/static/crowd_testing.png" alt=""> -->
<view style="width:160rpx;height:160rpx;margin-right:39rpx;">
<image v-if="item.testType.split(',')[0]=='static'"
src="http://image.keyitest.cn/static/index/renliwb/jtcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='function'"
src="http://image.keyitest.cn/static/index/renliwb/gncs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='performance'"
src="http://image.keyitest.cn/static/index/renliwb/xncs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='security'"
src="http://image.keyitest.cn/static/index/renliwb/aqcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='reliability'"
src="http://image.keyitest.cn/static/index/renliwb/kkxcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='development'"
src="http://image.keyitest.cn/static/index/renliwb/ycrw.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else
src="http://image.keyitest.cn/static/index/renliwb/qtcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
</view>
<view style="width:58vw;">
<p class="leop" style="margin:0;justify-content: initial;">{{item.projectName}}</p>
<!-- <p class="typej">类型静态测试</p> -->
<p class="typej">
类型{{findLabelValueByPropnew(tasktypelist, item.testType, 'dictValue', 'dictLabel')}}</p>
<!-- <p class="typej" v-if="item.testType=='function'">类型功能测试</p>
<p class="typej" v-if="item.testType=='performance'">类型性能测试</p>
<p class="typej" v-if="item.testType=='security'">类型安全测试</p>
<p class="typej" v-if="item.testType=='configuration'">类型配置项测试</p>
<p class="typej" v-if="item.testType=='reliability'">类型可靠性测试</p>
<p class="typej" v-if="item.testType=='development'">类型研发任务</p>
<p class="typej" v-if="item.testType=='outsource'">类型用人任务</p>
<p class="typej" v-if="item.testType=='other'">类型其他</p> -->
<p class="typej">工期{{item.period}} I
共招<text style="color: #0066EB;">{{item.needPerson}}</text> / 已报名
<text style="color: #0066EB;">{{item.companyAppCount + item.personalAppCount}}</text>
<!-- <text style="color: #0066EB;">{{(item.companyAppCount + item.personalAppCount) +'/' + item.needPerson }}</text> -->
</p>
<view style="display:flex;justify-content:space-between;margin-top:20rpx">
<view style="display: flex;align-items: center;">
<p style='color:#FF8A00;font-size: 24rpx;'></p>
<p v-if="item.price == 0" style="color: #FF3200;font-size:30rpx;">面议</p>
<p v-else style="color: #FF3200;font-size:34rpx;">¥ {{item.price}}</p>
<p style="color: #4C4644;font-size: 22rpx;"></p>
</view>
<!-- <view class="buttonyz">竞标报名</view> -->
<view v-if="item.processStatus == 0" class="buttonyz">报名中</view>
<view v-if="item.processStatus == 1" class="buttonyz" style="background: linear-gradient(90deg, #FAC024, #FD9B1D);">实施中</view>
<view v-if="item.processStatus == 2" class="buttonyz" style="background: linear-gradient(90deg, #1EE2F9, #14CADA);">待验收</view>
<view v-if="item.processStatus == 3" class="buttonyz" style="background: linear-gradient(90deg, #FB9A78, #FC612A);">待结算</view>
<view v-if="item.processStatus == 4" class="buttonyz" style="background: linear-gradient(90deg, #3BF199, #13CB6E);">已完成</view>
<!-- <view v-if="item.taskStatus == 0" class="buttonyz">竞标报名</view>
<view v-else class="buttonyz1">报名结束</view> -->
</view>
</view>
</view>
<!-- 测试工具 -->
<!-- 人才服务 -->
<!-- <view style='display:flex;justify-content:space-between;margin:10px 0 0 0'>
<view style='display:flex;align-items: center;'>
<p style='font-size:20px;font-weight: bold;color: #333333;margin-left:10px' >人才服务</p>
</view>
<view style='display:flex;align-items: center;' @click="gametype('human')">
<text style='color: #999999;font-size:13px;'>更多</text>
<img style='width:15rpx;height:25rpx;margin-top:3px;margin-left:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
</view>
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;align-items: center;">
<view class="statictosol" style="position: relative;padding:0px;height: auto;">
<img style="width:75rpx;height:38rpx;position: absolute;top: 0;left: 0" src="http://image.keyitest.cn/static/index/renliwb/2.png" alt="">
<img style="margin:15px 0" src="http://image.keyitest.cn/static/outsource/test.png" alt="">
<u-line></u-line>
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:15px 0 ;">测试工程师 </p>
</view>
<view class="statictosol" style="position: relative;padding:0px;height: auto;">
<img style="width:75rpx;height:38rpx;position: absolute;top: 0;left: 0" src="http://image.keyitest.cn/static/index/renliwb/2.png" alt="">
<img style="margin:15px 0" src="http://image.keyitest.cn/static/outsource/java.png" alt="">
<u-line></u-line>
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:15px 0 ;">JAVA开发工程师 </p>
</view>
<view class="statictosol" style="padding:0px;height: auto;">
<img style="margin:15px 0" src="http://image.keyitest.cn/static/outsource/c++.png" alt="">
<u-line></u-line>
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:15px 0 ;">C++开发工程师 </p>
</view>
<view class="statictosol" style="padding:0px;height: auto;">
<img style="margin:15px 0" src="http://image.keyitest.cn/static/outsource/web.png" alt="">
<u-line></u-line>
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:15px 0 ;">Web前端开发工程师</p>
</view>
<view class="statictosol" style="padding:0px;height: auto;">
<img style="margin:15px 0" src="http://image.keyitest.cn/static/outsource/implant.png" alt="">
<u-line></u-line>
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:15px 0 ;">嵌入式工程师 </p>
</view>
<view class="statictosol" style="padding:0px;height: auto;">
<img style="margin:15px 0" src="http://image.keyitest.cn/static/outsource/php.png" alt="">
<u-line></u-line>
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:15px 0 ;">PHP开发工程师</p>
</view>
</view> -->
<!-- 人才服务 -->
</view>
<view style="height:10px;"></view>
<u-toast ref="uToast" />
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下'
show-cancel-button='true' cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirm"
@cancel='tokenshow=false'></u-modal>
</view>
</template>
<script>
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
export default {
mixins: [mixin],
data() {
return {
title: '首页',
keywares: '',
toollist: [], //
crowdlist: [], //
tokenshow: false,
}
},
onShow() {
this.http.quickGet('/business/tool/listAnon?status=1').then(res => {
let tooldata = res.data.rows;
tooldata.forEach(item => {
if (item.name == '代码静态分析工具') {
item.imgs = 'http://image.keyitest.cn/static/index/11.png'
} else if (item.name == '源代码安全检测工具') {
item.imgs = 'http://image.keyitest.cn/static/index/5.png'
} else if (item.name == 'C/C++单元测试工具') {
item.imgs = 'http://image.keyitest.cn/static/index/2.png'
} else if (item.name == '接口测试工具') {
item.imgs = 'http://image.keyitest.cn/static/index/12.png'
} else if (item.name == 'JAVA单元测试工具') {
item.imgs = 'http://image.keyitest.cn/static/index/tool/1.png'
} else if (item.name == '功能测试工具AutoFun') {
item.imgs = 'http://image.keyitest.cn/static/index/3.png'
} else if (item.name == '代码组成分析平台') {
item.imgs = 'http://image.keyitest.cn/static/index/tool/4.png'
} else if (item.name == '性能测试工具') {
item.imgs = 'http://image.keyitest.cn/static/index/6.png'
} else if (item.name == '自鉴-交互式应用安全测试系统IAST') {
item.imgs = 'http://image.keyitest.cn/static/index/tool/3.png'
} else if (item.name == 'Web应用安全测试工具') {
item.imgs = 'http://image.keyitest.cn/static/index/tool/2.png'
} else if (item.name == '资产识别及漏洞管理工具') {
item.imgs = 'http://image.keyitest.cn/static/index/zc.png'
} else if (item.name == '性能测试工具KeyTurbo') {
item.imgs = 'http://image.keyitest.cn/static/index/xn.png'
}
item.typel = item.toolTypeName.slice(0, 2)
})
this.toollist = res.data.rows.splice(0, 6)
}),
this.http.quickGet('/crowdsource/listAnon?pageNum=1&pageSize=10').then(res => {
this.crowdlist = res.data.rows;
this.crowdlist = this.crowdlist.splice(0, 3)
})
},
filters: {
tiilnamechange(value) {
if (!value) return ''
if (value.length > 9) {
return value.slice(0, 7) + '...'
}
return value
}
},
methods: {
findLabelValueByPropnew,
test() {
uni.navigateTo({
url: '/pages/index/test',
// url: 'https://w102.ttkefu.com/k/linkurl/?t=6F5CCH6'
})
},
// onShareAppMessage(res) {
// if (res.from === 'button') {//
// console.log(res.target)
// }
// return {
// title: '',
// path: '/pages/test/test?id=123'
// }
// },
//
details(type, id) {
// console.log('id---',id)
if (type == 'tool') {
// uni.showToast({ title: '', icon: 'none', duration: 1000 });
uni.navigateTo({
url: `./toolleasing/tooldetails?id=${id}`
})
} else {
uni.navigateTo({
url: `./testcrowdsourc/crowdsourcingdetails?id=${id}`
})
}
},
//
serchfot() {
uni.navigateTo({
url: './searchfor'
})
},
cleardata() {
},
confirm() {
uni.navigateTo({
url: '/pages/personal/login'
})
},
//
addcart(id) {
uni.showToast({
title: '该功能开发中',
icon: 'none',
duration: 1000
});
return;
let accessToken = uni.getStorageSync('accessToken');
if (!accessToken) {
this.tokenshow = true
} else {
this.http.quickGet(`/my/addShoppingCart/${id}/1`, true).then(response => {
console.log('response', response)
if (response.data.code == 200) {
console.log('111')
this.$refs.uToast.show({
title: '添加购物车成功',
type: 'success',
duration: 1000,
isTab: true,
url: '/pages/shoppingtrolley/shoppingtrolley'
})
}
})
}
},
//
gametype(type) {
if (type == 'test') {
uni.navigateTo({
url: './testtraining/testtraining'
})
} else if (type == 'crowd') {
uni.switchTab({
url: '/pages/index/testcrowdsourc/testcrowdsourc'
})
} else if (type == 'tool') {
// uni.showToast({
// title: '线',
// icon: 'none',
// duration: 1000
// });
uni.navigateTo({
url:'./toolleasing/toolleasing'
})
} else {
// uni.showToast({ title: '线', icon: 'none', duration: 1000 });
uni.navigateTo({
url: './outsourcing/outsourcing'
})
}
},
//
applytest(type) {
uni.navigateTo({
url: `./testtraining/testtraining?currenttab=${type}`
})
}
}
}
</script>
<style>
page {
background-color: #F7F7F7;
}
.logobg {
width: 100vw;
height: 51vw;
background-size: 100% 55vw;
background-image: url('http://image.keyitest.cn/static/index/hhome_page.png');
background-repeat: no-repeat;
padding: 20px 5vw 20px 5vw;
margin-top: -1px;
/* padding:30px 0vw 20px 5vw; */
/* z-index:0; */
}
.keyewar {
width: 72vw;
border-radius: 50rpx;
/* position: relative; */
/* margin:1vw 5vw 20px 0vw;
display: flex;
justify-content: space-between; */
/* padding: 10px; */
}
.buttonyz1 {
width: 139rpx;
height: 49rpx;
background: #a8aeb6;
border-radius: 25rpx;
color: #FFFFFF;
font-size: 24rpx;
text-align: center;
line-height: 49rpx;
}
.customActionStyle {
width: 115rpx;
height: 60rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 39rpx;
text-align: center;
line-height: 55rpx;
color: #FFFFFF;
font-size: 14px;
z-index: 99;
}
/* @media screen and (max-width: 350px) {
body {
font-size: 14px;
color: blue;
}
} */
.contents {
padding-bottom: 50px
}
.fouassociation {
position: relative;
/* z-index: 2; */
/* width:90vw; */
margin: -12vw 3vw 0 3vw;
display: flex;
justify-content: space-around;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 0px 29px 0px rgba(187, 86, 25, 0.17);
border-radius: 10px;
padding: 0 5px;
}
.association {
width: 20vw;
margin: 10px 0;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
}
.association img {
width: 13vw;
height: 13vw;
margin-bottom: 5px;
display: block;
}
.association text {
font-size: 14px;
display: block;
}
.schedule {
width: 94vw;
margin: 30px 3vw 20px 3vw;
}
.koeui {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.currekei {
width: 48%;
/* height: 360rpx; */
background: #FFFFFF;
border-radius: 10px;
padding: 10px 10px;
margin-bottom: 20rpx
}
.leop {
font-size: 30rpx;
/* height:40px ; */
font-weight: bold;
color: #1A1A1A;
/* margin: 13rpx 0; */
display: flex;
align-items: center;
justify-content: center;
}
.leop1 {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
justify-content: flex-start;
}
.tabone {
padding: 2rpx 5rpx;
border: 1px solid #2B80FC;
border-radius: 4rpx;
font-size: 20rpx;
font-weight: 500;
color: #2387EE;
text-align: center;
box-sizing: border-box;
}
.currekei :nth-child(4) {
color: #FD461A;
font-weight: 800;
font-size: 34rpx;
}
.imgone {
width: 180rpx;
margin: 10px auto;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
}
.imgone img {
width: 100%;
height: 100%;
}
.imgsone {
width: 150rpx;
margin: 20px auto;
}
.imgsone img {
width: 150rpx;
height: 123rpx;
}
.imgtwo {
width: 32rpx;
height: 32rpx;
}
.notice {
/* width: 90vw; */
/* height: 130px; */
margin-top: 10px;
background: #FFFFFF;
border-radius: 10px;
display: flex;
padding: 10px 15px;
align-items: center;
}
.typej {
font-size: 24rpx;
color: #9D9D9D;
margin: 13rpx 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.buttonyz {
width: 139rpx;
height: 49rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 25rpx;
color: #FFFFFF;
font-size: 24rpx;
text-align: center;
line-height: 49rpx;
}
.fline {
width: 100%;
height: 1rpx;
border: 1rpx solid #F2F2F2;
opacity: 0.15;
}
.statictosol {
width: 48%;
height: 180px;
background: #FFFFFF;
border-radius: 10rpx;
text-align: center;
margin-top: 20px;
padding: 15px 10px;
}
.statictosol img {
width: 17vw;
height: 17vw;
margin-bottom: 10px;
}
.statictosol p {
font-size: .8rem;
color: #808080;
margin-bottom: 5px;
line-height: 21px
}
.tostnew {
position: absolute;
top: -12rpx;
right: -32rpx;
}
.tostnewimg {
width: 76rpx;
height: 32rpx;
}
.tostnewtext {
position: absolute;
top: 3rpx;
left: 50%;
transform: translateX(-50%);
white-space: nowrap;
font-weight: 500;
font-size: 16rpx !important;
color: #FFFFFF;
}
</style>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,237 @@
<template>
<view class="navTab">
<u-search v-model='keyware' placeholder='输入搜索内容' :actionStyle="customActionStyle" showAction="true" actionText="搜索" :animation="false" @custom='seacrhko'></u-search>
<view class="histyo">
<p>历史搜索</p>
<u-icon name="trash" size='18px'> </u-icon>
</view>
<view style="margin-top:15px;display:flex;flex-wrap: wrap;">
<u-tag borderColor='transparent' bgColor='#EBEEF2' text="软件测试" type='info' style="margin-right: 10px;" color="#333333" shape="circle"></u-tag>
<u-tag borderColor='transparent' bgColor='#EBEEF2' text="单元测试" type='info' style="margin-right: 10px;" color="#333333" shape="circle"></u-tag>
<u-tag borderColor='transparent' bgColor='#EBEEF2' text="接口测试" type='info' style="margin-right: 10px;" color="#333333" shape="circle"></u-tag>
<u-tag borderColor='transparent' bgColor='#EBEEF2' text="安全性测试" type='info' style="margin-right: 10px;" color="#333333" shape="circle"></u-tag>
</view>
<view class="histyo">
<p>热门搜索</p>
</view>
<view style="margin-top:15px;display:flex;flex-wrap: wrap;">
<u-tag borderColor='transparent' bgColor='#EBEEF2' text="软件测试" type='info' style="margin-right: 10px;" color="#333333" shape="circle"></u-tag>
<u-tag borderColor='transparent' bgColor='#EBEEF2' text="单元测试" type='info' style="margin-right: 10px;" color="#333333" shape="circle"></u-tag>
<u-tag borderColor='transparent' bgColor='#EBEEF2' text="接口测试" type='info' style="margin-right: 10px;" color="#333333" shape="circle"></u-tag>
</view>
<view style='display:flex;align-items: center;margin-bottom: 10px;margin-top:15px;'>
<view class='vertical'></view>
<view style="color: #808080;font-size: 15px;">热门工具排行</view>
</view>
<!-- <view style="display:flex;flex-wrap: wrap;justify-content: space-between;">
<view class="currekei" v-for="(item,key) of toollist" :key="key">
<view class="imgone" @click="details('tool',item.toolId)" >
<img v-if="item.name=='代码静态分析工具'" :src="item.imgs" alt="">
<img v-if="item.name=='源代码安全检测工具'" :src="item.imgs" style="width:158rpx" alt="">
<img v-if="item.name=='C/C++单元测试工具'" :src="item.imgs" style="width:150rpx" alt="">
<img v-if="item.name=='接口测试工具'" :src="item.imgs" style="width:140rpx" alt="">
<img v-if="item.name=='JAVA单元测试工具'" :src="item.imgs" style="width:152rpx" alt="">
<img v-if="item.name=='功能测试工具AutoFun'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='代码组成分析平台'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='性能测试工具'" :src="item.imgs" alt="">
<img v-if="item.name=='自鉴-交互式应用安全测试系统IAST'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='Web应用安全测试工具'" :src="item.imgs" style="width:155rpx" alt="">
<img v-if="item.name=='资产识别及漏洞管理工具'" :src="item.imgs" style="width:200rpx" alt="">
<img v-if="item.name=='性能测试工具AutoLoad'" :src="item.imgs" alt="">
</view>
<p class="leop">{{item.name | tiilnamechange}}</p>
<view style='display:flex;margin:30rpx 0'>
<view v-if='item.toolTypeName' class="tabone">{{item.typel}}测试</view>
<view class="tabone" style="color: #FF8A00;border: 1px solid #FF8A00;margin-left: 10px;">{{item.deliverType}}</view>
</view>
<view style='display:flex;justify-content:space-between;margin:15rpx 0;width:100%'>
<p>¥ {{item.price}}</p>
<img class="imgtwo" src="http://image.keyitest.cn/static/index/add.png" alt="" @click="addcart(item.toolId)">
</view>
</view>
</view> -->
<u-toast ref="uToast" />
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下' show-cancel-button='true'
cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirm" @cancel='tokenshow=false'></u-modal>
</view>
</template>
<script>
export default {
name: 'navTab',
data() {
return {
tokenshow:false,
keyware:'',
customActionStyle: {
color: '#808080', //
fontSize: '16px' //
//
},
toollist:[],
}
},
onLoad() {
this.http.quickGet('/business/tool/listAnon?status=1').then(res=>{
// console.log('---',res.data.rows)
let tooldata=res.data.rows;
tooldata.forEach(item=>{
if(item.name=='代码静态分析工具'){
item.imgs='http://image.keyitest.cn/static/index/11.png'
}else if(item.name=='源代码安全检测工具'){
item.imgs='http://image.keyitest.cn/static/index/5.png'
}else if(item.name=='C/C++单元测试工具'){
item.imgs='http://image.keyitest.cn/static/index/2.png'
}else if(item.name=='接口测试工具'){
item.imgs='http://image.keyitest.cn/static/index/12.png'
}else if(item.name=='JAVA单元测试工具'){
item.imgs='http://image.keyitest.cn/static/index/tool/1.png'
}else if(item.name=='功能测试工具AutoFun'){
item.imgs='http://image.keyitest.cn/static/index/3.png'
}else if(item.name=='代码组成分析平台'){
item.imgs='http://image.keyitest.cn/static/index/tool/4.png'
}else if(item.name=='性能测试工具'){
item.imgs='http://image.keyitest.cn/static/index/6.png'
}else if(item.name=='自鉴-交互式应用安全测试系统IAST'){
item.imgs='http://image.keyitest.cn/static/index/tool/3.png'
}else if(item.name=='Web应用安全测试工具'){
item.imgs='http://image.keyitest.cn/static/index/tool/2.png'
}else if(item.name=='资产识别及漏洞管理工具'){
item.imgs='http://image.keyitest.cn/static/index/zc.png'
}else if(item.name=='性能测试工具AutoLoad'){
item.imgs='http://image.keyitest.cn/static/index/xn.png'
}
item.typel=item.toolTypeName.slice(0,2)
})
this.toollist=res.data.rows.splice(0,4)
console.log('---',this.toollist)
})
},
filters:{
tiilnamechange(value){
if (!value) return ''
if(value.length>9){
return value.slice(0, 7) + '...'
}
return value
}
},
methods: {
confirm(){
uni.navigateTo({
url:'/pages/personal/login'
})
},
seacrhko(e){
// console.log('----',e)
},
details(type,id){
// console.log('id---',id)
if(type=='tool'){
uni.showToast({ title: '该功能开发中', icon: 'none', duration: 1000 });
// uni.navigateTo({
// url: `./tooldetails?id=${id}`
// })
}else{
uni.navigateTo({
url: './crowdsourcingdetails'
})
}
},
//
addcart(id){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
//
this.http.quickGet(`/my/addShoppingCart/${id}/1`,true).then(response => {
console.log('response',response)
if(response.data.code==200){
console.log('111')
this.$refs.uToast.show({
title: '添加购物车成功',
type: 'success',
duration: 1000,
isTab:true,
url:'/pages/shoppingtrolley/shoppingtrolley'
})
}
})
}
},
}
}
</script>
<style scoped>
.navTab{
padding:13px;
}
.histyo{
margin-top:15px;
display:flex;
justify-content: space-between;
color: #808080;
font-size: 30rpx;
}
.vertical{
width: 6rpx;
height: 26rpx;
background: #1578ED;
border-radius: 3rpx;
margin-right:10px ;
}
.currekei{
width:48%;
/* height: 360rpx; */
background: #FFFFFF;
border-radius: 10px;
padding: 10px 10px;
margin-bottom:20rpx
}
.leop{
font-size:30rpx;
/* height:40px ; */
font-weight: bold;
color: #1A1A1A;
/* margin: 13rpx 0; */
display: flex;
align-items: center;
justify-content: center;
}
.tabone{
width: 98rpx;
height: 33rpx;
border: 1px solid #2B80FC;
border-radius: 4rpx;
font-size: 20rpx;
font-weight: 500;
color: #2387EE;
text-align: center;
line-height: 33rpx;
}
.currekei :nth-child(4){
color: #FD461A;
font-weight: 800;
font-size: 34rpx;
}
.imgone{
width: 119rpx;
margin:10px auto;
}
.imgone img{
width: 119rpx;
height: 123rpx;
}
.imgtwo{
width: 32rpx;
height:32rpx;
}
</style>

@ -0,0 +1,14 @@
<template>
<view class="">
<web-view id="myWebView" src="https://w102.ttkefu.com/k/linkurl/?t=6F5CCH6"></web-view>
</view>
</template>
<script>
export default {
}
</script>
<style scoped>
</style>

@ -0,0 +1,381 @@
<template>
<view class="peixunbanpage">
<!-- 公司信息 -->
<view class="companyinfo">
<image class="" :src="task.avatar" mode=""></image>
<view class="comname">{{task.company_name}}</view>
<view v-if="task.commentsStar && task.commentsStar != 0" class="raterow">
<span> 评分</span>
<span style="color: #FA9C22;margin-right: 5rpx;">{{task.commentsStar}}</span>
<u-rate :current="task.commentsStar" :disabled="true" active-color="#fa9c22" inactive-color="#CDCECE"></u-rate>
</view>
<view v-else style="font-weight: 500;font-size: r26px;color: #808080;" >
暂无评价
</view>
<view class="tabnav">
<view class="tabnavitem" :class="{'activeitem': activetab == 1}" @click="tabnavClick(1)">
众包任务
</view>
<view class="tabnavitem" :class="{'activeitem': activetab == 2}" @click="tabnavClick(2)">
评价
</view>
</view>
</view>
<!-- 任务列表 -->
<template v-if="activetab == 1">
<view class="notice" @click="details('crpwd',item.taskId)" v-for="(item,key) of crowdlist" :key="key">
<view style="width:160rpx;height:160rpx;margin-right:39rpx;">
<image v-if="item.testType.split(',')[0]=='static'"
src="http://image.keyitest.cn/static/index/renliwb/jtcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='function'"
src="http://image.keyitest.cn/static/index/renliwb/gncs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='performance'"
src="http://image.keyitest.cn/static/index/renliwb/xncs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='security'"
src="http://image.keyitest.cn/static/index/renliwb/aqcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='reliability'"
src="http://image.keyitest.cn/static/index/renliwb/kkxcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else-if="item.testType.split(',')[0]=='development'"
src="http://image.keyitest.cn/static/index/renliwb/ycrw.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
<image v-else src="http://image.keyitest.cn/static/index/renliwb/qtcs.png" mode=""
style='width:160rpx;height:160rpx;margin-right:39rpx;'></image>
</view>
<view style="width:58vw;">
<p class="leop" style="margin:0;justify-content: initial;">{{item.projectName}}</p>
<p class="typej">
类型{{findLabelValueByPropnew(tasktypelist, item.testType, 'dictValue', 'dictLabel')}}</p>
<p class="typej">工期{{item.period}} I
共招<text style="color: #0066EB;">{{item.needPerson}}</text> / 已报名
<text style="color: #0066EB;">{{item.companyAppCount + item.personalAppCount}}</text>
</p>
<view style="display:flex;justify-content:space-between;margin-top:20rpx">
<view style="display: flex;align-items: center;">
<p style='color:#FF8A00;font-size: 24rpx;'></p>
<p v-if="item.price == 0" style="color: #FF3200;font-size:30rpx;">面议</p>
<p v-else style="color: #FF3200;font-size:34rpx;">¥ {{item.price}}</p>
<p style="color: #4C4644;font-size: 22rpx;"></p>
</view>
<view v-if="item.taskStatus == 0" class="buttonyz">竞标报名</view>
<view v-else class="buttonyz1">报名结束</view>
</view>
</view>
</view>
</template>
<!-- 评价列表 -->
<template v-if="activetab == 2">
<view class="pxitembox" v-for="it in reviewList" :key="it.comment_id">
<view class="pxitemboxt">
<view class="pxitemboxtl">
<image class="pxitemboxtlimg" src="../../../static/crowd/defaultAva.jpg" mode=""></image>
<!-- {来自{{it.from_city}}的伙伴} -->
{{it.user_name}}
</view>
<view class="pxitemboxtr">
{{dateFormat(new Date(it.create_time)) }}
</view>
</view>
<view class="pxitemboxc">
<view class="ratebox">
<u-rate v-model="it.star" :current="2" :disabled="true" active-color="#fa9c22" inactive-color="#CDCECE"></u-rate>
</view>
<view class="pxitemboxcremark">
{{it.content}}
</view>
<view class="pxitemboxctask" @click="goTaskDetail">
{{it.project_name}}
</view>
</view>
</view>
</template>
</view>
</template>
<script>
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
import { dateFormat} from '@/utils/util.js'
export default {
mixins: [mixin],
data() {
return {
activetab: 1,
task: {},
crowdlist: [],
reviewList: [],
//
queryparams: {
pageSize: 10,
pageNum: 1,
},
queryparams1: {
pageSize: 10,
pageNum: 1,
},
}
},
onLoad(options) {
const task = JSON.parse(decodeURIComponent(options.taskInfo))
this.task = task
this.getTaskList()
},
methods: {
dateFormat,
findLabelValueByPropnew,
//
goTaskDetail() {
},
//
getTaskList() {
this.http.quickGet(`/crowdsource/listAnon?pageNum=${this.queryparams.pageNum}&pageSize=${this.queryparams.pageSize}`).then(res => {
this.crowdlist = res.data.rows;
})
},
//
getReviewList() {
this.http.quickGet(`/comment/comments/${this.task.publisher_id}?pageNum=${this.queryparams1.pageNum}&pageSize=${this.queryparams1.pageSize}`, false).then(res=>{
this.reviewList=res.data.rows
})
},
// tabbar
tabnavClick(val) {
this.activetab = val
if (val == 1) {
this.getTaskList()
} else {
this.getReviewList()
}
},
//
details(type, id) {
uni.navigateTo({
url: `./crowdsourcingdetails?id=${id}`
})
},
},
//
onReachBottom() {
if (this.activetab == 1) {
//
if (this.crowdlist.length % 10 != 0) {
return
} else {
this.queryparams.pageNum++
this.http.quickGet(`/crowdsource/listAnon?pageNum=${this.queryparams.pageNum}&pageSize=${this.queryparams.pageSize}`).then(res => {
this.crowdlist.push(...res.data.rows);
})
}
} else {
//
if (this.reviewList.length % 10 != 0) {
return
} else {
this.queryparams1.pageNum++
this.http.quickGet(`/comment/comments/${this.task.publisher_id}?pageNum=${this.queryparams1.pageNum}&pageSize=${this.queryparams1.pageSize}`, false).then(res=>{
this.reviewList.push(...res.data.rows);
})
}
}
}
}
</script>
<style lang="scss" scoped>
.peixunbanpage {
width: 100vw;
height: 100%;
background: #f5f7fa;
padding: 25rpx 25rpx 25rpx 25rpx;
box-sizing: border-box;
//
.companyinfo {
width: 100%;
height: 350rpx;
background-color: #FFFFFF;
border-radius: 10rpx;
margin-bottom: 30rpx;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
image {
width: 95rpx;
height: 95rpx;
margin-top: 30rpx;
}
.comname {
font-weight: bold;
font-size: 30rpx;
color: #333333;
}
.raterow {
font-weight: 500;
font-size: 26rpx;
color: #808080;
}
.tabnav {
width: 100%;
height: 72rpx;
border-top: 1px solid #EBEBEB;
box-sizing: border-box;
display: flex;
.tabnavitem {
flex: 1;
font-weight: 500;
font-size: 28rpx;
color: #4C4C4C;
display: flex;
justify-content: center;
align-items: center;
}
.activeitem {
font-weight: bold;
font-size: 28rpx;
color: #1578ED;
border-bottom: 4rpx solid #1578ED;
}
}
}
.pxitembox {
width: 100%;
background: #FFFFFF;
border-radius: 10rpx;
margin-bottom: 30rpx;
.pxitemboxt {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid rgba(153, 153, 153, 0.2);
padding: 0 25rpx;
box-sizing: border-box;
}
.pxitemboxtl {
height: 89rpx;
display: flex;
align-items: center;
font-weight: 500;
font-size: 28rpx;
color: #1A1A1A;
.pxitemboxtlimg {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
margin-right: 10rpx;
}
}
.pxitemboxtr {
font-weight: 500;
font-size: 22rpx;
color: #808080;
}
.pxitemboxc {
width: 100%;
padding: 25rpx;
box-sizing: border-box;
.ratebox {
margin-bottom: 20rpx;
}
.ratebox ::v-deep .u-icon {
font-size: 20px !important;
}
.pxitemboxcremark {
font-weight: 500;
font-size: 22rpx;
color: #333333;
}
.pxitemboxctask {
margin-top: 20rpx;
font-weight: 500;
font-size: 22rpx;
color: #2084F9;
}
}
}
}
.notice {
background: #FFFFFF;
border-radius: 10px;
display: flex;
padding: 10px 15px;
align-items: center;
margin-bottom: 30rpx;
}
.typej {
font-size: 24rpx;
color: #9D9D9D;
margin: 13rpx 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.leop {
font-size: 30rpx;
/* height:40px ; */
font-weight: bold;
color: #1A1A1A;
/* margin: 13rpx 0; */
display: flex;
align-items: center;
justify-content: center;
}
.buttonyz1 {
width: 139rpx;
height: 49rpx;
background: #a8aeb6;
border-radius: 25rpx;
color: #FFFFFF;
font-size: 24rpx;
text-align: center;
line-height: 49rpx;
}
.buttonyz {
width: 139rpx;
height: 49rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 25rpx;
color: #FFFFFF;
font-size: 24rpx;
text-align: center;
line-height: 49rpx;
}
.daodile {
text-align: center;
margin: 20rpx 0;
font-size: 24rpx;
color: #9D9D9D;
}
</style>

@ -0,0 +1,995 @@
<template>
<view v-if="crowddata" style="padding-bottom:70px;">
<view class="schedule" style="padding:25rpx 0">
<view style="margin:0 25rpx 36rpx 25rpx">
<view style="display:flex;font-size:35rpx;font-weight:bold;justify-content: space-between;">
<p style='color: #333333;'>{{crowddata.task.project_name}} </p>
<p v-if="crowddata.task.price == 0" style="color:#FD461A;">面议</p>
<p v-else style="color:#FD461A;">¥{{crowddata.task.price}}</p>
</view>
<view style="display:flex;margin-top:15px;flex-wrap: wrap;">
<view class='tabone' style="width:50px;margin-right:8rpx">
<span v-if="crowddata.task.task_status==0">竞标中</span>
<span v-if="crowddata.task.task_status==1">竞标成功</span>
<span v-if="crowddata.task.task_status==2">竞标失败</span>
</view>
<view class='tabone' style="min-width:60px;background: #E8EEF5;color:#525B65;margin-right: 8rpx;"
v-for="itema in findLabelValueByPropnew(tasktypelist, crowddata.task.test_type, 'dictValue', 'dictLabel').split(',')">
<span>
{{itema}}
</span>
<!-- <span v-if="crowddata.task.test_type=='static'">静态测试</span>
<span v-if="crowddata.task.test_type=='function'">功能测试</span>
<span v-if="crowddata.task.test_type=='performance'">性能测试</span>
<span v-if="crowddata.task.test_type=='security'">安全测试</span>
<span v-if="crowddata.task.test_type=='configuration'">配置项测试</span>
<span v-if="crowddata.task.test_type=='reliability'">可靠性测试</span>
<span v-if="crowddata.task.test_type=='development'">研发任务</span>
<span v-if="crowddata.task.test_type=='outsource'">用人任务</span>
<span v-if="crowddata.task.test_type=='other'">其他</span> -->
</view>
</view>
</view>
<u-line></u-line>
<view style="color:#808080;font-size: 24rpx;margin:36rpx 25rpx 0 25rpx">
<p style='margin-bottom:10px'>发布日期{{crowddata.task.create_time.slice(0,10)}}</p>
<p style='margin-bottom:10px'>需要人数{{crowddata.task.need_person}}</p>
<p style='margin-bottom:10px'>项目周期{{crowddata.task.period}}</p>
<p style='margin-bottom:10px'>驻场需求
<span v-if="crowddata.task.onsite_type==0"> 无需驻场</span>
<span v-if="crowddata.task.onsite_type==1"> 偶尔驻场</span>
<span v-if="crowddata.task.onsite_type==2"> 定期驻场</span>
</p>
<p style='margin-bottom:10px'>技能要求{{crowddata.task.tech_need}}</p>
<p style='margin-bottom:10px'>地域要求{{crowddata.task.area}}</p>
<p style='margin-bottom:10px'>有效天数{{crowddata.task.valid_days}}</p>
<!-- <p style='margin-bottom:10px'>竞标者要求
<span v-if='crowddata.task.applicant_type==0'>个人测试者</span>
<span v-if='crowddata.task.applicant_type==1'>认证测试公司</span>
<span v-if='crowddata.task.applicant_type==2'>个人测试者/认证测试公司</span>
</p> -->
<!-- <p style='margin-bottom:10px'>需支持/适配的客户端网站</p>
<p>合作倾向希望与关键科技合作</p> -->
</view>
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">需求描述</view>
</view>
<view v-if="crowddata.task.project_desc">
<!-- <div class="article-body" v-html='industryinform.content'></div> -->
<rich-text class="article-body"
:nodes="crowddata.task&&crowddata.task.project_desc | filtersRichText"></rich-text>
</view>
<p v-else style="color:#808080;line-height:23px;font-size: 24rpx;white-space:pre-line;"></p>
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">联系方式</view>
</view>
<view style="color:#808080;font-size: 24rpx; ">
<p style='margin-bottom:10px'>联系人{{crowddata.task.contact_name}}</p>
<p style='margin-bottom:10px'>联系人{{crowddata.task.contact_tel}}</p>
</view>
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">附件</view>
</view>
<view style='margin-bottom: 10px;'>
<!-- <div style='display:flex;align-items: center;margin-bottom: 10px;' v-if="crowddata.task.attachment&&crowddata.task.attachment.indexOf('/upload')>0">
<img style="width:17px;height:20px;margin-right:5px;" src="/static/crowd/upload.png" alt="" />
<p @click="openurl(crowddata.task.attachment)" style="color:#1578ED;font-size: 12px;cursor: pointer;">项目附件</p>
</div> -->
<template v-if="crowddata.task.attachment">
<div style='display:flex;align-items: center;margin-bottom: 10px;'
v-for="(it,index) in crowddata.task.attachment.split(',')">
<img style="width:17px;height:20px;margin-right:5px;" src="/static/crowd/upload.png" alt="" />
<p @click="openurl(it)" style="color:#1578ED;font-size: 12px;cursor: pointer;">项目附件{{index+1}}
</p>
</div>
</template>
<!-- -->
<p v-else style="color:#808080;font-size: 12px;"></p>
<!-- <p style="color:#1578ED;font-size: 12px;">项目附件.zip</p> -->
</view>
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">报名列表</view>
</view>
<view v-if="crowddata.entrants.length>0" style="display: flex;flex-wrap: wrap;">
<view v-for="(item,key) of crowddata.entrants" class="signst">
<view v-if="item.avatar">
<img v-if="item.avatar.indexOf('http')==0" :src="item.avatar" alt="">
<img v-else :src="base+item.avatar" alt="" />
</view>
<!-- <img v-else src="https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132" alt="" /> -->
<img style="margin-bottom: 4px;" v-else src="../../../static/crowd/defaultAva.jpg" alt="" />
<p>{{item.nick_name.slice(0,1)}}**</p>
<view class="success" v-if="item.status != 0 && item.status != 2">
<image src="/static/index/success.png" mode=""></image>
竞标成功
</view>
<view class="success1" v-else>
</view>
</view>
</view>
<view v-else style="color: #808080;font-size: 12px;">
</view>
<!-- <img style="width:280px;height:50px;" src="/static/crowd/signlist.png" alt="" /> -->
</view>
<view class="schedule">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">发布者信息</view>
</view>
<view style='display:flex;align-items: center;margin-bottom:15px;'>
<!-- <img style="width:50px;height:50px;margin-right:5px" src="/static/crowd/crowdlogo.png" alt="" /> -->
<img style="width:50px;height:50px;margin-right:5px;border-radius: 50%;" :src="crowddata.task.avatar"
alt="" @click="goCompanyInfo"/>
<view>
<view style="display: flex;margin:5px 0;align-items: center;">
<p style="color:#4D4D4D ; font-size:13px ;font-weight: bold;">{{crowddata.task.company_name}}
</p>
<!-- <img v-if="crowddata.task.email" style="width:15px;height:15px;margin:0 5px;" src="/static/crowd/email.png" alt="" />
<img v-else style="width:15px;height:15px;margin:0 5px;" src="/static/crowd/noemail.png" alt="" /> -->
<!-- <img @click="callingphone(crowddata.task.contact_tel)" v-if="crowddata.task.contact_tel" style="width:15px;height:15px;margin-left: 20rpx;" src="/static/crowd/phone.png" alt="" />
<img v-else style="width:15px;height:15px;margin-left: 20rpx;" src="/static/crowd/nophone.png" alt="" /> -->
</view>
<p class="ratebox" style="color:#808080;font-size:12px;align-items: center;">
<span>发包总数</span>
<span style="color:#1578ED;">{{crowddata.task.publish_task_count}}</span>
<!-- <span style="color:#1578ED;">{{(crowddata.task.company_app_count + crowddata.task.personal_app_count) == 20 ? "已满":(crowddata.task.company_app_count + crowddata.task.personal_app_count)}}</span> -->
<span style="margin:0 6px"> l </span>
<block v-if="crowddata.task.commentsStar && crowddata.task.commentsStar != 0">
<span> 评分</span>
<span style="color: #FA9C22;margin-right: 5rpx;">{{crowddata.task.commentsStar}}</span>
<u-rate :current="crowddata.task.commentsStar" :disabled="true" active-color="#fa9c22" inactive-color="#CDCECE"></u-rate>
</block>
<span v-else>暂无评价</span>
</p>
</view>
</view>
<view style='margin-bottom:10px;font-size: 24rpx;'>
<span style="color:#4D4D4D">公司简介</span>
<span style="color:#808080;line-height:23px;">{{crowddata.task.company_desc}}</span>
</view>
</view>
<view v-if='type==1' class="schedule" style="margin: 12px 3vw 25px 3vw;">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-size: 15px;font-weight: bold;">竞标方案</view>
</view>
<div v-if="userprogramme && userprogramme.period"
style="font-size: 14px;text-align:left;color: #333333;margin:10px 0px;line-height:25px;">
<p>竞标日期{{userprogramme.apply_time?userprogramme.apply_time.slice(0,10):'无'}}</p>
<p>竞标工期{{userprogramme.period?userprogramme.period+'天':'无'}}</p>
<p>竞标优势{{userprogramme.competition_edge?userprogramme.competition_edge:'无'}}</p>
<p>竞标附件
<span @click="openurl(userprogramme.attachment)" v-if="userprogramme.attachment"
style="color:#1578ED;cursor: pointer;">项目附件</span>
<span v-else style="margin-left: -3px"></span>
</p>
</div>
</view>
<view class="submitt" v-if="crowddata.task.task_status == 0">
<!-- style="letter-spacing:0.5rem" -->
<view v-if='type==1' class="button-g"
style="width:100%;margin-left:0;border-radius: 10px;background: #909399;">
<p>已竞标</p>
</view>
<view v-else class="button-g" style="width:100%;margin-left:0;border-radius: 10px;" @click="application">
<p>竞标报名</p>
</view>
</view>
<view class="submitt" v-else>
<!-- style="letter-spacing:0.5rem" -->
<view class="button-g" style="width:100%;margin-left:0;border-radius: 10px;background: #A8Aeb6;">
<p>报名结束</p>
</view>
</view>
<u-popup v-model="isPopupShow" @close="close" @open="open" mode="bottom" length="80%" height='350px'
border-radius="15" :closeable='true' :mask-close-able="false">
<!-- <view class='peodi'>
<u-icon name="error-circle-fill" color="#FE5517" size="35"></u-icon>
<span class="poptext">确定要竞标此众包任务吗</span>
</view> -->
<view style="background:#66666;padding:20px 0px 30px 10px; ">
<view class='peodi'>提交竞标方案</view>
<u-line></u-line>
<view class="sinput">
<p style="color:#fa3534;margin-right:3px">* </p>
<img src="/static/crowd/commny.png" alt="">
<view style="display: flex;align-items: center;">
<u-input v-model="biddingobj.period" placeholder='请输入预算周期' borrder="true" />
<span style="margin-left:5px;"></span>
</view>
</view>
<view class="sinputrt">
<p style="color:#fa3534;margin-right:3px">* </p>
<img src="/static/crowd/like.png" alt="">
<u-input v-model="biddingobj.competitionEdge" placeholder='请输入竞标优势...' type="textarea"
auto-height="true" />
</view>
<!-- <view class="sinput" style="align-items: baseline;margin:20px 0 50px 0;">
<img src="/static/crowd/fjupload.png" alt="">
<u-upload ref="upload" width='100px' height='100px'
max-count="1"
:action="action"
:header="headers"
:auto-upload="true"
:custom-btn="true"
:show-progress="false"
:limitType='typeupload'
:deletable="true"
:file-list="biddingobj.attachment"
@on-success="(data,index,lists) => {fielUploadSuc(data,index,lists) }"
@on-remove="(index, lists, name)=>{deleteUpfile(index)}"
@on-error="(data,index, lists)=>{errorUpfile(data,index, lists)}"
>
<view slot="addBtn" class="slot-btn" hover-class="slot-btn__hover" hover-stay-time="150">
<view >
<u-icon name="arrow-upward" color="#B3B3B3" size='40'></u-icon>
</view>
</view>
</u-upload>
</view>
<p style="margin:-83px 0 0 40px;color: #1578ED;" v-if="biddingobj.attachment">已上传</p>
<p v-if="biddingobj.attachment==''" style="margin-left: 30px;">上传文件最大限 <span style="color: #F0AA2F;">20M</span> </p>
-->
</view>
<!-- <u-line ></u-line> -->
<view class="submitt" style="display: flex;justify-content: space-between;">
<view class="button-g"
style="width:43vw;background:#FFFFFF;border: 1px solid #D9D9D9;color: #666666;margin-left:0"
@click="popcilk('cancel')">取消</view>
<view @click="popcilk('determine')" class="button-g"
style="width:43vw;background:linear-gradient(90deg, #5EA6FD, #1A81F9);color: #FFFFFF;margin-left:0">
确定</view>
</view>
</u-popup>
<u-toast ref="uToast" />
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下'
show-cancel-button='true' cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirmtt"
@cancel='tokenshow=false'></u-modal>
<u-modal v-model="totalshow" @confirm="taskconfirm" content='恭喜您竞标成功,请等待竞标结果通知。' ref="uModal" confirm-text='确定'
:show-title='false'></u-modal>
<u-modal title='提示' v-model="certifshow" @confirm="certifconfirm" content='未实名认证的用户无法报名,请先去个人中心做实名认证'
ref="ucertif" confirm-text='去实名认证' :show-title='false'></u-modal>
<!-- :async-close="true" -->
</view>
</template>
<script>
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import mixin from '@/utils/mixin/index.js'
export default {
mixins: [mixin],
data() {
return {
base: this.http.baseUrl,
certifshow: false,
isPopupShow: false,
crowddata: null,
totalshow: false,
tokenshow: false,
biddingobj: {
taskId: '',
applicantId: '',
period: '',
competitionEdge: '',
attachment: ''
},
typeupload: ['pdf', 'doc', 'docx', ],
headers: {
Authorization: 'Bearer ' + uni.getStorageSync('accessToken'),
},
action: 'https://www.keyitest.cn/prod-api/upload',
//
applicantlist: [{
label: '个人测试者',
value: '0'
},
{
label: '认证测试公司',
value: '1'
},
{
label: '个人测试者/认证测试公司',
value: '2'
},
],
//
onsiteTypelist: [{
label: '无需驻场',
value: '0'
},
{
label: '偶尔驻场',
value: '1'
},
{
label: '定期驻场',
value: '2'
},
],
//
processStatuslist: [{
label: '竞标中',
value: 0
},
{
label: '竞标成功',
value: 1
},
{
label: '待验收',
value: 3
},
{
label: '确认完成',
value: 4
},
// {label: '', value:4},
// {label: '', value:5},
// {label: '', value:6},
// {label: '', value:7},
// {label: '', value:8},
],
userinform: null,
type: '',
testerdata: {}, //
userprogramme: {}, //
}
},
filters: {
filtersRichText(html) { //
if (html) {
let newContent = html.replace(/<img[^>]*>/gi, (match, capture) => {
match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
return match;
});
newContent = newContent.replace(/style="[^"]+"/gi, (match, capture) => {
match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi,
'max-width:100%;');
return match;
});
// let newContentsss = html.replace(/<span[^>]*>/gi, (match, capture)=>{
// console.log('sss---',match, capture)
// if(capture==12428 || capture==12693){
// match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
// match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
// match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
// }
// return match;
// });
newContent = newContent.replace(/<br[^>]*\/>/gi, '');
newContent = newContent.replace(/\<img/gi,
'<img style="max-width:100%;height:auto;display:inline-block;margin:10rpx auto;"');
// newContentsss = newContentsss.replace(/\<span/gi,
// '<span style="word-wrap:break-word;width:90vw;display:block;margin:10rpx auto;"');newContentsss;
return newContent;
}
}
},
onShow() {
let Token = uni.getStorageSync('accessToken');
this.userinform = uni.getStorageSync('wxUserInfo');
if (Token && this.userinform) {
console.log('this.userinform---', this.userinform)
this.http.quickGet(`/tester/cert/apply/${this.userinform.userId}`, true).then(res => {
console.log('实名认证信息onShow---', res)
if (res.data.code == 200) {
this.testerdata = res.data.data
}
})
}
},
onLoad(options) {
this.type = options.type;
if (this.type && this.type == 1) {
uni.setNavigationBarTitle({
title: '我的众包'
});
} else {
uni.setNavigationBarTitle({
title: '任务详情'
});
}
this.userinform = uni.getStorageSync('wxUserInfo');
// if(this.userinform){
// this.http.quickGet(`/crowdsource/applicant/${options.id}`,true).then(res=>{
// console.log('---',res)
// if(res.data.data.length>0){
// let testerdata=res.data.data
// console.log('testerdata---',testerdata)
// this.userprogramme=testerdata.find(item=>this.userinform.userId==item.applicantId)
// console.log('---',this.userprogramme)
// }
// })
// }
const url = this.userinform && this.userinform.userId ? `?userId=${this.userinform.userId}` : ''
this.http.quickGet(`/crowdsource/detail/${options.id}${url}`, false).then(res => {
this.crowddata = res.data;
this.userprogramme = res.data.user_plan ? res.data.user_plan : {}
let currentis = null
if (this.crowddata.entrants.length > 0) {
this.crowddata.entrants.forEach(item => {
if (this.userinform.userId == item.user_id) {
currentis = item
}
})
}
console.log('众包详情', res.data)
if (currentis) {
// console.log('currentis---',currentis)
this.type = 1
}
})
this.userinform = uni.getStorageSync('wxUserInfo');
if (this.userinform) {
this.http.quickGet(`/tester/cert/apply/${this.userinform.userId}`, true).then(res => {
if (res.data.code == 200) {
this.testerdata = res.data.data
}
})
}
},
methods: {
findLabelValueByPropnew,
//
goCompanyInfo() {
uni.navigateTo({
url: `/pages/index/testcrowdsourc/companyInfo?taskInfo=${encodeURIComponent(JSON.stringify(this.crowddata.task))}`
})
},
//
fielUploadSuc(data, index, lists) {
console.log('-', data, '*', index, lists)
if (data.code === 200) {
this.biddingobj.attachment = data.filePath
console.log('竞标附件', this.biddingobj.attachment)
}
},
//
deleteUpfile(index, lists) {
console.log('del头像', this.biddingobj.attachment)
this.biddingobj.attachment = ''
},
errorUpfile(data, index) {
},
application() {
this.userinform = uni.getStorageSync('wxUserInfo');
let accessToken = uni.getStorageSync('accessToken');
console.log('open', this.userinform, this.crowddata.task);
if (!accessToken) {
this.tokenshow = true
} else {
this.http.quickGet(`/tester/cert/apply/${this.userinform.userId}`, true).then(res => {
// console.log('---',res)
if (res.data.code == 200) {
this.testerdata = res.data.data
if (parseInt(this.userinform.userId) == this.crowddata.task.publisher_id) {
uni.showToast({
title: '您是发布者,无法竞标自己发布的任务。',
icon: 'warning',
duration: 2000
});
return;
}
console.log('testerdata.status---', this.testerdata)
if (this.testerdata) {
if (this.testerdata.status != 1) { //
this.certifshow = true;
} else {
if (this.crowddata.task.applicant_type != 2) { //2
if (this.crowddata.task.applicant_type == 0) { //
if (this.userinform.companyStatus != 0) {
uni.showToast({
title: '您是认证测试公司或正在申请成为认证测试公司,无法认证该任务,该任务只允许个人测试者竞标。',
icon: 'none',
duration: 1000
});
return;
}
} else { //
if (this.userinform.companyStatus != 2) {
uni.showToast({
title: '对不起,您是个人测试者,该任务只允许认证测试公司竞标。',
icon: 'none',
duration: 3000
});
return;
}
}
}
this.isPopupShow = true
this.biddingobj = {
taskId: '',
applicantId: '',
period: '',
competitionEdge: '',
attachment: ''
}
}
} else {
this.certifshow = true;
}
}
})
}
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
// console.log('close');
},
confirmtt() {
uni.navigateTo({
url: '/pages/personal/login'
})
},
taskconfirm() {
// setTimeout(() => {
// 3
// this.totalshow = false;
// loadingref
// this.$refs.uModal.clearLoading();
uni.navigateTo({
url: '/pages/personal/mycrowdtest/mycrowdtest'
})
// }, 1000)
},
//
certifconfirm() {
this.certifshow = false;
uni.navigateTo({
url: '/pages/personal/setup/certification'
})
},
popcilk(type) {
if (type == 'cancel') {
this.isPopupShow = false
} else if (type == 'determine') {
let attachment = '';
console.log('附件', this.biddingobj.attachment)
if (this.biddingobj.attachment.indexOf('https') == 0) {
attachment = this.biddingobj.attachment
} else {
if (this.biddingobj.attachment == '') {
attachment = ''
} else {
attachment = 'https://www.keyitest.cn/prod-api' + this.biddingobj.attachment
}
}
if (!this.biddingobj.period) {
this.$refs.uToast.show({
title: '请输入预算周期',
type: 'info'
})
return;
}
if (!/^[1-9]\d*$/.test(this.biddingobj.period)) {
this.$refs.uToast.show({
title: '周期需填写正整数',
type: 'info'
})
return;
}
if (this.biddingobj.period > 1000) {
this.$refs.uToast.show({
title: '周期最多为1000天',
type: 'info'
})
return;
}
if (!this.biddingobj.competitionEdge) {
this.$refs.uToast.show({
title: '请输入竞标优势',
type: 'info'
})
return;
}
if (this.biddingobj.competitionEdge.length > 2800) {
this.$refs.uToast.show({
title: '最多输入2800字',
type: 'info'
})
return;
}
let data = {
taskId: this.crowddata.task.task_id,
applicantId: this.userinform.userId,
period: parseInt(this.biddingobj.period),
competitionEdge: this.biddingobj.competitionEdge,
attachment,
}
console.log('竞标数据', data)
// return;
this.http.quickPost(`/crowdsource/bidding`, data, true).then(res => {
console.log('竞标结果', res)
// return;
this.isPopupShow = false
if (res.data.data.code == 200) {
this.totalshow = true
// this.$refs.uToast.show({ title: '', type: 'success'})
} else {
this.$refs.uToast.show({
title: res.data.msg,
type: 'info'
})
}
// let reuse=parseInt(res.data.data)
// console.log('',res.data.data,typeof(res.data.data),typeof(reuse))
// if(reuse){
// if(reuse==1){
// this.$refs.uToast.show({
// title: "",
// type: 'warning',
// duration: 2000,
// })
// }else{
// this.totalshow=true
// }
// }else{
// if(reuse==0){
// this.totalshow=true
// }
// }
})
}
},
//
callingphone(phone) {
uni.makePhoneCall({
//
phoneNumber: phone,
//
success: (res) => {
console.log('调用成功!')
// uni.showToast({
// title: ''
// })
},
//
fail: (res) => {
console.log('调用失败!')
}
});
},
openurl(url) {
// uni.downloadFile({
// url:url, //
// success: (res) => {
// if (res.statusCode === 200) {
// console.log('');
// }
// }
// });
// return;
if (url != '') {
// console.log('999---',url,url.lastIndexOf('https'),url.slice(32))
var index = url.indexOf('https'); //
var num = 0; //
while (index !== -1) {
// console.log(index); //
num++; //
index = url.indexOf('https', index + 1); //
}
if (num == 1) {
// this.$message.success('')
// var wxFile = uni.getFileSystemManager()
uni.downloadFile({
url, //
success: (res) => {
if (res.statusCode === 200) {
// wxFile.saveFile({
// tempFilePath:filePaths,
// //tempFilePathfilePath
// filePath:`${wx.env.USER_DATA_PATH}/a.docx`,
// })
uni.openDocument({
showMenu: true,
filePath: res.tempFilePath,
success: function(res) {
console.log('打开文档成功');
}
});
}
}
});
} else {
console.log('num2---', url.slice(32 * (num - 1)))
// this.$message.success('')
let uelt = url.slice(32 * (num - 1))
// window.location.href=uelt
uni.downloadFile({
url: url, //
success: (res) => {
if (res.statusCode === 200) {
// console.log('');
uni.openDocument({
showMenu: true,
filePath: res.tempFilePath,
success: function(res) {
console.log('打开文档成功');
}
});
}
}
});
}
}
},
}
}
</script>
<style>
.ratebox ::v-deep .u-icon {
font-size: 13px !important;
}
.logobg {
width: 100vw;
object-fit: contain;
}
.schedule {
width: 94vw;
margin: 12px 3vw;
background: #FFFFFF;
padding: 25rpx;
border-radius: 10rpx;
}
.tabone {
padding: 6rpx;
color: #FFFFFF;
background: #2286FA;
border-radius: 5rpx;
font-size: 20rpx;
text-align: center;
margin-bottom: 10rpx;
}
.vertical {
width: 6rpx;
height: 26rpx;
background: #1578ED;
border-radius: 10rpx;
margin-right: 5px;
}
.submitt {
height: 70px;
font-size: 20px;
background: #FFFFFF;
box-shadow: -4px 7px 18px 0px rgba(248, 164, 54, 0.33);
position: fixed;
bottom: 0;
width: 100vw;
padding: 10px 20px;
}
.success {
width: 130rpx;
height: 40rpx;
background: #21B96C;
border-radius: 22rpx;
font-weight: 500;
font-size: 22rpx;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
}
.success image {
width: 20rpx;
height: 20rpx;
}
.success1 {
width: 130rpx;
height: 40rpx;
}
.button-g {
width: 280rpx;
height: 80rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 43rpx;
text-align: center;
line-height: 80rpx;
color: #FFFFFF;
font-size: 33rpx;
margin-left: 13px;
}
/* line-height: 15%; */
.peodi {
/* line-height: 15%; */
margin: 5px auto 15px;
width: 260px;
text-align: center;
color: #1A1A1A;
font-size: 36rpx;
font-weight: bold;
}
.poptext {
font-size: 33rpx;
font-weight: 500;
color: #333333;
line-height: 24rpx;
margin-left: 5px;
}
.signst {
display: flex;
flex-direction: column;
align-items: center;
margin: 5px;
}
.signst img {
width: 40px;
height: 40px;
border-radius: 50%;
}
.signst p {
font-size: 11px;
margin-top: 5px;
}
.article-body {
line-height: 26px !important;
/* width: 100%; */
/* color:rgb(17, 16, 16)!important; */
}
.article-body p {
font-size: 34rpx !important;
color: #666666 !important;
line-height: 35rpx !important;
background-color: transparent !important;
}
.article-body>>>span {
font-size: 34rpx !important;
color: #666666 !important;
line-height: 35rpx !important;
background-color: transparent !important;
}
.sinput {
display: flex;
align-items: center;
height: 50px;
padding: 10px 0;
margin: 10px 0 0 0;
}
.sinput img {
width: 20px;
height: 20px;
margin-right: 10px;
}
.sinput .u-input {
width: 75vw;
height: 35px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding: 0 10px !important;
}
.sinputrt {
display: flex;
/* align-items: center; */
height: 50px;
padding: 10px 0;
margin: 0px 0 70px 0;
}
.sinputrt img {
width: 20px;
height: 20px;
margin-right: 10px;
}
.sinputrt .u-input {
width: 75vw;
height: 100px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px !important;
}
.slot-btn {
/* width:75vw;
height: 45px;
display: flex;
justify-content: center;
align-items: center;
background: rgb(244, 245, 246);
border-radius: 10rpx;
border: 1px solid #C2C2C2;
zIndex:99; */
width: 80px;
height: 80px;
background: #FFFFFF;
border-radius: 4rpx;
border: 1px solid #E6E6E6;
line-height: 80px;
text-align: center;
}
.slot-btn__hover {
background-color: rgb(235, 236, 238);
}
.u-list-item {
margin: 0 !important;
background: transparent !important;
color: #000000 !important;
width: 100px !important;
height: 28px !important;
zIndex: 0 !important;
border-radius: 0 !important;
border: none !important;
}
/* .u-list-item :before {
content: "已上传";
position: absolute;
left: 7px;
} */
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,695 @@
<template>
<view>
<view class="tabledetails">
<!-- <el-tag type="success">标签二</el-tag> -->
<!-- <img class="logobg" src="http://image.keyitest.cn/static/index/cspx/13.png" alt="" /> -->
<!--background-color: #FFFFFF; <img class="logobg" src="http://image.keyitest.cn/static/index/cspx/16.png" alt="" /> -->
<view style="padding:2vh 13px;">
<rich-text v-if='issueinform' class="article-body" :nodes="issueinform&&issueinform.detail | filtersRichText"></rich-text>
<u-divider v-else bg-color='transparent'>加载中...</u-divider>
<!-- <u-image v-else src="https://cdn.uviewui.com/uview/example/fade.jpg">
<u-loading slot="loading"></u-loading>
</u-image> -->
</view>
</view>
<view class="submitt">
<view v-if="wxUserInfo">
<view v-if='currentsign&&!register' class="bottbtn" @click="popcilk('sign')" >
<!-- <img src="http://image.keyitest.cn/static/index/testpx/58.png" alt=""> -->
<p v-if="currentsign.type==0">培训报名</p>
<p v-if="currentsign.type==1">考试报名</p>
</view>
<view v-else-if='register' class="bottbtn" @click="popcilk('registered')" style="background: #909399;">
<!-- <img src="http://image.keyitest.cn/static/index/testpx/58.png" alt=""> -->
<p>已报名</p>
</view>
<view v-else class="bottbtn" @click="popcilk('end')" style="background: #909399;">
<!-- <img src="http://image.keyitest.cn/static/index/testpx/58.png" alt=""> -->
<p >报名已结束</p>
</view>
</view>
<view v-else>
<view class="bottbtn" @click="onlinesign">
<!-- <img src="http://image.keyitest.cn/static/index/testpx/58.png" alt=""> -->
<p >立即报名</p>
</view>
</view>
</view>
<u-popup style="background:#66666;padding: 20px;" v-model="isPopupShow" @close="close" @open="open" mode="bottom" length="80%" height='630rpx' border-radius="15" :closeable='true' :mask-close-able="false">
<view style="background:#66666;padding: 20px;">
<view class='peodi'> 填写报名信息 </view>
<u-line></u-line>
<!-- <u-form :model="signobj" ref="signobj" label-position='left' label-width='120' border-bottom='false' >
<u-form-item label="姓名:" prop="name" border-bottom='false' required='true'> -->
<view class="sinput">
<!-- <img src="http://image.keyitest.cn/static/index/testpx/xingming.png" alt=""> -->
<u-input v-model="signobj.name" placeholder='请输入您的名字' border="true" />
</view>
<!-- </u-form-item>
<u-form-item label= "QQ号:" prop="qq" border-bottom='false' required='true'>-->
<view class="sinput">
<!-- <img style="height: 30px;" src="http://image.keyitest.cn/static/index/testpx/shouji.png" alt=""> -->
<u-input v-model="signobj.qq" placeholder='请输入您的QQ号' border="true" />
</view>
<!-- </u-form-item>
<u-form-item labe l="微信号:" prop="wechat" border-bottom='false' required='true'>-->
<view class="sinput">
<!-- <img style="height: 30px;" src="http://image.keyitest.cn/static/index/testpx/shouji.png" alt=""> -->
<u-input v-model="signobj.wechat" placeholder='请输入您的微信号' border="true" />
</view>
<!-- </u-form-item>
</u-form> -->
</view>
<u-line style="margin-top: 20px;"></u-line>
<view class="submitt" style="justify-content: space-around;margin-top:0px;">
<view class="button-g" style="width:43vw;background:#FFFFFF;border: 1px solid #1578ED;color: #1578ED;margin-left: 0;" @click="resource('setes')">重置</view>
<view class="button-g" style="width:43vw;background: linear-gradient(90deg, #FF8600, #FE2B2B);color: #FFFFFF;margin-left:2vw" @click="resource('singup')">立即报名</view>
</view>
</u-popup>
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下' show-cancel-button='true'
cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirms" @cancel='tokenshow=false'></u-modal>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
isPopupShow:false,
signobj:{name:'',qq:'',wechat:''},
courselist:'',//
wxUserInfo:null,//
currentsign:null,
register:null,
issueId:'',
tokenshow:false,
issueinform:null,
type:'',//
certRules: {
name: [{required: true, message: '请输入姓名', trigger: 'change',},
{max: 4, message: '最多输入4个中文', trigger: 'change' },
{
pattern:
/^(?:[\u4e00-\u9fa5·]{2,16})$/,
message: "请输入中文",
trigger: "blur",
},],
qq: [{ required: true, message: '请输入QQ号', trigger: 'change'},
{
pattern:
/^[1-9][0-9]{4,9}$/,
message: "请输入正确的QQ号",
trigger: "blur",
},
// {max:18, message: 'qq18', trigger: 'change' },/^[a-zA-Z]([-a-zA-Z0-9]{5,19})+$/
// {min:18, message: '18', trigger: 'change' },
],
wechat: [{ required: true, message: '请输入微信号', trigger: 'blur'},
{
pattern:
/^[a-zA-Z]([-a-zA-Z0-9]{5,19})+$/,
message: "请输入正确的微信号",
trigger: "blur",
},
],
},
}
},
onReady(){
// this.$refs.signobj.setRules(this.certRules);
},
filters: {
filtersRichText(html) { //
if(html){
let newContent = html.replace(/<img[^>]*>/gi, (match, capture)=>{
match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
return match;
});
newContent = newContent.replace(/style="[^"]+"/gi, (match, capture)=>{
match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
return match;
});
// let newContentsss = html.replace(/<span[^>]*>/gi, (match, capture)=>{
// console.log('sss---',match, capture)
// if(capture==12428 || capture==12693){
// match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
// match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
// match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
// }
// return match;
// });
newContent = newContent.replace(/<br[^>]*\/>/gi, '');
newContent = newContent.replace(/\<img/gi,
'<img style="max-width:100%;height:auto;display:inline-block;margin:10rpx auto;"');
// newContentsss = newContentsss.replace(/\<span/gi,
// '<span style="word-wrap:break-word;width:90vw;display:block;margin:10rpx auto;"');newContentsss;
return newContent;
}
}
},
onLoad(option) {
this.issueId=option.issueId
console.log('issueId',this.issueId)
let type=option.type;
if(type&&type==1){
uni.setNavigationBarTitle({
title: '我的报名'
});
}else{
uni.setNavigationBarTitle({
title: '在线报名'
});
}
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
this.register = uni.getStorageSync('register');
// console.log('register--',this.register)
// console.log('wxUserInfo---',this.wxUserInfo)
this.http.quickGet(`/train/course/list?pageNum=1&pageSize=100`).then(res=>{
// console.log('res---', res)
this.courselist = res.data.rows;
if(this.courselist.length>0){
this.courselist.sort((a,b)=>{
return a.orderNum-b.orderNum
})
this.courselist.forEach(item=>{
if(item.children.length>0){
item.children.sort((a,b)=>{
return a.orderNum-b.orderNum
})
if(item.orderNum==1){
item.index='一'
}else if(item.orderNum==2){
item.index='二'
}else if(item.orderNum==3){
item.index='三'
}else if(item.orderNum==4){
item.index='四'
}else if(item.orderNum==5){
item.index='五'
}
}
})
// console.log('--', this.courselist)
}
})
this.http.quickGet(`/train/issue/detail/${this.issueId}`).then(res=>{
console.log('报名期号信息---',res)
this.issueinform=res.data
})
if(this.wxUserInfo){
// this.issigin();
console.log('this.wxUserInfo---',this.wxUserInfo)
this.http.quickGet(`/train/issue/list`,true).then(res=>{
// console.log('---',res)
let statuslist=res.data
let flag=null
if(statuslist.length>0){
statuslist.forEach(item=>{
if(item.status==1){
flag=item
}
})
}
if(flag){
this.currentsign=flag
}
console.log('当前报名类型---',this.currentsign)
})
}
},
methods: {
popcilk(type){
if(type=='sign'){
this.isPopupShow=true
}else if(type=='end'){
// this.$refs.uToast.show({
// title: '',
// type: 'warning',
// })
}else if(type=='registered'){
// this.$refs.uToast.show({
// title: '',
// type: 'success',
// })
}else{
this.$refs.uToast.show({
title: '功能暂未开通',
type: 'info',
// url: '/pages/index/index'
})
}
},
onlinesign(){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
this.isPopupShow=true
}
},
confirms(){
uni.navigateTo({
url:'/pages/personal/login'
})
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
// console.log('close');
},
resource(type){
if(type=='setes'){
this.signobj={name:'',qq:'',wechat:''}
}else{
if(!this.signobj.name){
this.$refs.uToast.show({
title: '请输入姓名',
type: 'info',
})
return;
}
if(this.signobj.name.length>4){
this.$refs.uToast.show({
title: '姓名最多输入4个中文',
type: 'info',
})
return;
}
if(!/^(?:[\u4e00-\u9fa5·]{2,16})$/.test(this.signobj.name)){
this.$refs.uToast.show({
title: '姓名为中文',
type: 'info',
})
return;
}
if(!this.signobj.qq){
this.$refs.uToast.show({
title: '请输入qq号',
type: 'info',
})
return;
}
if(!/^[1-9][0-9]{4,9}$/.test(this.signobj.qq)){
this.$refs.uToast.show({
title: '请输入正确的QQ号',
type: 'info',
})
return;
}
if(!this.signobj.wechat){
this.$refs.uToast.show({
title: '请输入微信号',
type: 'info',
})
return;
}
if(!/^[a-zA-Z]([-a-zA-Z0-9]{5,19})+$/.test(this.signobj.wechat)){
this.$refs.uToast.show({
title: '请输入正确的微信号',
type: 'info',
})
return;
}
// this.$refs.signobj.validate(valid => {
// if (valid) {
let data={
userId:this.wxUserInfo.userId,
userName:this.wxUserInfo.userName,
phonenumber:this.wxUserInfo.phonenumber,
email:this.wxUserInfo.email,
sex:this.wxUserInfo.sex,
company:this.wxUserInfo.companyName,
name:this.signobj.name,
qq:this.signobj.qq,
wechat:this.signobj.wechat,
issueId:this.issueinform.issueId,
// issue:this.issueinform.issue,
category:this.currentsign.type,
}
console.log('data',data)
// return;
if(this.currentsign){
if(this.currentsign.type==0){
this.http.quickPost(`/train/trainApply`,data,true).then(res=>{
if(res.data.code==200){
this.$refs.uToast.show({
title: '报名成功',
type: 'success',
// isTab:true,
url:'pages/personal/mysignup/notice'
})
setTimeout(()=>{
this.isPopupShow=false
},1000)
// this.issigin();
uni.setStorageSync('register', true)
}
})
}else{
this.http.quickPost(`/train/examApply`,data,true).then(res=>{
if(res.data.code==200){
this.$refs.uToast.show({
title: '报名成功',
type: 'success',
// isTab:true,
url:'pages/personal/mysignup/notice'
})
setTimeout(()=>{
this.isPopupShow=false
},1000)
// this.issigin();
uni.setStorageSync('register', true)
}
})
}
}
// }else{
// console.log('',this.signobj)
// }
// })
}
}
}
}
</script>
<style>
.tabledetails{
width:100vw;
/* height: 100vh; */
/* background-color: #FFFFFF; */
padding:0 13px 13px 13px;
}
.logobg {
width:100%;
height:32vw;
margin-bottom:-7px;
}
.deyalimg{
width:100%;
height:4.8vw;
margin:5px 0;
object-fit: cover;
}
.statictosol{
width:48%;
height:200px;
background: #FFFFFF;
border-radius: 10rpx;
text-align: center;
margin-top: 20px;
padding: 10px;
}
.statictosol img{
width:26vw;
height:21vw;
}
.statictosol p{
font-size:.9rem;
color:#808080;
margin-bottom: 5px;
line-height:21px
}
.lighr{
width:28vw;
height:20vw;
}
.practice{
display: flex;
justify-content:space-between;
background-color: #FFFFFF;
padding:13px;
width: 100%;
margin:15px 0;
}
.lighrt{
width:22vw;
height:22vw;
}
.linblue{
width: 46rpx;
height: 5rpx;
background: #1578ED;
border-radius: 3rpx;
margin: 10px auto;
}
.buttonobj{
width: 320rpx;
height: 70rpx;
background: linear-gradient(145deg, #33CABC, #39B4A0);
border-radius:50rpx;
font-size: 34rpx;
font-weight: bold;
color: #FFFFFF;
text-align: center;
line-height:70rpx;
margin: 30px auto -10px auto;
}
.course{
background-color: #FFFFFF;
padding:10px;
width: 100%;
margin:15px 0;
font-size: 26rpx;
color: #808080;
}
.course p{
margin:10px 0;
line-height: 22px;
}
.course img{
width: 28rpx;
height: 28rpx;
margin-right:5px;
}
.software{
display: flex;
align-items: center;
margin-top: -10px;
}
.master{
display: flex;
width: 170px;
margin: 20px auto;
align-items: center;
justify-content: space-around;
}
.master p{
font-size:36rpx;
color: #1A1A1A;
font-weight: bold;
}
.xline{
width: 11rpx;
height: 39rpx;
background: #1578ED;
transform: rotate(18deg);
}
.interface{
display: flex;
justify-content:space-between;
flex-wrap: wrap;
}
.testet{
/* height:120rpx; */
width:21vw;
background: #FFFFFF;
border-radius: 8rpx;
text-align: center;
padding: 15px 0;
margin:0 0 10px 0
}
.testet img{
width:60rpx;
height:65rpx;
}
.testet p{
font-size:28rpx;
color: #4D4D4D;
margin-top: 5px;
}
.teams{
background: #FFFFFF;
width: 100%;
padding:15px 12px ;
border-radius: 8rpx;
font-size: 27rpx;
color: #808080;
margin-top: 80px;
}
.teams img{
width:27vw;
height:32vw;
margin-top:-58px;
margin-right:10px;
}
.submitt{
height:55px;
font-size: 20px;
background: #FFFFFF;
margin-top:60px;
position: fixed;
bottom: 0;
width: 100vw;
display: flex;
justify-content: space-between;
}
.bottbtn{
width:94vw;
margin:7px 3vw;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:43rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
margin-left:13px;
}
.bottbtn img{
width:23px ;
height:23px ;
margin-right: 10px;
}
.peodi{
/* line-height: 15%; */
margin:5px auto 15px;
width: 260px;
text-align: center;
color: #1A1A1A;
font-size:36rpx;
font-weight: bold;
}
.button-g{
width:280rpx;
height: 80rpx;
background:transparent;
border-radius:43rpx;
text-align: center;
line-height:80rpx;
color: #FFFFFF;
font-size: 33rpx;
margin-left:13px;
}
.sinput{
display: flex;
align-items: center;
height:50px;
padding: 10px;
margin-left:30px
}
.sinput img{
width:20px;
height:20px;
margin-right: 10px;
padding-right: 5px;
}
.u-input{
width:72vw;
height:35px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx;
padding-left: 10px!important;
}
.innovate{
width:41vw;
height:24vw ;
}
.tableclas{
/* width: 230rpx;
height: 56rpx; */
background: #DEECFC;
border-radius:30rpx;
padding:7px 13px;
font-size: 28rpx;
color: #1A7AED;
margin-right:10px ;
}
.vertical{
width: 6rpx;
height: 26rpx;
background: #1578ED;
border-radius: 3rpx;
margin-right:10px ;
}
.online{
width: 100%;
height: 70rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 35rpx;
line-height: 70rpx;
font-size: 15px;
color:#FFFFFF;
text-align: center;
}
.table_heade{
width: 90%;
text-align: center;
/* margin:5px 0 */
}
.table_kheade{
width: 10%;
text-align: center;
}
.headert{
background-color: #3283BE;
display: flex;
align-items: center;
color:#FFFFFF ;
}
.bodyt{
background-color: #FFFFFF;
display: flex;
align-items: center;
color:#1A1A1A;
/* height: 26px; */
}
.table_obody{
width: 10%;
text-align: center;
}
.table_tbody{
width: 80%;
text-align: left;
padding:4px 8px;
border-left:1px solid #CFDDDD;
border-right:1px solid #CFDDDD;
}
.table_hbody{
width: 10%;
text-align: center;
}
.article-body{
line-height: 26px!important;
/* width: 100%; */
/* color:rgb(17, 16, 16)!important; */
}
.article-body p {
font-size: 34rpx!important;
color: #666666!important;
line-height: 35rpx!important;
background-color:transparent!important;
}
.article-body>>> span {
font-size: 34rpx!important;
color: #666666!important;
line-height: 35rpx!important;
background-color:transparent!important;
}
</style>

@ -0,0 +1,926 @@
<template>
<view>
<view class="tabledetails">
<!-- <img class="logobg" src="http://image.keyitest.cn/static/index/cspx/banner.png" alt="" /> -->
<!-- <img class="logobg" src="http://image.keyitest.cn/static/banner/train_banner_01.png" alt="" /> -->
<u-swiper class="logobg" :list="swipelist" mode='round'></u-swiper>
<view style="margin:15px 0 23px 0;text-align: center;">
<img class="deyalimg" src="/static/index/rjkk.png" alt="">
<p style="color: #999999;font-size:28rpx;">软件可靠性测试主要岗位及职责 </p>
</view>
<view style="background-color: #FFFFFF;padding:12px;width: 100%;border-radius: 10rpx;">
<u-table font-size='22' padding='10rpx 1rpx'>
<u-tr>
<view style="width:13%;">
<u-th >序号</u-th>
</view>
<view style="width:29%;">
<u-th >岗位名称</u-th>
</view>
<view style="width:58%;">
<u-th >岗位职责</u-th>
</view>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>1</u-td></view>
<view style="width:29%;"><u-td>静态测试工程师</u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
负责利用文档审查、代码审查和静态分析,对文档的一致性进行审查,
对软件源码进行控制流、数据流、接口和质量度量等分析
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>2</u-td></view>
<view style="width:29%;"><u-td>单元测试工程师</u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
负责对软件单元以及单元之间的功能、接口、数据结构和逻辑等进行动态测试
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>3</u-td></view>
<view style="width:29%;"><u-td>配置项测试工程师</u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
负责对独立软件配置项的功能、性能和接口等各项需求进行动态测试
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>4</u-td></view>
<view style="width:29%;"><u-td>系统测试工程师 </u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
负责对完整集成的软硬件系统的任务能力、功能、性能和接口等各项
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>5</u-td></view>
<view style="width:29%;"><u-td>功能测试工程师 </u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
对软件(系统)的功能需求逐项进行测试,包括正常/异常场景、功能控制流程、状态转换、
模式切换、超负荷/饱和/最坏情况和合法/非法边界等
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>6</u-td></view>
<view style="width:29%;"><u-td>性能测试工程师 </u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
负责对软件(系统)的性能需求逐项进行测试,包括数据精度、时间精度、
空间占用、数据传输吞吐量和软件并发处理能力等
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>7</u-td></view>
<view style="width:29%;"><u-td>接口测试工程师 </u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
负责对软件(系统)的接口需求进行逐项测试,包括信息格式、信息内容、
时间特性、丢帧、错帧和误码等
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>8</u-td></view>
<view style="width:29%;"><u-td>安全性测试工程师</u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
负责对软件(系统)功能和信息安全性进行测试,包括故障处理模式、异常事件容错、信息保密与防护等
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:13%;"><u-td>9</u-td></view>
<view style="width:29%;"><u-td>可编程逻辑器件 测试工程师 </u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
负责完成软件单元、配置项和系统的功能、性能、接口和逻辑等测试以及时序测试和功耗分析等
</view>
</u-td>
</u-tr>
</u-table>
</view>
<view style="margin-bottom:23px;text-align: center;margin-top:15px">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/cspx/10.png" alt="">
<p style="color: #999999;font-size:28rpx;">培养专业测试专项人才</p>
</view>
<view style="background-color: #FFFFFF;padding: 13px;">
<view class="practice" style="background-color:transparent;padding: 0;margin:0">
<img class="lighr" src="http://image.keyitest.cn/static/index/testpx/6.png" alt="">
<view style="color:#808080;font-size:24rpx;width:58vw;margin-top:5px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">智能软件测试协同创新班</p>
<p style="margin:7px 0">
<span>线下课程</span>
<span style="color: #FC3D3D;margin: 0 5px;">20</span>
<span>课时</span>
</p>
<p>单元测试、配置项测试、测试管理课程等</p>
</view>
</view>
<view>
<view class="master">
<p> — 创新班简介 — </p>
</view>
<view>
<view style="display: flex;justify-content: space-between;">
<img class="innovate" src="http://image.keyitest.cn/static/index/cspx/17.png" alt="">
<img class="innovate" src="http://image.keyitest.cn/static/index/cspx/11.png" alt="">
</view>
<p style="color:#808080;font-size:25rpx;margin-top:10px;line-height: 22px;">北京关键科技股份有限公司联合各大高校共同成立“智能软件测试协同创新实验室”,设立智能软件测试协同创新班,
依据工信部“软件可靠性测试”相关标准要求,开展人才培养,通过项目实践提高学生动手能力、促进学生在校理论学习,增加就业机会。
</p>
</view>
</view>
</view>
<view style="margin-bottom:23px;text-align: center;margin-top:15px ;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/7.png" alt="">
<p style="color: #999999;font-size:28rpx;">助您职业发展未来可期</p>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/8.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 25px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">精品课程 </p>
<p style="margin:7px 0">理论+实际,持续更新最前沿实用技术</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/9.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:10px 0 0 25px;width:55vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">专家讲师 </p>
<p style="margin:10px 0">一线工程师+项目负责人+领域专家</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/10.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:10px 0 0 25px;width:55vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">线下课程 </p>
<p style="margin:10px 0">专家线上授课+师傅带徒弟,一线工程师手把手 项目实操</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/11.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:10px 0 0 25px;width:55vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">技术认证 </p>
<p style="margin:10px 0">国家工信部人才交流中心可靠性测试领域唯一合 作伙伴</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/12.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:10px 0 0 25px;width:55vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">多元就业 </p>
<p style="margin:10px 0">关键科技内聘,客户企业推荐云测平台灵活就业, 自主择业</p>
</view>
</view>
<view v-if="courselist.length>0" style="margin-bottom:23px;text-align: center;margin-top:15px ;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/cspx/6.png" alt="">
<p style="color: #999999;font-size:28rpx;">针对企业用人需求进行线下课程培训</p>
</view>
<!-- border: 1px solid #F5F7FA; -->
<view v-for="(item,key) of courselist" :key="key" style='font-size:11px;line-height: 18px;border-left: 1px solid #F5F7FA;border-right: 1px solid #F5F7FA;'>
<view class="headert">
<view class="table_heade">{{item.index}} 、{{item.courseName}}</view>
<view style="width:.5px;background-color:#CFDDDD;height:26px"></view>
<view class="table_kheade" >课时</view>
</view>
<view v-if='item.children.length>0'>
<view class="bodyt" v-for="(itemd,key) of item.children"
:style="{'border-bottom':itemd.orderNum==item.children.length?'none':'1rpx solid #CFDDDD;'}">
<view class="table_obody">{{itemd.orderNum}}</view>
<!-- <view style="width:.5px;background-color:#CFDDDD;height:26px"></view> -->
<view class="table_tbody">{{itemd.courseName}}</view>
<!-- <view style="width:.5px;background-color:#CFDDDD;height:26px"></view> -->
<view v-if='itemd.period.slice(-1)==0' class="table_hbody">{{itemd.period.slice(0,1)}}</view>
<view v-else class="table_hbody">{{itemd.period}}</view>
</view>
</view>
</view>
<!-- <view >
<img style="width: 100%;height:100vw; margin: 15px 0;" src="/static/index/classshour.png" alt="">
</view> -->
<view class="master">
<view class="xline"></view>
<p> 掌握的测试技能 </p>
<view class="xline"></view>
</view>
<view class="interface">
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/37.png" alt="" />
<p>静态测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/38.png" alt="" />
<p>单元测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/cspx/2.png" alt="" />
<p>配置项</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/43.png" alt="" />
<p>系统测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/cspx/4.png" alt="" />
<p>功能测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/40.png" alt="" />
<p>性能测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/cspx/3.png" alt="" />
<p>接口测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/41.png" alt="" />
<p>安全测试</p>
</view>
<!-- <view class="testet">
<img src="http://image.keyitest.cn/static/index/cspx/1.png" alt="" />
<p>可编辑逻辑器件测试</p>
</view> -->
</view>
<view style="margin-bottom:23px;text-align: center;">
<img class="deyalimg" src="/static/index/rjkk.png" alt="">
<p style="color: #999999;font-size:28rpx;">软件可靠性测试产业人才岗位能力要素 </p>
</view>
<view style="background-color: #FFFFFF;padding:12px;width: 100%;border-radius: 10rpx;">
<u-table font-size='22' padding='10rpx 1rpx'>
<u-tr>
<view style="width:18%;">
<u-th>
<view style="font-size: 13px;">维度</view>
</u-th>
</view>
<view style="width:18%;">
<u-th>
<view style="font-size: 13px;">要素</view>
</u-th>
</view>
<view style="width:64%;">
<u-th>
<view style="font-size: 13px;">说明</view>
</u-th>
</view>
</u-tr>
<u-tr>
<view style="width:18%;"><u-td>专业知识</u-td></view>
<view style="width:18%;" >
<u-td >
<u-td class="tdplas">基础知识</u-td>
<u-td class="tdplasd"> 专业知识</u-td>
</u-td>
</view>
<u-td >
<u-td class="tdplas">
<view style="text-align: left;padding:10rpx;height: 60px;">
指相应岗位人才应掌握的通用知识,主要包括基本理论、
相关标准与规范知识以及有关法律法规、安全、隐私等
</view>
</u-td>
<u-td class="tdplasd">
<view style="text-align: left;padding:10rpx;height: 60px;">
指相应岗位人才完成工作任务所必备的知识,
主要指与具体岗位要求相适应的理论知识、技术要求和操作规程等
</view>
</u-td>
</u-td>
</u-tr>
<u-tr>
<view style="width:18%;"><u-td>技术技能</u-td></view>
<view style="width:18%;" >
<u-td >
<u-td class="tdplas">基本技能</u-td>
<u-td class="tdplasd">专业技能</u-td>
</u-td>
</view>
<u-td >
<u-td class="tdplas">
<view style="text-align: left;padding:10rpx;height: 60px;">
指相应岗位人才为完成工作任务所应具备的对基础知识应用的水平以及熟练程度
</view>
</u-td>
<u-td class="tdplasd">
<view style="text-align: left;padding:10rpx;height: 60px;">
指相应岗位人才为完成工作任务所应具备的对专业知识应用的水平以及对特殊工具使用的掌握
</view>
</u-td>
</u-td>
</u-tr>
<u-tr>
<view style="width:18%;"><u-td>工程实践</u-td></view>
<view style="width:18%;"><u-td>经验 </u-td></view>
<u-td >
<view style="text-align: left;padding:10rpx;line-height: 17px;">
指相应岗位人才在实际工程与项目推进中应当具备的经验
</view>
</u-td>
</u-tr>
<u-tr>
<view style="width:18%;"><u-td>综合能力</u-td></view>
<view style="width:18%;"><u-td>软能力 </u-td></view>
<u-td>
<view style="text-align: left;padding:10rpx;line-height: 17px;">
指相应岗位人才为完成工作任务所应具备的行为特征和综合素质,
包括学习追踪、沟通协调、需求与趋势分析、业务场景把握等技能
</view>
</u-td>
</u-tr>
</u-table>
</view>
<view style="margin-bottom:23px;text-align:center;margin-top: 15px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/13.png" alt="">
<p style="color: #999999;font-size:28rpx;">零基础入学+不限专业/性别+应/往届生均可</p>
</view>
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;align-items: center;">
<view class="statictosol" style="height: 270px;">
<img style="width:39vw ;height:26vw;" src="http://image.keyitest.cn/static/index/testpx/14.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">零基础、易入门 </p>
<view class="linblue"></view>
<p >学习过程中代码内容相对较少,不需要精通Java、C等编程语言,从基础学习,容易学。</p>
</view>
<view class="statictosol" style="height: 270px;">
<img style="width:39vw ;height:26vw;" src="http://image.keyitest.cn/static/index/testpx/15.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">人才缺口大</p>
<view class="linblue"></view>
<p >根据人才市场统计,国内软件测试人才缺口超过30万,且逐年递增。</p>
</view>
<view class="statictosol" style="height: 270px;">
<img style="width:39vw ;height:26vw;" src="http://image.keyitest.cn/static/index/testpx/16.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">发展方向广</p>
<view class="linblue"></view>
<p >各行各业都需要软件测试人才,尤其是IT互联网、军工行业、能源行业、汽车行业</p>
</view>
<view class="statictosol" style="height: 270px;">
<img style="width:39vw ;height:26vw;" src="http://image.keyitest.cn/static/index/testpx/17.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">薪资待遇高</p>
<view class="linblue"></view>
<p >软件测试工程师招聘市场价,起步月薪6-10K,优秀学员年薪可达20万;工</p>
</view>
</view>
<view style="margin-bottom:23px;text-align: center;margin-top: 20px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/cspx/8.png" alt="">
<p style="color: #999999;font-size:28rpx;">所学技术实际应用率高,证书含金量高</p>
</view>
<view class="teams" style="text-align: center;margin-top: 20px;">
<img style="width: 69vw;height: 48vw;margin: 0;" src="http://image.keyitest.cn/static/index/testpx/50.png" alt="">
<p style="color:#1A1A1A;font-size:1rem;font-weight: bold;margin:10px 0 ;">《软件可靠性测试工程师》等级证书</p>
<p style="text-align: left;line-height:22px">1.进入北京关键科技股份有限公司测试人才库且获得创新实验室颁发的培训证书。</p>
<p style="text-align: left;line-height:22px">2.在校期间获得带薪实习机会,丰富真实项目开发履历。</p>
<p style="text-align: left;line-height:22px">3.高薪就业,毕业后成为关键科技的正式员工,成长为优秀的软件测试工程师。</p>
<p style="text-align: left;line-height:22px">4.经培训的学生可以自愿考取工信部初级、中级软件可靠性测试证书,工作满三年后,可以考取高级证书。</p>
</view>
<view style="margin-bottom:23px;text-align: center;margin-top: 20px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/cspx/9.png" alt="">
<p style="color: #999999;font-size:28rpx;">促进学生在校理论学习,增加就业机会 </p>
</view>
<view style="display: flex;margin-bottom:25px ;">
<view v-if="currenttab==1" class="tableclas" >西安科技大学</view>
<view class="tableclas" v-else style="background: #FFFFFF;color: #999999;" @click="taclick('1')">西安科技大学</view>
<view v-if="currenttab==2" class="tableclas">重庆工程学院</view>
<view class="tableclas" v-else style="background: #FFFFFF;color: #999999;" @click="taclick('2')">重庆工程学院</view>
</view>
<view style="background-color: #FFFFFF;padding:13px;display">
<view v-if="currenttab==1">
<view style="display: flex;justify-content: space-between;">
<img class="innovate" style="height: 26vw;" src="http://image.keyitest.cn/static/index/cspx/14.png" alt="">
<img class="innovate" style="height: 26vw;" src="http://image.keyitest.cn/static/index/cspx/12.png" alt="">
</view>
<p style="color:#808080;font-size:25rpx;margin:15px 0; line-height: 22px;text-indent:25px;"> 11月15日上午,智能软件测试协同创
新实验室成立仪式在西安科技大学计算机学院隆重举行,该实验室由北京关键科技股份有限公司与西安科技大学共同成立。关键科技董事长焦华春女士、
总经理张怀珠、总经理助理牛中东、工业和信息化部人才交流中心人才发展处程宇处长、西安科技大学副校长黄英维等领导和嘉宾出席会议。 </p>
<img style="width: 100%;height: 26vw;" src="http://image.keyitest.cn/static/index/cspx/13.png" alt="">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-weight: bold;">报名条件</view>
</view>
<p style="color:#808080;font-size:25rpx;margin:10px 0; line-height: 22px">西安科技大学计算机学院在读学生,热爱计算机、向往软件测试技术的同学均可报名(软件工程专业优先)。</p>
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-weight: bold;">培训内容</view>
</view>
<p style="color:#808080;font-size:25rpx;margin:10px 0; line-height: 22px">学员将参加静态测试、单元测试、配置项测试、
测试管理等课程学习。(注:详见课程计划,不占用正常上课时间,学员不需要承担任何费用。)
</p>
<!-- <view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-weight: bold;">如何报名</view>
</view>
<p style="color:#808080;font-size:25rpx;margin:10px 0; line-height: 22px">计算机学院组织学生报名工作,有意向的同
学加入QQ群【群号:949918433】,实名制入QQ群后关注群消息。
</p> -->
<!-- <view class="online" @click="popcilk('sign')">在线报名</view> -->
</view>
<view v-if="currenttab==2">
<view style="display: flex;justify-content: space-between;">
<img class="innovate" style="height: 26vw;" src="http://image.keyitest.cn/static/index/cspx/17.png" alt="">
<img class="innovate" style="height: 26vw;" src="http://image.keyitest.cn/static/index/cspx/15.png" alt="">
</view>
<p style="color:#808080;font-size:25rpx;margin:15px 0; line-height: 22px;text-indent:25px;">12月21日上午,软件测试创新中心成立
仪式暨软件可靠性测试创新班开班仪式在重庆工程学院行政楼隆重举行,该创新中心在工业和信息化部人才交流中心指导下,由北京关键科技股份有限公司
与重庆工程学院共同成立。工业和信息化部人才交流中心人才发展处副处长唐林、人才发展处干部慕雅竹,重庆工程学院党委副书记常务副校长张业平,
关键科技董事长焦华春、总经理张怀珠、副总经理郭克成、总经理助理校企合作负责人牛中东等领导和嘉宾出席会议。 </p>
<img style="width: 100%;height: 26vw;" src="http://image.keyitest.cn/static/index/cspx/16.png" alt="">
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-weight: bold;">报名条件</view>
</view>
<p style="color:#808080;font-size:25rpx;margin:10px 0; line-height: 22px">重庆工程学院在读学生,热爱计算机、
向往软件测试技术的同学均可报名(限定招生人数 50人)。</p>
<view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-weight: bold;">培训内容</view>
</view>
<p style="color:#808080;font-size:25rpx;margin:10px 0; line-height: 22px">学员将参加静态测试、单元测试、配置项测试、系统测试、测试管理等课程学习。
(注:详见课程计划,不占用正常上课时间,学员不需要承担任何费用。)
</p>
<!-- <view style='display:flex;align-items: center;margin-bottom: 10px;'>
<view class='vertical'></view>
<view style="font-weight: bold;">如何报名</view>
</view>
<p style="color:#808080;font-size:25rpx;margin:10px 0; line-height: 22px">计算机学院组织学生报名工作,有意向的同学加入QQ群【群号:208131247】,
实名制入QQ群后关注群消息。
</p> -->
<!-- <view class="online" @click="popcilk('sign')">在线报名</view> -->
</view>
</view>
<view style="margin-bottom:23px;text-align: center;margin-top: 20px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/51.png" alt="">
<p style="color: #999999;font-size:28rpx;">多形态择业,保障就业工作</p>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/52.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;width: 80vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">自主选择就业 </p>
<p style="margin:7px 0">优势线下实操项目真实,所学技术实际应用率高,证书含金量高。</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/53.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;width: 80vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">择优录取 </p>
<p style="margin:7px 0">培训结束后,根据考核成绩和技术能力,关键科技择优录用。</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/54.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;width: 80vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">推荐录取 </p>
<p style="margin:7px 0">公司的合作伙伴和合作的客户,优先推荐其录用。</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/55.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;width: 80vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">灵活就业 </p>
<p style="margin:7px 0">关键科技自有云测平台灵活就业、灵活用工。</p>
</view>
</view>
</view>
<view style="height:50px;"></view>
<view class="submitt">
<view class="bottbtn" @click="onlinesign" style="height: 55px;">
<img src="/static/index/baoming.png" alt="">
<p>在线报名</p>
</view>
<view class="bottbtn" @click="popcilk('seek')" style="background:#E9F0FA;">
<img src="/static/index/duihuazixun.png" alt="">
<p>立即咨询</p>
</view>
</view>
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下' show-cancel-button='true'
cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirms" @cancel='tokenshow=false'></u-modal>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
tokenshow:false,
isPopupShow:false,
signobj:{name:'',qq:'',wechat:''},
currenttab:1,
educationLevelshow:false,
educationList:[{value:1,label:'高中'},{value:1,label:'大专'},{value:1,label:'本科'},{value:1,label:'硕士'}],
courselist:'',//培训课程列表
wxUserInfo:null,//微信基本信息
register:null,
swipelist:[
'http://image.keyitest.cn/static/banner/train_banner_01.png',
'http://image.keyitest.cn/static/index/cspx/banner.png'
],
}
},
onLoad(optipn) {
let currenttab=optipn.currenttab
if(currenttab){
this.currenttab=currenttab
}
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
this.register = uni.getStorageSync('register');
console.log('register--',this.register)
console.log('wxUserInfo---',this.wxUserInfo)
this.http.quickGet(`/train/course/list?pageNum=1&pageSize=100`).then(res=>{
console.log('res---', res)
this.courselist = res.data.rows;
if(this.courselist.length>0){
this.courselist.sort((a,b)=>{
return a.orderNum-b.orderNum
})
this.courselist.forEach(item=>{
if(item.children.length>0){
item.children.sort((a,b)=>{
return a.orderNum-b.orderNum
})
if(item.orderNum==1){
item.index='一'
}else if(item.orderNum==2){
item.index='二'
}else if(item.orderNum==3){
item.index='三'
}else if(item.orderNum==4){
item.index='四'
}else if(item.orderNum==5){
item.index='五'
}
}
})
console.log('课程培训列表--', this.courselist)
}
})
},
methods: {
onlinesign(){
// let accessToken = uni.getStorageSync('accessToken');
// if(!accessToken){
// this.tokenshow=true
// }else{
let issueId=''
if(this.courselist.length>0){
issueId=this.courselist[0].issueId;
uni.navigateTo({
url:`./signup?issueId=${issueId}`
})
}else{
this.$refs.uToast.show({
title: '当前暂无报名课程',
type: 'info',
// url: '/pages/index/index'
})
}
// }
},
popcilk(type){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
this.$refs.uToast.show({
title: '功能暂未开通',
type: 'info',
// url: '/pages/index/index'
})
}
},
//学校名称切换
taclick(type){
this.currenttab=type;
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
// console.log('close');
},
//选择学历下拉框
educationLevelfirm(e){
console.log('e',e)
this.signobj.education=e[0].value
},
confirms(){
uni.navigateTo({
url:'/pages/personal/login'
})
},
}
}
</script>
<style>
.tabledetails{
width:100vw;
/* height: 100vh; */
/* background-color: #FFFFFF; */
padding:13px;
}
.logobg {
width:100%;
height:32vw;
margin-bottom: 15px;
}
.deyalimg{
width:100%;
height:4.8vw;
margin:5px 0;
object-fit: cover;
}
.statictosol{
width:48%;
height:200px;
background: #FFFFFF;
border-radius: 10rpx;
text-align: center;
margin-top: 20px;
padding: 10px;
}
.statictosol img{
width:26vw;
height:21vw;
}
.statictosol p{
font-size:.9rem;
color:#808080;
margin-bottom: 5px;
line-height:21px
}
.lighr{
width:28vw;
height:20vw;
}
.practice{
display: flex;
justify-content:space-between;
background-color: #FFFFFF;
padding:13px;
width: 100%;
margin:15px 0;
}
.lighrt{
width:22vw;
height:22vw;
}
.linblue{
width: 46rpx;
height: 5rpx;
background: #1578ED;
border-radius: 3rpx;
margin: 10px auto;
}
.buttonobj{
width: 320rpx;
height: 70rpx;
background: linear-gradient(145deg, #33CABC, #39B4A0);
border-radius:50rpx;
font-size: 34rpx;
font-weight: bold;
color: #FFFFFF;
text-align: center;
line-height:70rpx;
margin: 30px auto -10px auto;
}
.course{
background-color: #FFFFFF;
padding:10px;
width: 100%;
margin:15px 0;
font-size: 26rpx;
color: #808080;
}
.course p{
margin:10px 0;
line-height: 22px;
}
.course img{
width: 28rpx;
height: 28rpx;
margin-right:5px;
}
.software{
display: flex;
align-items: center;
margin-top: -10px;
}
.master{
display: flex;
width: 170px;
margin: 20px auto;
align-items: center;
justify-content: space-around;
}
.master p{
font-size:36rpx;
color: #1A1A1A;
font-weight: bold;
}
.xline{
width: 11rpx;
height: 39rpx;
background: #1578ED;
transform: rotate(18deg);
}
.interface{
display: flex;
justify-content:space-between;
flex-wrap: wrap;
}
.testet{
/* height:120rpx; */
width:21vw;
background: #FFFFFF;
border-radius: 8rpx;
text-align: center;
padding: 15px 0;
margin:0 0 10px 0
}
.testet img{
width:60rpx;
height:65rpx;
}
.testet p{
font-size:28rpx;
color: #4D4D4D;
margin-top: 5px;
}
.teams{
background: #FFFFFF;
width: 100%;
padding:15px 12px ;
border-radius: 8rpx;
font-size: 27rpx;
color: #808080;
margin-top: 80px;
}
.teams img{
width:27vw;
height:32vw;
margin-top:-58px;
margin-right:10px;
}
.submitt{
height:55px;
font-size: 20px;
background: #FFFFFF;
/* margin-top:60px; */
position: fixed;
bottom: 0;
width: 100vw;
display: flex;
justify-content: space-between;
}
.bottbtn{
width: 50vw;
display: flex;
align-items: center;
justify-content: center;
color: #333333;
font-size:36rpx;
font-weight: 500;
background: #FFFFFF;
}
.bottbtn img{
width:23px ;
height:23px ;
margin-right: 10px;
}
.peodi{
/* line-height: 15%; */
margin:5px auto 15px;
width: 260px;
text-align: center;
color: #1A1A1A;
font-size:36rpx;
font-weight: bold;
}
.button-g{
width:280rpx;
height: 80rpx;
background:transparent;
border-radius:43rpx;
text-align: center;
line-height:80rpx;
color: #FFFFFF;
font-size: 33rpx;
margin-left:13px;
}
.sinput{
display: flex;
align-items: center;
height:50px;
padding: 10px;
margin-left:30px
}
.sinput img{
width:20px;
height:20px;
margin-right: 10px;
padding-right: 5px;
}
.u-input{
width:72vw;
height:35px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx;
padding-left: 10px!important;
}
.innovate{
width:41vw;
height:24vw ;
}
.tableclas{
/* width: 230rpx;
height: 56rpx; */
background: #DEECFC;
border-radius:30rpx;
padding:7px 13px;
font-size: 28rpx;
color: #1A7AED;
margin-right:10px ;
}
.vertical{
width: 6rpx;
height: 26rpx;
background: #1578ED;
border-radius: 3rpx;
margin-right:10px ;
}
.online{
width: 100%;
height: 70rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 35rpx;
line-height: 70rpx;
font-size: 15px;
color:#FFFFFF;
text-align: center;
}
.table_heade{
width: 90%;
text-align: center;
/* margin:5px 0 */
}
.table_kheade{
width: 10%;
text-align: center;
}
.headert{
background-color: #3283BE;
display: flex;
align-items: center;
color:#FFFFFF ;
}
.bodyt{
background-color: #FFFFFF;
display: flex;
align-items: center;
color:#1A1A1A;
/* height: 26px; */
}
.table_obody{
width: 10%;
text-align: center;
}
.table_tbody{
width: 80%;
text-align: left;
padding:4px 8px;
border-left:1px solid #CFDDDD;
border-right:1px solid #CFDDDD;
}
.table_hbody{
width: 10%;
text-align: center;
}
.u-th{
background-color: #e9f0fa!important;
}
.u-td{
color: #808080!important;
}
.tdplas .u-td{
border-right:none!important;
}
.tdplasd .u-td{
border-right:none!important;
border-bottom:none!important;
}
</style>

File diff suppressed because it is too large Load Diff

@ -0,0 +1,670 @@
<template>
<view>
<view class="tabledetails">
<img class="logobg" src="http://image.keyitest.cn/static/index/testpx/banner1.png" alt="" />
<view style="margin-bottom:23px;text-align: center;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/1.png" alt="">
<p style="color: #999999;font-size:28rpx;">培养专业测试专项人才</p>
</view>
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;align-items: center;">
<view class="statictosol">
<img src="http://image.keyitest.cn/static/index/testpx/2.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">初级班 </p>
<p >网课20课时项目实操 单元配置项安全FPGA 任意选择</p>
</view>
<view class="statictosol">
<img src="http://image.keyitest.cn/static/index/testpx/3.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">中级班 </p>
<p >网课20课时项目实操 单元配置项安全FPGA 任意选择</p>
</view>
<view class="statictosol">
<img src="http://image.keyitest.cn/static/index/testpx/4.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">中级特训实习班 </p>
<p >网课20课时项目实操3个月单元配置项安全FPGA任意叠拼</p>
</view>
<view class="statictosol">
<img src="http://image.keyitest.cn/static/index/testpx/5.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">高级班 </p>
<p >网课20课时项目实操 单元配置项安全FPGA 任意选择</p>
</view>
</view>
<view class="practice" >
<img class="lighr" src="http://image.keyitest.cn/static/index/testpx/6.png" alt="">
<view style="color:#808080;font-size:24rpx;width:53vw;margin-top: 16px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">高级特训实习班 </p>
<p style="margin:7px 0">网课20 课时项目实操3个月 单元配置项安全FPGA任意选择</p>
</view>
</view>
<view style="margin-bottom:23px;text-align: center;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/7.png" alt="">
<p style="color: #999999;font-size:28rpx;">助您职业发展未来可期</p>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/8.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 25px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">精品课程 </p>
<p style="margin:7px 0">理论实际持续更新最前沿实用技术</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/9.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:10px 0 0 25px;width:55vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">专家讲师 </p>
<p style="margin:10px 0">一线工程师项目负责人领域专家</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/10.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:10px 0 0 25px;width:55vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">线上+线下 </p>
<p style="margin:10px 0">专家线上授课师傅带徒弟一线工程师手把手 项目实操</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/11.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:10px 0 0 25px;width:55vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">技术认证 </p>
<p style="margin:10px 0">国家工信部人才交流中心可靠性测试领域唯一合 作伙伴</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" src="http://image.keyitest.cn/static/index/testpx/12.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:10px 0 0 25px;width:55vw;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">多元就业 </p>
<p style="margin:10px 0">关键科技内聘客户企业推荐云测平台灵活就业 自主择业</p>
</view>
</view>
<view style="margin-bottom:23px;text-align: center;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/13.png" alt="">
<p style="color: #999999;font-size:28rpx;">零基础入学+不限专业/性别+/往届生均可</p>
</view>
<view style="display: flex;justify-content: space-between;flex-wrap: wrap;align-items: center;">
<view class="statictosol" style="height: 270px;">
<img style="width:39vw ;height:26vw;" src="http://image.keyitest.cn/static/index/testpx/14.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">零基础易入门 </p>
<view class="linblue"></view>
<p >学习过程中代码内容相对较少不需要精通JavaC等编程语言从基础学习容易学</p>
</view>
<view class="statictosol" style="height: 270px;">
<img style="width:39vw ;height:26vw;" src="http://image.keyitest.cn/static/index/testpx/15.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">人才缺口大</p>
<view class="linblue"></view>
<p >根据人才市场统计国内软件测试人才缺口超过30万且逐年递增</p>
</view>
<view class="statictosol" style="height: 270px;">
<img style="width:39vw ;height:26vw;" src="http://image.keyitest.cn/static/index/testpx/16.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">发展方向广</p>
<view class="linblue"></view>
<p >各行各业都需要软件测试人才尤其是IT互联网军工行业能源行业汽车行业</p>
</view>
<view class="statictosol" style="height: 270px;">
<img style="width:39vw ;height:26vw;" src="http://image.keyitest.cn/static/index/testpx/17.png" alt="">
<p style="color:#1A1A1A;font-size: 1rem;font-weight: bold;margin:10px 0 ;">薪资待遇高</p>
<view class="linblue"></view>
<p >软件测试工程师招聘市场价起步月薪6-10K优秀学员年薪可达20万</p>
</view>
</view>
<view style="margin-bottom:23px;text-align: center;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/18.png" alt="">
<p style="color: #999999;font-size:28rpx;">包括企业级软件/大型网站等多种软件测试需求</p>
</view>
<view class='buttonobj'>初级班课程</view>
<view class="course">
<p style="color: #1A1A1A;font-size:30rpx;font-weight: bold;">课程性质目的与任务</p>
<p>掌握软件测试基本理论了解软件测试相关的标准和方法以及缺陷管理配置管理通过项目实训熟练掌握系统测试的流程和测试用例设计方法</p>
<p style="color: #1A1A1A;font-size:30rpx;font-weight: bold;">课程教学内容及教学安排</p>
<view class="software">
<img src="http://image.keyitest.cn/static/index/testpx/19.png" alt="" />
<p >1.软件测试背景与发展</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/20.png" alt="" />
<p >2.软件测试基础理论及软件测试流程</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/21.png" alt="" />
<p >3.软件测试的标准和方法</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/22.png" alt="" />
<p >4.系统测试的流程和测试用例的设计方法</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/23.png" alt="" />
<p >5.缺陷管理</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/24.png" alt="" />
<p >6.软件配置管理</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/25.png" alt="" />
<p >7.企业项目系统测试实操及项目实战训练</p>
</view>
</view>
<view class="course" style="margin-top: -50px;">
<view class='buttonobj' style="background: linear-gradient(90deg, #5EA6FD, #1A81F9);">中级班课程</view>
<p style="color: #1A1A1A;font-size:30rpx;font-weight: bold;margin-top:39px;">课程性质目的与任务</p>
<p>深入学习软件测试相关标准掌握CC++ 语言基础掌握软件静态分析单元测试部件测试配置项测试系统测试安全渗透测试的测试要点
测试过程测试用例设计以及测试文档的编写熟练掌握业内常见的静态分析工具单元测试工具性能测试工具信息安全测试工具的安装操作及使用可以单独开展项目的测试</p>
<p style="color: #1A1A1A;font-size:30rpx;font-weight: bold;">课程教学内容及教学安排</p>
<view style="display: flex;flex-wrap: wrap;align-items: center;">
<view class="software" style="width: 50%;">
<img src="http://image.keyitest.cn/static/index/testpx/26.png" alt="" />
<p >1.软件测试相关标准</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/25.png" alt="" />
<p >2.Linux基础及应用</p>
</view>
<view class="software" style="width:50%;">
<img src="http://image.keyitest.cn/static/index/testpx/27.png" alt="" />
<p >3.可编程逻辑器件测试</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/28.png" alt="" />
<p >4.C/C++ 语言基础</p>
</view>
<view class="software" style="width:50%;">
<img src="http://image.keyitest.cn/static/index/testpx/29.png" alt="" />
<p >5.单元测试从入门到精通</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/30.png" alt="" />
<p >6.接口测试</p>
</view>
<view class="software" style="width: 50%;">
<img src="http://image.keyitest.cn/static/index/testpx/31.png" alt="" />
<p >7.配置项测试入门到精通</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/32.png" alt="" />
<p >8.系统测试从入门到精通</p>
</view>
<view class="software" style="width:50%;">
<img src="http://image.keyitest.cn/static/index/testpx/33.png" alt="" />
<p >9.信息安全测试</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/34.png" alt="" />
<p >10.测试文档的编制</p>
</view>
<view class="software" style="width:50%;">
<img src="http://image.keyitest.cn/static/index/testpx/35.png" alt="" />
<p >11.企业项目实操</p>
</view>
</view>
</view>
<view class="course" style="margin-top: -50px;">
<view class='buttonobj' style="background: linear-gradient(145deg, #FDB957, #FA9839);">高级班课程</view>
<p style="color: #1A1A1A;font-size:30rpx;font-weight: bold;margin-top:39px;">课程性质目的与任务</p>
<p>深入学习软件测试相关标准和软件测试项目的管理过程全面掌握单元测试部件测试配置项测试系统测试安全渗透测试的测试要点
环境配置人员分工进度把控测试中的问题分析和解决和全套测试文档编写掌握测试工具的高级使用技巧</p>
<p style="color: #1A1A1A;font-size:30rpx;font-weight: bold;">课程教学内容及教学安排</p>
<view style="display: flex;flex-wrap: wrap;align-items: center;">
<view class="software" style="width: 50%;">
<img src="http://image.keyitest.cn/static/index/testpx/26.png" alt="" />
<p >1.深入讲解软件测试标准</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/25.png" alt="" />
<p >2.单元测试项目的管理</p>
</view>
<view class="software" style="width:50%;">
<img src="http://image.keyitest.cn/static/index/testpx/27.png" alt="" />
<p >3.部件测试项目的管理</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/28.png" alt="" />
<p >4.配置项测试项目的管理</p>
</view>
<view class="software" style="width:50%;">
<img src="http://image.keyitest.cn/static/index/testpx/29.png" alt="" />
<p >5.系统测试项目的管理</p>
</view>
<view class="software" >
<img src="http://image.keyitest.cn/static/index/testpx/30.png" alt="" />
<p >6.测试脚本的编制</p>
</view>
<view class="software" style="width:80%;">
<img src="http://image.keyitest.cn/static/index/testpx/31.png" alt="" />
<p >7.软件测试工具的高级使用技巧</p>
</view>
<view class="software" style="width:80%;">
<img src="http://image.keyitest.cn/static/index/testpx/32.png" alt="" />
<p >8.安全及渗透测试项目的管理</p>
</view>
<view class="software" style="width:70%;">
<img src="http://image.keyitest.cn/static/index/testpx/33.png" alt="" />
<p >9.企业项目实操项目实战训练</p>
</view>
</view>
</view>
<view class="master">
<view class="xline"></view>
<p> 掌握的测试技能 </p>
<view class="xline"></view>
</view>
<view class="interface">
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/36.png" alt="" />
<p>接口测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/37.png" alt="" />
<p>单元测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/38.png" alt="" />
<p>单元测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/40.png" alt="" />
<p>性能测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/41.png" alt="" />
<p>安全测试</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/42.png" alt="" />
<p>缺陷管理</p>
</view>
<view class="testet">
<img src="http://image.keyitest.cn/static/index/testpx/43.png" alt="" />
<p>系统测试</p>
</view>
</view>
<view style="margin-bottom:23px;text-align: center;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/44.png" alt="">
<p style="color: #999999;font-size:28rpx;">从业多年拥有管理多个项目的经验</p>
</view>
<view class="teams">
<view style="display: flex;">
<img src="http://image.keyitest.cn/static/index/testpx/46.png" alt="">
<view >
<p style="color:#1A1A1A;font-size:1.1rem;font-weight: bold;margin:5px 0 ;">张成伟</p>
<view class='buttonobj' style="background:#1578ED;width:220px;font-size: 30rpx;margin-top:0;height: 60rpx;line-height: 60rpx;">高级软件测试项目经理级讲师</view>
</view>
</view>
<p style="margin-top: 15px;">简介曾就职于陆军装备软件测评中心航天四院软件测评中心具备8年OpenGvsVegaC++语言编码经验具有10余年100余项军用装备软件定型测
评任务的测试和管理经验具有10余年军用软件三方测评经验
</p>
</view>
<view class="teams">
<view style="display: flex;">
<view style="text-align: right;">
<p style="color:#1A1A1A;font-size:1.1rem;font-weight: bold;margin:5px 0 ;">张会普</p>
<view class='buttonobj' style="background:#1578ED;width:220px;font-size: 30rpx;margin-top:0;height: 60rpx;line-height: 60rpx;">高级软件测试项目经理级讲师</view>
</view>
<img style="margin-left:10px;margin-right: 0;" src="http://image.keyitest.cn/static/index/testpx/47.png" alt="">
</view>
<p style="margin-top: 15px;">具有8年C++VBPB数据库编码经验具有40余项单元部件测试项目经验熟悉CCSKeilTornadoWorkbench等嵌入式开发环境
熟练C++testTestBedVectorCASTCantata等静态单元测试工具的使用
</p>
</view>
<view class="teams">
<view style="display: flex;">
<img src="http://image.keyitest.cn/static/index/testpx/48.png" alt="">
<view >
<p style="color:#1A1A1A;font-size:1.1rem;font-weight: bold;margin:5px 0 ;">孟勃</p>
<view class='buttonobj' style="background:#1578ED;width:220px;font-size: 30rpx;margin-top:0;height: 60rpx;line-height: 60rpx;">高级软件测试工程师讲师</view>
</view>
</view>
<p style="margin-top: 15px;">简介具备50余项单元测试部件测试配置项测试系统测试项目经验熟悉CCSKeilTornadoWorkbench等嵌入式软件开发环境熟练使用C++test
TestBedVectorCAST等静态单元测试工具
</p>
</view>
<view style="margin-bottom:23px;text-align: center;margin-top: 20px;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/49.png" alt="">
<p style="color: #999999;font-size:28rpx;">所学技术实际应用率高证书含金量高</p>
</view>
<view class="teams" style="text-align: center;margin-top: 20px;">
<img style="width: 69vw;height: 48vw;margin: 0;" src="http://image.keyitest.cn/static/index/testpx/50.png" alt="">
<p style="color:#1A1A1A;font-size:1.1rem;font-weight: bold;margin:10px 0 ;">软件可靠性测试工程师等级证书</p>
<p style="text-align: left;">培训考试合格学员顺利毕业由工信部人才交流中心颁发软件可靠性测试领域软件单元测试工程师软件配置项测试工程师
软件安全性测试工程师软件可编程逻辑器件测试工程师软件接口测试工程师初中等级证书</p>
</view>
<view style="margin-bottom:23px;text-align: center;">
<img class="deyalimg" src="http://image.keyitest.cn/static/index/testpx/51.png" alt="">
<p style="color: #999999;font-size:28rpx;">多形态择业保障就业工作</p>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/52.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">自主选择就业 </p>
<p style="margin:7px 0">优势线下实操项目真实所学技术实际应用率高证书含金量高</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/53.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">择优录取 </p>
<p style="margin:7px 0">培训结束后根据考核成绩和技术能力关键科技择优录用</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/54.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">推荐录取 </p>
<p style="margin:7px 0">公司的合作伙伴和合作的客户优先推荐其录用</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/55.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">灵活就业 </p>
<p style="margin:7px 0">关键科技自有云测平台灵活就业灵活用工</p>
</view>
</view>
<view class="practice" style="justify-content: initial;">
<img class="lighrt" style="width:43vw ;" src="http://image.keyitest.cn/static/index/testpx/56.png" alt="">
<view style="color:#808080;font-size:24rpx;margin:18px 0 0 20px;">
<p style="color: #1A1A1A;font-size: 30rpx;font-weight: bold;">终身推荐服务 </p>
<p style="margin:7px 0">可终身享受关键科技就业再推荐服务</p>
</view>
</view>
<view style="height: 50px;"></view>
</view>
<view class="submitt">
<view class="bottbtn" @click="popcilk('sign')">
<img src="http://image.keyitest.cn/static/index/testpx/58.png" alt="">
<p>在线报名</p>
</view>
<view class="bottbtn" @click="popcilk('seek')" style="background: linear-gradient(90deg, #FF8600, #FE2B2B);">
<img src="http://image.keyitest.cn/static/index/testpx/57.png" alt="">
<p>立即咨询</p>
</view>
</view>
<u-popup style="background:#66666;padding: 20px;" v-model="isPopupShow" @close="close" @open="open" mode="bottom" length="80%" height='380px' border-radius="15" :closeable='true' :mask-close-able="false">
<view style="background:#66666;padding: 20px;">
<view class='peodi'>在线报名</view>
<u-line></u-line>
<view class="sinput">
<img src="http://image.keyitest.cn/static/index/testpx/xingming.png" alt="">
<u-input v-model="signobj.name" placeholder='请输入您的名字' borrder="true" />
</view>
<view class="sinput">
<img style="height: 30px;" src="http://image.keyitest.cn/static/index/testpx/shouji.png" alt="">
<u-input v-model="signobj.phone" placeholder='请输入您的手机号' borrder="true" />
</view>
<view class="sinput">
<img src="http://image.keyitest.cn/static/index/testpx/xueli.png" alt="">
<u-input v-model="signobj.education" placeholder='请选择您的学历' border="true" />
</view>
</view>
<u-line></u-line>
<view class="submitt" style="justify-content: space-around;">
<view class="button-g" style="width:43vw;background:#FFFFFF;border: 1px solid #1578ED;color: #1578ED;margin-left: 0;" @click="resource('setes')">重置</view>
<view class="button-g" style="width:43vw;background: linear-gradient(90deg, #FF8600, #FE2B2B);color: #FFFFFF;margin-left:2vw" @click="resource('singup')">立即报名</view>
</view>
</u-popup>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
isPopupShow:false,
signobj:{name:'',phone:'',education:''},
}
},
methods: {
popcilk(type){
if(type=='sign'){
this.isPopupShow=true
}else{
this.$refs.uToast.show({
title: '功能暂未开通',
type: 'info',
url: '/pages/user/index'
})
}
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
// console.log('close');
},
resource(type){
if(type=='setes'){
this.signobj={}
}else{
this.$refs.uToast.show({
title: '报名成功',
type: 'success',
url: '/pages/user/index'
})
setTimeout(()=>{
this.isPopupShow=false
},1000)
}
}
}
}
</script>
<style>
.tabledetails{
width:100vw;
/* height: 100vh; */
/* background-color: #FFFFFF; */
padding:13px;
}
.logobg {
width:100%;
height:32vw;
margin-bottom: 15px;
}
.deyalimg{
width:100%;
height:4.8vw;
margin:5px 0;
object-fit: cover;
}
.statictosol{
width:48%;
height:200px;
background: #FFFFFF;
border-radius: 10rpx;
text-align: center;
margin-top: 20px;
padding: 10px;
}
.statictosol img{
width:26vw;
height:21vw;
}
.statictosol p{
font-size:.9rem;
color:#808080;
margin-bottom: 5px;
line-height:21px
}
.lighr{
width:30vw;
height:22vw;
}
.practice{
display: flex;
justify-content:space-between;
background-color: #FFFFFF;
padding:13px;
width: 100%;
margin:15px 0;
}
.lighrt{
width:22vw;
height:22vw;
}
.linblue{
width: 46rpx;
height: 5rpx;
background: #1578ED;
border-radius: 3rpx;
margin: 10px auto;
}
.buttonobj{
width: 320rpx;
height: 70rpx;
background: linear-gradient(145deg, #33CABC, #39B4A0);
border-radius:50rpx;
font-size: 34rpx;
font-weight: bold;
color: #FFFFFF;
text-align: center;
line-height:70rpx;
margin: 30px auto -10px auto;
}
.course{
background-color: #FFFFFF;
padding:10px;
width: 100%;
margin:15px 0;
font-size: 26rpx;
color: #808080;
}
.course p{
margin:10px 0;
line-height: 22px;
}
.course img{
width: 28rpx;
height: 28rpx;
margin-right:5px;
}
.software{
display: flex;
align-items: center;
margin-top: -10px;
}
.master{
display: flex;
width: 170px;
margin: 20px auto;
align-items: center;
justify-content: space-around;
}
.master p{
font-size:36rpx;
color: #1A1A1A;
font-weight: bold;
}
.xline{
width: 11rpx;
height: 39rpx;
background: #1578ED;
transform: rotate(18deg);
}
.interface{
display: flex;
justify-content: space-around;
flex-wrap: wrap;
}
.testet{
/* height:120rpx; */
background: #FFFFFF;
border-radius: 8rpx;
text-align: center;
padding: 15px;
}
.testet img{
width:60rpx;
height:65rpx;
}
.testet p{
font-size:28rpx;
color: #4D4D4D;
margin-top: 5px;
}
.teams{
background: #FFFFFF;
width: 100%;
padding:0 12px 15px 12px ;
border-radius: 8rpx;
font-size: 27rpx;
color: #808080;
margin-top: 80px;
}
.teams img{
width:27vw;
height:32vw;
margin-top:-58px;
margin-right:10px;
}
.submitt{
height:55px;
font-size: 20px;
background: #FFFFFF;
margin-top:60px;
position: fixed;
bottom: 0;
width: 100vw;
display: flex;
justify-content: space-between;
}
.bottbtn{
width: 50vw;
display: flex;
align-items: center;
justify-content: center;
color: #FFFFFF;
font-size:36rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
}
.bottbtn img{
width:23px ;
height:23px ;
margin-right: 10px;
}
.peodi{
/* line-height: 15%; */
margin:5px auto 15px;
width: 260px;
text-align: center;
color: #1A1A1A;
font-size:36rpx;
font-weight: bold;
}
.button-g{
width:280rpx;
height: 80rpx;
background:transparent;
border-radius:43rpx;
text-align: center;
line-height:80rpx;
color: #FFFFFF;
font-size: 33rpx;
margin-left:13px;
}
.sinput{
display: flex;
align-items: center;
height:50px;
padding: 10px;
}
.sinput img{
width:20px;
height:20px;
margin-right: 10px;
}
.u-input{
width:75vw;
height:35px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px!important;
}
</style>

@ -0,0 +1,746 @@
<template>
<view>
<img class="logobg" v-if="tooldetilsdata.tool.headimg" :src="tooldetilsdata.tool.headimg" alt="" />
<img class="logobg" v-else src="http://image.keyitest.cn/g1.png" alt="" />
<!-- <img class="logoauto" src="http://image.keyitest.cn/static/index/g2.png" alt="" /> -->
<!-- <img class="logoauto" v-if="tooldetilsdata.tool.name=='代码静态分析工具'" :src="logoimg" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='源代码安全检测工具'" :src="logoimg" style="width:256rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='C/C++单元测试工具'" :src="logoimg" style="width:240rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='接口测试工具'" :src="logoimg" style="width:220rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='JAVA单元测试工具'" :src="logoimg" style="width:240rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='功能测试工具AutoFun'" :src="logoimg" style="width:230rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='代码组成分析平台'" :src="logoimg" style="width:230rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='性能测试工具'" :src="logoimg" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='自鉴-交互式应用安全测试系统IAST'" :src="logoimg" style="width:230rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='Web应用安全测试工具'" :src="logoimg" style="width:250rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='资产识别及漏洞管理工具'" :src="logoimg" style="width:340rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='性能测试工具AutoLoad'" :src="logoimg" alt=""> -->
<view class="schedule" v-if="tooldetilsdata.tool">
<view class="wboeder" style='margin-bottom: 15px;'>
<view style='display:flex;justify-content:space-between;'>
<p v-if="tooldetilsdata.tool.price == 0" style="color:#FD461A;">
限时免费
</p>
<p v-else style="color:#FD461A;">
<span>¥ </span>
<span
style="font-size:40rpx;margin-left:10rpx;font-weight: 800;">{{tooldetilsdata.tool.price}}</span>
</p>
<!-- <p style="color:#999999;font-size:24rpx;">销量350个</p> -->
</view>
<view style='display:flex;align-items: center;margin:30rpx 0'>
<!-- <img style="width:1.2rem;height:1.7rem" src="http://image.keyitest.cn/static/index/hot.png"></image> -->
<p style='font-size:35rpx;font-weight: bold;color: #333333'>
{{tooldetilsdata.tool.name}}
</p>
</view>
<view style='display:flex;margin:30rpx 0'>
<view class="tabone">类型
{{findLabelValueByPropnew(tooltypelist, tooldetilsdata.tool.toolType+'', 'dictValue', 'dictLabel' ) }}
</view>
<view class="tabone" style="color: #FF8A00;border: 1px solid #FF8A00;margin-left: 10px;">
交付方式{{tooldetilsdata.tool.deliverType}}</view>
</view>
<!-- <view style="font-size: 26rpx;">
<span style="color: #808080;">用户评分</span>
<span style="color: #F77811;margin-left:10rpx"> 5</span>
</view> -->
</view>
<view class="wboeder" style="padding-bottom:30px;">
<view style='display:flex;align-items: center;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>产品简介</p>
</view>
<p class="textx" style="margin-top: 20rpx;">{{tooldetilsdata.tool.toolDesc}}</p>
<view style='display:flex;align-items: center;margin:15px 0 10px 0;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>产品功能</p>
</view>
<view class="square" v-for="(item,key) of tooldetilsdata.functionList" :key="key">
<!-- <view class="sloi"></view> -->
<p class="textp" v-if="item.funType==0">{{item.title}} : {{item.funDesc}}</p>
</view>
<!-- <view class="square" style="margin-top: 80rpx;">
<view class="sloi"></view>
<p class="textp">脚本录制与回放支持侵入式非侵入式两种脚本录制与回放方式适应不同的测试场景
侵入式脚本录制和回放支持常用的Win32应用程序MFC应用QT应用VB应用和主流浏览器IE浏览器Firefox浏览器Chrome浏览器
非侵入式测试对被测系统无要求
</p>
</view>
<view class="square" style="margin-top:249rpx;">
<view class="sloi"></view>
<p class="textp">参数化图表使用图表方式编辑数据驱动参数测试执行时脚本自动读取参数值完成测试</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">关键字视图采用图形化方式展示测试步骤方便非编程人员编辑测试用例</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">分布式测试具备多终端协同测试的能力支持典型分布式系统的测试</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">第三方集成提供API调用接口通过API接口与第三方测试平台进行集成</p>
</view>
-->
<view style='display:flex;align-items: center;margin:15px 0 10px 0;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>产品亮点</p>
</view>
<view class="square" v-for="(item,key) of tooldetilsdata.functionList" :key="key">
<p class="textp" v-if="item.funType==1">{{item.title}} : {{item.funDesc}}</p>
</view>
<!-- <view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">图形化关键字图形化关键字方便非编程人员编辑测试用例</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">支持多种被测目标支持多种被测目标包括MFC程序QT程序VB程序IEFirefox等</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">具备非侵入式测的能力具备非侵入式测的能力能够在不改变被测设备软件环境的情况下完成测试</p>
</view> -->
<view v-if="tooldetilsdata.tool.vedio" style='display:flex;align-items: center;margin:15px 0 10px 0;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>产品视频</p>
</view>
<!-- <video v-if="video" :src="video" style="width: 100%;height:42vw " ></video> -->
<!-- <img v-else style="width: 100%;height:42vw " src="http://image.keyitest.cn/static/index/vider.png" alt="" /> -->
<video id="video1" v-if="tooldetilsdata.tool.vedio" :src="tooldetilsdata.tool.vedio" controls
style="width: 100%;height:42vw"></video>
<view style='display:flex;align-items: center;margin:15px 0 10px 0;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>常见问题</p>
</view>
<view style="font-size: 26rpx;line-height: 42rpx;">
<!-- <p style="color: #404040;font-weight: 700;">1. 什么是静态测试</p> -->
<p v-if='tooldetilsdata.tool.productQA'
style="color:#808080;white-space:pre-line;font-size: .9rem;">{{tooldetilsdata.tool.productQA}}
</p>
<p v-else style="color:#808080;font-size: 1rem;">暂无问题</p>
<!-- <p style="color:#808080;">静态测试又可分为代码走查代码审查技术评审
代码走查
开发组内部进行的采用讲解讨论和模拟运行的方式进行的查找错误的活动
代码审查
开发组内部进行的采用讲解提问并使用编码模板进行</p> -->
<!-- <p style="color: #404040;font-weight: 700;">2. 静态测试工具能做什么<p> -->
<!-- <p style="color:#808080;">静态测试工具可以在不运行被测程序本身仅通过分析或检查源程序的语法结构过程接口等来检查程序的正确性</p> -->
</view>
</view>
</view>
<view class="submitt" style="display: flex;justify-content: space-between;padding: 10px 20px;">
<view style="display: flex;">
<view class="kfgw" @click="addcart('kefu')">
<img src="http://image.keyitest.cn/static/index/kf.png" alt="">
<p>客服</p>
</view>
<!-- <view class="kfgw" @click="addcart('cart')">
<img src="http://image.keyitest.cn/static/index/gwc.png" alt="">
<p>购物车</p>
</view> -->
</view>
<view style="display: flex;">
<!-- <view class="button-g" @click="addcart('add')">加入购物车</view> -->
<view class="button-g" style="background: linear-gradient(90deg, #5EA6FD, #1A81F9);" @click="nowBuy">
立即购买</view>
</view>
</view>
<u-toast ref="uToast" />
<u-popup style="background:#66666;padding: 20px;" v-model="isPopupShow" @close="close" @open="open"
mode="bottom" length="80%" height='60%' border-radius="15" :closeable='true' :mask-close-able="false">
<view style="background:#66666;padding:15px 20px 80px 20px; ">
<view style="background-color: #FFFFFF;">
<view class="horizontalline"></view>
<view>
<view class="commodity">
<p>商品名称</p>
<p style="color:#333333;">{{tooldetilsdata.tool.name}}</p>
</view>
<view class="commodity">
<p>商品规格</p>
<u-input border style="width:60%;height: 40rpx;" v-model="typeName" type="select"
@click="typeShow = true" />
<u-select v-model="typeShow"
:list="tooldetilsdata.tool.deliverType=='SaaS' ? typeList : typeList1"
@confirm="citychange" mode="mutil-column-auto"></u-select>
</view>
<!-- <view class="commodity">
<p>交付方式</p>
<p style="color:#333333;">{{tooldetilsdata.tool.deliverType}}</p>
</view> -->
<view class="commodity">
<p>商品价格</p>
<p style="color:#333333;">
<span v-if="typeName == '测试服务(按次计)' && tooldetilsdata.tool.priceTime == 0">限时免费</span>
<span v-if="typeName == '使用时长(按月计)' && tooldetilsdata.tool.price == 0">限时免费</span>
<span
v-else>{{ typeName == '测试服务(按次计)' ? tooldetilsdata.tool.priceTime : tooldetilsdata.tool.price }}</span>
<!-- {{tooldetilsdata.tool.price}} -->
</p>
</view>
<view class="commodity">
<p>购买数量</p>
<u-number-box v-model="cartnumber" @change="valChange"></u-number-box>
<!-- <p style="color:#333333 ;">Kinterface接口测试工具-软件版</p> -->
</view>
<view class="commodity">
<p>支付金额</p>
<p style="color:#FD461A;margin-top: -3px;" v-if="addPriceAll!=0">
<span>¥ </span>
<span style="font-size:40rpx;margin-left:10rpx;font-weight: 800;">{{addPriceAll}}</span>
</p>
<p style="color:#FD461A;margin-top: -3px;" v-else>
<span>限时免费</span>
</p>
</view>
<view class="commodity">
<p>支付方式</p>
<p style="color:#FD461A;margin-top: -3px;">
<u-radio-group v-model="payTypeBig" @change="payTypeChange" placement="row">
<u-radio name="0">微信支付</u-radio>
<u-radio name="1" :disabled="lingqianIS">{{lingqianIS ? '零钱不足':'零钱'}}</u-radio>
</u-radio-group>
</p>
</view>
</view>
</view>
</view>
<u-line></u-line>
<view class="submitt"
style="display: flex;justify-content: center; ;box-shadow:none;background: transparent;padding:0;">
<!-- <view class="button-g"
style="width:43vw;background:#FFFFFF;border: 1px solid #1578ED;color: #1578ED;margin-left: 0;"
@click="shopping('rests')">重置</view> -->
<view class="button-g"
style="width:80vw; background: linear-gradient(90deg, #5EA6FD, #1A81F9);color: #FFFFFF"
@click="payOrder">支付</view>
</view>
</u-popup>
<!-- 零钱支付密码 -->
<u-popup style="background:#66666;padding: 20px;" v-model="lqPasswordShow" mode="bottom" length="80%"
height='40%' border-radius="15" :closeable='true' :mask-close-able="false">
<!-- <u-code-input dot v-model="qbpassword" :maxlength="6"></u-code-input> -->
<view style="height:100rpx">
</view>
<u-message-input :dot-fill="true" :maxlength="6" @change="finish"></u-message-input>
<view class="button-g"
style="width:80vw; background: linear-gradient(90deg, #5EA6FD, #1A81F9);color: #FFFFFF;margin-top: 80rpx;margin-left: 80rpx;"
@click="lqPay">支付</view>
</u-popup>
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下'
show-cancel-button='true' cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirm"
@cancel='tokenshow=false'></u-modal>
</view>
</template>
<script>
import tool from '@/utils/mixin/tootype.js'
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import {
encrypt,
decrypt
} from '@/utils/encrypt.js'
export default {
mixins: [tool],
data() {
return {
base: this.http.baseUrl,
typeShow: false,
typeName: '使用时长(按月计)',
typeList: [{
value: '测试服务(按次计)',
label: '测试服务(按次计)'
}, {
value: '使用时长(按月计)',
label: '使用时长(按月计)'
}],
typeList1: [{
value: '使用时长(按月计)',
label: '使用时长(按月计)'
}],
tooldetilsdata: {},
logoimg: '',
isPopupShow: false,
cartnumber: 1,
allpirse: 0,
video: '',
tokenshow: false,
payTypeBig: '0',
lingqianIS: false,
lqPasswordShow: false,
qbpassword: '',
}
},
computed: {
addPriceAll() {
if (this.typeName == '测试服务(按次计)') {
return this.tooldetilsdata.tool.priceTime * this.cartnumber
} else {
return this.tooldetilsdata.tool.price * this.cartnumber
}
}
},
onLoad(options) {
this.http.quickGet(`/business/tool/detail?toolId=${options.id}`).then(res => {
this.tooldetilsdata = res.data
//
if (this.tooldetilsdata.fileInfoList.length) {
this.tooldetilsdata.fileInfoList.forEach((it) => {
if (it.fileType == 'vedio') {
// mp4
this.tooldetilsdata.tool.vedio = it.fileUrl
}
if (it.fileType == 'head') {
// mp4
this.tooldetilsdata.tool.headimg = it.fileUrl
}
})
}
})
},
onReady() {
// setTimeout(()=>{
// uni.createVideoContext('video1').pause();
// },200)
// uni.requestPayment({
// timeStamp: '1714208088',
// nonceStr: '6e3323d68a2a4659a6c9df15b34a0f30',
// package: 'prepay_id=wx27165448535775baa3aeff767e6b180001',
// signType: 'RSA',
// paySign: 'k0vFRre/LhpjWRcFeGBpeyEEVDut4Y6vINJCttGINZ0RulB9MAw02K7YnHEIimtGL1dUfZtF4Eh93GimWsuuqIAvT5qdirRzVviQxAiLF5QZXCptmj1/MaTev75SZfBBC7dJvOnlIMFpk4QTLJNyjq519isZg8GAQwtFNIENRxFqTRHTCh8l5A3RWZEIhw0qBvzq6q9FVl7TFCA7RLRjPfVYnSTCSJdwxYE0AU38K+314KD7mR4mnIEzKGKCnKoAGHXIabEwFuebZjtgBhBcHI9J9iXltC5qcgn8Nskk6tJvhnAmRdmGdDeW7CdyPouTA9rjwcA2juRsL4hJ3W7dWg==',
// success(r) {
// uni.showToast({
// icon: 'none',
// title: 'pc使'
// })
// },
// fail(error) {
// console.log(error);
// uni.showToast({
// icon: 'none',
// title: ''
// })
// }
// })
},
methods: {
findLabelValueByPropnew,
//
payTypeChange(e) {
console.log(e);
},
finish(e) {
this.qbpassword = e
},
//
lqPay() {
const userinform = uni.getStorageSync('wxUserInfo');
const id = userinform.userId
const data = {
toolId: this.tooldetilsdata.tool.toolId,
amount: this.cartnumber,
deliverType: this.tooldetilsdata.tool.deliverType,
price: this.typeName == '使用时长(按月计)' ? this.tooldetilsdata.tool.price : this.tooldetilsdata.tool
.priceTime,
priceType: this.typeName == '使用时长(按月计)' ? 'month' : 'times',
payType: 'WALLET',
paytype: 'WALLET',
toolType: this.tooldetilsdata.tool.toolType,
userId: id,
password: encrypt(this.qbpassword),
recordName: '购买工具:' + this.tooldetilsdata.tool.name
}
this.http.quickPost(`/play/allin_play`, data, true).then(res => {
if (res.data.retcode == 'SUCCESS') {
uni.showToast({
icon: 'none',
title: '支付成功,请前往pc端工作台使用'
})
this.lqPasswordShow = false
this.isPopupShow = false
setTimeout(() => {
uni.navigateTo({
url: '/pages/personal/ordernumber/ordernumber?current=0'
})
},1000)
} else {
uni.showToast({
icon: 'none',
title: '支付失败,请联系管理员'
})
}
})
},
//
payOrder() {
const that = this
//
const userinform = uni.getStorageSync('wxUserInfo');
const id = userinform.userId
const data = {
toolId: this.tooldetilsdata.tool.toolId,
amount: this.cartnumber,
deliverType: this.tooldetilsdata.tool.deliverType,
price: this.typeName == '使用时长(按月计)' ? this.tooldetilsdata.tool.price : this.tooldetilsdata.tool
.priceTime,
priceType: this.typeName == '使用时长(按月计)' ? 'month' : 'times',
payType: 'W06',
paytype: 'W06',
toolType: this.tooldetilsdata.tool.toolType,
userId: id
}
if (this.addPriceAll == 0) {
//
this.http.quickPost(`/business/tool/nopay/one`, data, true).then(res => {
uni.showToast({
icon: 'none',
title: '购买成功,请前往PC端工作台使用'
})
this.isPopupShow = false
setTimeout(() => {
uni.navigateTo({
url: '/pages/personal/ordernumber/ordernumber?current=0'
})
},1000)
})
} else {
//
//
if (this.payTypeBig == 0) {
this.http.quickPost(`/play/allin_play`, data, true).then(res => {
if (res.data.retcode == 'SUCCESS') {
const info = JSON.parse(res.data.payinfo)
uni.requestPayment({
timeStamp: info.timeStamp,
nonceStr: info.nonceStr,
package: info.package,
signType: info.signType,
paySign: info.paySign,
success(r) {
uni.showToast({
icon: 'none',
title: '支付成功,请前往pc端工作台使用'
})
that.isPopupShow = false
setTimeout(() => {
uni.navigateTo({
url: '/pages/personal/ordernumber/ordernumber?current=0'
})
},1000)
},
fail(error) {
console.log(error);
uni.showToast({
icon: 'none',
title: '支付失败'
})
}
})
} else {
uni.showToast({
icon: 'none',
title: '支付错误,请联系管理员'
})
}
})
} else {
//
const wxUserInfo = uni.getStorageSync('wxUserInfo');
const userId = wxUserInfo.userId
this.http.quickGet(`/mpay/my/account/${userId}`, true).then(res => {
const mycount = res.data.balance
//
if (this.addPriceAll > mycount) {
//
this.lingqianIS = true
this.payTypeBig = '0'
uni.showToast({
icon: 'none',
title: '您的零钱不足,请使用微信支付'
})
} else {
//
this.lqPasswordShow = true
}
})
}
}
},
citychange(e) {
this.typeName = e[0].label
},
nowBuy() {
let accessToken = uni.getStorageSync('accessToken');
console.log(accessToken);
if (!accessToken) {
this.tokenshow = true
return
}
this.isPopupShow = true
},
confirm() {
uni.navigateTo({
url: '/pages/personal/login'
})
},
addcart(type) {
// uni.showToast({
// title: '',
// icon: 'none',
// duration: 1000
// });
// return;
let accessToken = uni.getStorageSync('accessToken');
if (!accessToken) {
this.tokenshow = true
} else {
if (type == 'add') {
this.isPopupShow = true
} else if (type == 'sunl') {
// let allselectdata = [];
// allselectdata.push(this.tooldetilsdata.tool)
// // console.log('ddd',allselectdata)
// this.$refs.uToast.show({
// title: '',
// type: 'info',
// duration: 2000,
// })
} else if (type == 'kefu') {
this.$refs.uToast.show({
title: '功能暂未开通',
type: 'info',
url: '/pages/user/index'
})
} else if (type == 'cart') {
uni.switchTab({
url: '/pages/shoppingtrolley/shoppingtrolley'
})
}
}
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
// console.log('close');
},
valChange(e) {
this.allpirse = e.value * this.tooldetilsdata.tool.price
console.log('当前值为: ' + e.value)
},
shopping(type) {
uni.showToast({
title: '该功能开发中',
icon: 'none',
duration: 1000
});
return;
if (type == 'rests') {
this.cartnumber = 0
} else {
console.log('加入购物车: ')
this.http.quickGet(`/my/addShoppingCart/${this.tooldetilsdata.tool.toolId}/${this.cartnumber}`, true)
.then(res => {
this.$refs.uToast.show({
title: '添加购物车成功',
type: 'success',
duration: 1000,
isTab: true,
url: '/pages/shoppingtrolley/shoppingtrolley'
})
// this.http.quickGet(`/message/my/count`).then(res => {
// // console.log('',res)
// store.commit('SET_CARTCOUNT',res.cartCount);
// setTimeout(() => {
// uni.switchTab({
// url:'/pages/shoppingtrolley/shoppingtrolley'
// })
// },1000);
// })
})
}
}
}
}
</script>
<style>
.commodity>>>input {
min-height: 40rpx !important;
}
.logobg {
width: 100vw;
object-fit: contain;
position: relative;
/* z-index:0; */
}
.logoauto {
width: 200rpx;
height: 200rpx;
object-fit: contain;
position: absolute;
top: 10%;
left: 37%;
}
.schedule {
width: 94vw;
margin: 15px 3vw 20px 3vw;
}
.tabone {
/* width: 98rpx; */
padding: 6rpx;
/* height: 33rpx; */
border: 1px solid #2B80FC;
border-radius: 4rpx;
font-size: 22rpx;
font-weight: 500;
color: #2387EE;
text-align: center;
line-height: 33rpx;
}
.linex {
width: 6rpx;
height: 26rpx;
background: #1578ED;
border-radius: 3rpx;
}
.wboeder {
/* width:92%; */
padding: 15px 4%;
background: #FFFFFF;
border-radius: 10rpx;
margin-bottom: 20px;
}
.textx {
font-size: 26rpx;
font-weight: 500;
color: #808080;
line-height: 42rpx;
}
.textp {
font-size: 26rpx;
font-weight: 500;
color: #808080;
line-height: 42rpx;
/* position: absolute;
left: 13px;
top: -10px; */
line-height: 23px;
display: block
}
.sloi {
width: 10rpx;
height: 10rpx;
background: #727578;
border-radius: 50%;
text-indent: 1.5em;
margin-right: 10px;
/* margin-top:-20px; */
}
.square {
/* position: relative; */
display: flex;
/* display:flex;
margin-bottom:10px */
}
.square :before {
background: #727578;
border-radius: 50%;
content: "";
display: inline-block;
height: 7px;
margin-bottom: 2px;
margin-right: 6px;
width: 7px;
}
.submitt {
height: 60px;
/* line-height: 55px; */
/* text-align: center; */
font-size: 20px;
background: #FFFFFF;
box-shadow: -4px 7px 18px 0px rgba(248, 164, 54, 0.33);
margin-top: 60px;
position: fixed;
bottom: 0;
width: 100vw;
padding: 10px 30px;
display: flex;
}
.kfgw {
display: flex;
flex-direction: column;
margin-right: 30rpx;
align-items: center;
}
.kfgw img {
width: 40rpx;
height: 40rpx;
}
.kfgw p {
color: #666666;
font-size: 22rpx;
}
.button-g {
width: 540rpx;
height: 70rpx;
background: linear-gradient(90deg, #FF8600, #FE2B2B);
border-radius: 35rpx;
text-align: center;
line-height: 70rpx;
color: #FFFFFF;
font-size: 30rpx;
margin-left: 13px;
}
.commodity {
display: flex;
color: #808080;
font-size: 30rpx;
margin: 20px 0;
}
</style>

@ -0,0 +1,26 @@
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
onLoad(options){
},
methods: {
}
}
</script>
<style>
</style>

@ -0,0 +1,295 @@
<template>
<view class="navTab">
<!-- <img class="logobg" src="http://image.keyitest.cn/static/banner/tools_banner.png" alt="" /> -->
<u-tabs-swiper ref="tabs" name="dictLabel" :list="tooltypelist1" :is-scroll="true" @change="tabsChange"
:current="current" bg-color='transparent' active-color="#1578ED" inactive-color='#666666'>
</u-tabs-swiper>
<view>
<view class="recommend">
<!-- :class="item.toolTypeName.indexOf('单元')>-1 || item.toolTypeName.indexOf('接口')>-1 || item.toolTypeName.indexOf('安全')>-1?'imgsone':'imgone' " -->
<view class="currekei" v-for="(item,key) of currenttoolist" :key="key">
<view class="imgone" @click="details('tool',item.toolId)">
<view style="width: 120rpx;height: 120rpx;">
<img :src="item.img" alt="">
<!-- <img v-if="item.name=='代码静态分析工具'" :src="item.imgs" alt="">
<img v-if="item.name=='源代码安全检测工具'" :src="item.imgs" style="width:158rpx" alt="">
<img v-if="item.name=='C/C++单元测试工具'" :src="item.imgs" style="width:150rpx" alt="">
<img v-if="item.name=='接口测试工具'" :src="item.imgs" style="width:140rpx" alt="">
<img v-if="item.name=='JAVA单元测试工具'" :src="item.imgs" style="width:152rpx" alt="">
<img v-if="item.name=='功能测试工具AutoFun'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='代码组成分析平台'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='性能测试工具'" :src="item.imgs" alt="">
<img v-if="item.name=='自鉴-交互式应用安全测试系统IAST'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='Web应用安全测试工具'" :src="item.imgs" style="width:155rpx" alt="">
<img v-if="item.name=='资产识别及漏洞管理工具'" :src="item.imgs" style="width:200rpx" alt="">
<img v-if="item.name=='性能测试工具AutoLoad'" :src="item.imgs" alt="">
<img v-if="item.name=='性能测试工具KeyTurbo'" src="http://image.keyitest.cn/static/index/xn.png" alt=""> -->
</view>
<!-- <img :src=" base + '/profile/upload/2024/04/23/dec9c149-5406-4c52-ac8a-ac624661643f.png'" alt=""> -->
</view>
<text class="leop">{{item.name}}</text>
<view style='display:flex;margin:30rpx 0'>
<view v-if='item.toolTypeName' class="tabone">{{item.toolTypeName}}</view>
<view class="tabone" style="color: #FF8A00;border: 1px solid #FF8A00;margin-left: 10px;">
{{item.deliverType}}</view>
</view>
<view style='display:flex;justify-content:space-between;margin:15rpx 0;width:100%'>
<!-- <p>¥ {{item.price}}</p> -->
<p style="font-size: 24rpx;" v-if="item.price == 0">限时免费</p>
<p style="font-size: 34rpx;" v-else>¥ {{item.price}}</p>
<!-- <img class="imgtwo" src="http://image.keyitest.cn/static/index/add.png" alt="" @click="addcart(item.toolId)"> -->
</view>
</view>
</view>
</view>
<!-- <view v-if="currenttoolist.length==0 &&current!=0" style="font-size:46rpx;
font-weight: bold;
color: #9D9D9D; text-align:center;margin-top:100px">暂无工具</view> -->
<view style="height:10px;"></view>
<u-toast ref="uToast" />
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下'
show-cancel-button='true' cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirm"
@cancel='tokenshow=false'></u-modal>
</view>
</template>
<script>
import tool from '@/utils/mixin/tootype.js'
export default {
mixins: [tool],
data() {
return {
tokenshow: false,
current: '0',
// toolslist: [{name: ''}, {name: ''}, {name: ''}, {name: ''}, {name: ''}],
toolslist: [{
name: '静态测试'
}, {
name: '单元测试'
}, {
name: '功能测试'
}, {
name: '性能测试'
}, {
name: '静态测试'
}, {
name: '单元测试'
}, {
name: '功能测试'
}, {
name: '性能测试'
}],
toollist: [],
currenttoolist: [],
base: this.http.baseUrl
}
},
computed: {
tooltypelist1() {
return [{
dictLabel: '全部'
}, ...this.tooltypelist]
}
},
filters: {
tiilnamechange(value) {
if (!value) return ''
if (value.length > 9) {
return value.slice(0, 7) + '...'
}
return value
}
},
onLoad() {
this.http.quickGet('/business/tool/listAnon?status=1').then(res => {
// console.log('---',res.data.rows)
this.toollist = res.data.rows;
// this.toollist.forEach(item=>{
// if(item.name==''){
// item.imgs='http://image.keyitest.cn/static/index/11.png'
// }else if(item.name==''){
// item.imgs='http://image.keyitest.cn/static/index/5.png'
// }else if(item.name=='C/C++'){
// item.imgs='http://image.keyitest.cn/static/index/2.png'
// }else if(item.name==''){
// item.imgs='http://image.keyitest.cn/static/index/12.png'
// }else if(item.name=='JAVA'){
// item.imgs='http://image.keyitest.cn/static/index/tool/1.png'
// }else if(item.name=='AutoFun'){
// item.imgs='http://image.keyitest.cn/static/index/3.png'
// }else if(item.name==''){
// item.imgs='http://image.keyitest.cn/static/index/tool/4.png'
// }else if(item.name==''){
// item.imgs='http://image.keyitest.cn/static/index/6.png'
// }else if(item.name=='-IAST'){
// item.imgs='http://image.keyitest.cn/static/index/tool/3.png'
// }else if(item.name=='Web'){
// item.imgs='http://image.keyitest.cn/static/index/tool/2.png'
// }else if(item.name==''){
// item.imgs='http://image.keyitest.cn/static/index/zc.png'
// }else if(item.name=='AutoLoad'){
// item.imgs='http://image.keyitest.cn/static/index/xn.png'
// }else{
// item.imgs='http://image.keyitest.cn/static/index/xn.png'
// }
// item.typel=item.toolTypeName.slice(0,2)
// })
this.currenttoolist = this.toollist
// this.toollist=res.data.rows.splice(0,6)toolType
// console.log('---',this.toollist)
})
},
methods: {
confirm() {
uni.navigateTo({
url: '/pages/personal/login'
})
},
tabsChange(index, i) {
if (index == 0) {
this.currenttoolist = this.toollist
} else {
const name = this.tooltypelist1[index].dictLabel
this.currenttoolist = this.toollist.filter(item => item.toolTypeName == name);
}
this.current = index
},
details(type, id) {
if (type == 'tool') {
// uni.showToast({ title: '', icon: 'none', duration: 1000 });
uni.navigateTo({
url: `./tooldetails?id=${id}`
})
} else {
uni.navigateTo({
url: './crowdsourcingdetails'
})
}
},
//
addcart(id) {
uni.showToast({
title: '该功能开发中',
icon: 'none',
duration: 1000
});
return;
let accessToken = uni.getStorageSync('accessToken');
if (!accessToken) {
this.tokenshow = true
} else {
//
this.http.quickGet(`/my/addShoppingCart/${id}/1`, true).then(response => {
console.log('response', response)
if (response.data.code == 200) {
console.log('111')
this.$refs.uToast.show({
title: '添加购物车成功',
type: 'success',
duration: 1000,
isTab: true,
url: '/pages/shoppingtrolley/shoppingtrolley'
})
}
})
}
}
}
}
</script>
<style>
.navTab {
padding: 0 13px 13px 13px;
}
.logobg {
width: 100%;
height: 32vw;
margin-bottom: 5px;
}
.recommend {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-top: 10px;
}
.currekei {
width: 48%;
/* height: 360rpx; */
background: #FFFFFF;
border-radius: 10px;
padding: 10px;
margin-bottom: 20rpx
}
.leop {
width: 100%;
font-size: 30rpx;
/* height:40px ; */
font-weight: bold;
color: #1A1A1A;
/* margin: 13rpx 0; */
display: flex;
align-items: center;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
}
.tabone {
padding: 2rpx 5rpx;
border: 1px solid #2B80FC;
border-radius: 4rpx;
font-size: 20rpx;
font-weight: 500;
color: #2387EE;
text-align: center;
box-sizing: border-box;
}
.currekei :nth-child(4) {
color: #FD461A;
font-weight: 800;
font-size: 34rpx;
}
.imgone {
width: 180rpx;
margin: 10px auto;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
}
.imgone img {
width: 100%;
height: 100%;
}
.imgsone {
width: 150rpx;
margin: 20px auto;
}
.imgsone img {
width: 150rpx;
height: 123rpx;
}
.imgtwo {
width: 32rpx;
height: 32rpx;
}
</style>

@ -0,0 +1,19 @@
<template>
<view class="navTab">
</view>
</template>
<script>
export default {
data() {
return {
}
},
}
</script>
<style>
</style>

@ -0,0 +1,63 @@
<template>
<view>
<view v-if="listmessage.length>0">
<view v-for="(item,key) of listmessage" class="sign_list">
<p v-if="item.title" style="font-size:15px;font-weight: 600;color: #0e0c0c;">{{item.title}}</p>
<p style="margin:10px 0;">{{item.message}}</p>
<view style="text-align: right;">
{{item.sendTime}}
</view>
</view>
</view>
<view v-if="listmessage.length==0" style="font-size:46rpx; font-weight: bold;
color: #9D9D9D; text-align:center;margin-top:100px">
暂无消息
</view>
</view>
</template>
<script>
export default {
data() {
return {
listmessage:[]
}
},
onShow() {
let wxUserInfo = uni.getStorageSync('wxUserInfo');
if(wxUserInfo){
this.getmessage(wxUserInfo)
}
},
onLoad() {
// let wxUserInfo = uni.getStorageSync('wxUserInfo');
// if(wxUserInfo){
// this.getmessage(wxUserInfo)
// }
},
methods: {
getmessage(Info){
this.http.quickGet(`/message/my?pageNum=1&pageSize=99&userId=${Info.userId}`,true).then(response => {
console.log('response',response)
if(response.data.code==200){
this.listmessage=response.data.rows
}
})
},
}
}
</script>
<style>
.sign_list{
/* width:94vw; */
/* margin:20px 3vw; */
width:100vw;
margin:2vh 0;
background: #FFFFFF;
padding:10px 25px;
color: #666;
}
</style>

@ -0,0 +1,247 @@
<template>
<view class="navTab">
<view style="display: flex;justify-content: space-between;align-items: center;">
<u-input class="seleclas" border-color='#666666' v-model="messageselect" type="select" border="true" @click="messageshow = true" placeholder='请选择' />
<u-select v-model="messageshow" :list="messageList" @confirm="messageCallback"></u-select>
<!-- value-name='id' label-name='title' -->
<u-search class="search" v-model='keyware' placeholder='输入搜索内容' :actionStyle="customActionStyle"
showAction="true" actionText="搜索" :animation="false" @custom='seacrhko'></u-search>
<p @click="addmessage" style="width:35px;height:38px;color: #1578ED;font-size: 30px;text-align: center;line-height:34px;">+</p>
</view>
<view class="sign_list" >
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb">培训服务</view>
<p style="font-size:24rpx;color:#808080;">2023-11-29 10:30:20</p>
</view>
<view class="fline"></view>
<view style="margin:12px 13px 0 13px;color:#4D4D4D;font-size:13px;line-height:22px;">
<p>留言内容公司需要进行单元测试的购买请公司安排人员来 公司内部进行测试服务</p>
</view>
</view>
<view class="sign_list" >
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb" style="background: linear-gradient(90deg, #1BF5B3, #08C78F);">众包服务</view>
<p style="font-size:24rpx;color: #808080;">2023-11-29 10:30:20</p>
</view>
<view class="fline"></view>
<view style="margin:12px 13px 0 13px;color:#4D4D4D;font-size:13px;line-height:22px;">
<p>留言内容公司需要进行单元测试的购买请公司安排人员来 公司内部进行测试服务</p>
</view>
</view>
<view class="sign_list" >
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb" style="background: linear-gradient(90deg, #FFDC00, #ED9706);">工具服务</view>
<p style="font-size:24rpx;color: #808080;">2023-11-29 10:30:20</p>
</view>
<view class="fline"></view>
<view style="margin:12px 13px 0 13px;color:#4D4D4D;font-size:13px;line-height:22px;">
<p>留言内容公司需要进行单元测试的购买请公司安排人员来 公司内部进行测试服务</p>
</view>
</view>
<view class="sign_list" >
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb" style="background: linear-gradient(90deg, #FCA141, #FD6940);">人才服务</view>
<p style="font-size:24rpx;color: #808080;">2023-11-29 10:30:20</p>
</view>
<view class="fline"></view>
<view style="margin:12px 13px 0 13px;color:#4D4D4D;font-size:13px;line-height:22px;">
<p>留言内容公司需要进行单元测试的购买请公司安排人员来 公司内部进行测试服务</p>
</view>
</view>
<u-popup v-model="isPopupShow" @close="close" @open="open" mode="bottom" length="80%" height='600px' border-radius="15" :closeable='true' :mask-close-able="false">
<view style="background:#66666;padding: 20px 0;">
<view style="margin-left: 20px;">
<u-input class="seleclas" border-color='#666666' v-model="testtrain" type="select" border="true" @click="messageshow = true" placeholder='请选择' />
<u-select v-model="messageshow" :list="messageList" @confirm="testtrainCallback"></u-select>
<view class='peodi'>我的留言</view>
</view>
<u-line></u-line>
<view class="sinput" style="margin-top: 10px;">
<img src="http://image.keyitest.cn/static/index/renliwb/41.png" alt="">
<p style="margin-right: 5px;width: 56px;">企业名称</p>
<u-input style="width:239px;" v-model="leaveobj.company" placeholder='默认公司' border="true"/>
</view>
<view class="sinput">
<img s src="http://image.keyitest.cn/static/index/testpx/xingming.png" alt="">
<p style="margin-right: 5px;width: 56px;"> </p>
<u-input style="width:239px;" v-model="leaveobj.name" placeholder='输入姓名' border="true"/>
</view>
<view class="sinput">
<img style="height:28px;" src="http://image.keyitest.cn/static/index/testpx/shouji.png" alt="">
<p style="margin-right: 5px;">联系方式</p>
<u-input style="width:239px;" v-model="leaveobj.phone" placeholder='输入联系方式' border="true"/>
</view>
<view class="sinputrt">
<img src="http://image.keyitest.cn/static/index/renliwb/45.png" alt="">
<p style="margin-right: 5px;">留言内容</p>
<u-input style="width:239px;" v-model="leaveobj.content" placeholder='填写留言内容' type="textarea" auto-height="true"/>
</view>
<u-line></u-line>
<view >
<view class="bottbtn" @click="resource('setes')">确定</view>
</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
keyware:'',
customActionStyle: {
color: '#808080', //
fontSize: '16px' //
//
},
messageselect:'',
messageshow:false,
messageList:[{value:'1',label:'培训服务'},{value:'2',label:'众包服务'},{value:'3',label:'工具服务'},{value:'4',label:'人才服务'}],
testtrain:'',
leaveobj:{company:'',name:'',phone:'',content:''},
isPopupShow:false
}
},
methods: {
seacrhko(){
},
signupdetails(type){
uni.navigateTo({
url:`/pages/index/testtraining/signup?tabtype=${type}`
})
},
testtrainCallback(e){
this.testtrain=e[0].label
},
messageCallback(e){
this.messageselect=e[0].label
console.log(e);
},
addmessage(){
// this.isPopupShow=true
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
},
}
}
</script>
<style>
.navTab{
padding:13px 20px;
}
.sign_list{
width: 100%;
background: #FFFFFF;
border-radius: 10px;
margin:20px 0;
padding-bottom:12px;
}
.rightb{
width: 183rpx;
height: 54rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 9px 0px 46px 0px;
color: #FFFFFF;
font-size:.8rem;
line-height: 54rpx;
text-align: center;
}
.fline{
width: 100%;
height: 1rpx;
border: 1px solid #999999;
opacity: 0.15;
}
.seleclas .u-input{
background: #FFFFFF;
box-shadow: 0rpx 2rpx 26rpx 3rpx rgba(73,81,107,0.12);
border-radius: 30px!important;
border: 1px solid transparent!important;
width:25vw
}
.u-search{
width:55vw ;
}
.sinput{
display: flex;
align-items: center;
height: 50px;
padding: 10px 20px;
}
.sinput img{
width:20px;
height:20px;
margin-right:5px;
}
.sinput .u-input{
/* width:75vw; */
height:35px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px!important;
}
.sinputrt{
display: flex;
/* align-items: center; */
/* height: 50px; */
padding: 10px 20px;
}
.sinputrt img{
width:20px;
height:20px;
margin-right:5px;
}
.sinputrt .u-input{
/* width:75vw; */
height:100px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px!important;
/* margin-top:70px */
}
.peodi{
/* line-height: 15%; */
margin:5px auto 20px auto;
width: 260px;
text-align: center;
color: #1A1A1A;
font-size:36rpx;
font-weight: bold;
margin-top: -32px;
}
/* .submitt{
height:55px;
font-size: 20px;
background: #FFFFFF;
margin-top:60px;
position: fixed;
bottom: 0;
width: 100vw;
display: flex;
justify-content: space-between;
} */
.bottbtn{
width:94vw;
margin:15px 3vw;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:43rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
/* margin-left:13px; */
}
</style>

@ -0,0 +1,177 @@
<template>
<view>
<view class="bureau">
<view style="display: flex;justify-content:center;align-items: center;margin-bottom: 43px;">
<img src="/static/index/logo.png" alt="">
<p class="bureaup">关键测试宝</p>
</view>
<button v-if="!isselect" class="button-g" type='primary' @click="logindl">一键快捷登录</button>
<button v-else class="button-g" type='primary' open-type="getPhoneNumber" withCredentials="true"
lang="zh_CN" @getphonenumber="onGetPhoneNumber">一键快捷登录</button>
<button v-if="!isselect" class="button-g"
style="border: 1px solid #197BEF;color:#197BEF;background-color: transparent!important;margin-bottom: 10px;"
@click="logindl">手机验证码登录</button>
<button v-else class="button-g" @click="phonelog"
style="border: 1px solid #197BEF;color:#197BEF;background-color: transparent!important;margin-bottom: 10px;">手机验证码登录</button>
<view style="display: flex;align-items: center;">
<u-checkbox-group>
<u-checkbox v-model="isselect" shape="circle" active-color="#197BEF;">
<span style="color: #808080;font-size: .8rem;">我已阅读并同意</span>
</u-checkbox>
</u-checkbox-group>
<!-- <P> -->
<span @click="openfile(1)" style="color: #197BEF;">用户协议</span>
<span @click="openfile(2)" style="color: #197BEF;">隐私政策</span>
<!-- </P> -->
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
uproute: '',
value: '',
isselect: false
}
},
onLoad() {
let pages = getCurrentPages()
let prevPage = pages[pages.length - 2];
if (prevPage) {
this.uproute = prevPage.route
}
console.log('prevPage----', pages, prevPage.route)
},
methods: {
logindl() {
if (!this.isselect) {
uni.showToast({
title: '请勾选协议',
icon: 'none',
duration: 1000
});
return;
}
},
phonelog() {
uni.navigateTo({
url: '/pages/personal/phonelogin'
})
},
//
openfile(type) {
if (type == 1) {
uni.navigateTo({
url: '/pages/personal/userAgreemen'
})
} else {
uni.navigateTo({
url: '/pages/personal/privacy'
})
}
// uni.downloadFile({
// url: url,
// success: function (res) {
// var filePath = res.tempFilePath;
// uni.openDocument({
// filePath: filePath,
// success: function (res) {
// console.log('');
// }
// });
// }
// });
},
//
onGetPhoneNumber(event) {
// console.log('1---',event)
const _this = this
uni.login({
success(logininfo) {
let data = {
code: event.detail.code,
openidCode: logininfo.code
}
let wxloginurl = '/wx/auth/getPhoneNumber';
_this.http.quickPost(`${wxloginurl}`, data).then(res => {
if (!res.data.StatusCode) {
// console.log(' ',res.data)
uni.setStorageSync('register', res.data.isRegister)
uni.setStorageSync('testerStatus', res.data.userInfo?.testerStatus)
uni.setStorageSync('accessToken', res.data.token)
uni.setStorageSync('wxUserInfo', res.data.userInfo)
uni.setStorageSync('email', res.data.userInfo?.email)
uni.setStorageSync('avatar', res.data.userInfo?.avatar)
uni.setStorageSync('nickName', res.data.userInfo?.nickName)
uni.setStorageSync('sex', res.data.userInfo?.sex)
uni.showToast({
title: '登录成功',
icon: 'success',
duration: 1000
});
if (_this.uproute == 'pages/personal/personal' || _this.uproute ==
'pages/personal/login') {
uni.switchTab({
url: '/pages/personal/personal'
})
} else {
setTimeout(() => {
uni.navigateBack({
delta: 1
})
}, 1000)
}
}
})
}
})
},
}
}
</script>
<style>
.bureau {
width: 80%;
border-radius: 10rpx;
text-align: center;
margin: 23vh auto;
}
.bureau img {
width: 70px;
height: 58px;
margin-right: 5px;
}
.bureaup {
font-size: 1.5rem;
font-weight: bold;
color: #197BEF;
margin-left: 5px;
}
.button-g {
height: 80rpx;
background-color: #197BEF !important;
border-radius: 10rpx;
text-align: center;
line-height: 80rpx;
color: #FFFFFF;
font-size: 33rpx;
margin-top: 15px;
}
.u-checkbox__label {
margin-right: 0 !important;
margin-left: 5px !important;
}
</style>

@ -0,0 +1,367 @@
<template>
<view>
<u-tabs-swiper ref="tabs" :list="crowdslist" :is-scroll="false" @change="tabsChange" :current="current"
bg-color='#FFFFFF' active-color="#1578ED" inactive-color='#666666' bar-width='180'>
</u-tabs-swiper>
<view class="navTab">
<view v-if="currenttasklist&&currenttasklist.length>0">
<view v-if="current==0">
<view v-for="(item,key) of currenttasklist" class="sign_list" @click="signupdetails(item.task_id)">
<view
style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb" style="background: linear-gradient(90deg, #FFDC00, #ED9706);"> 竞标中
</view>
<p v-if="item.price == 0" style="color:#FD461A;">赏金金额面议 </p>
<p v-else style="color:#FD461A;">赏金金额{{item.price}} </p>
</view>
<view class="fline"> </view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>项目名称{{item.project_name}}</p>
<p>竞标时间{{item.create_time.slice(0,10)}}</p>
<p>项目周期{{item.period}}</p>
<p>技能要求{{item.tech_need}}</p>
</view>
</view>
</view>
<view v-if="current==1">
<!-- <p>竞标成功在实施的项目还有待验收的项目</p> -->
<view v-for="(item,key) of currenttasklist" class="sign_list" @click="signupdetails(item.task_id)">
<view
style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view v-if='item.status==1' class="rightb"> 实施中 </view>
<view v-if='item.status==3' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 待验收 </view>
<view v-if='item.status==4' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 待付款 </view>
<p style="color:#FD461A;">赏金金额{{item.price}} </p>
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>项目名称{{item.project_name}}</p>
<p>竞标时间{{item.create_time.slice(0,10)}}</p>
<p>项目周期{{item.period}}</p>
<p>技能要求{{item.tech_need}}</p>
</view>
</view>
</view>
<view v-if="current==2">
<!-- <p>竞标成功已完成的项目</p> -->
<view v-for="(item,key) of currenttasklist" class="sign_list" @click="signupdetails(item.task_id)">
<view
style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view v-if='item.status==2' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);">竞标失败</view>
<view v-if='item.status==5' class="rightb"
style="background: linear-gradient(90deg, #1BF5B3, #08C78F);"> 已完成 </view>
<view v-if='item.status==6' class="rightb"
style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 验收不通过 </view>
<!-- <view v-if='item.status==2 && item.process_status==3' class="rightb" style="background: linear-gradient(90deg, #FCA141, #FD6940);">竞标成功</view> -->
<p style="color:#FD461A;">赏金金额{{item.price}} </p>
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>项目名称{{item.project_name}}</p>
<p>竞标时间{{item.create_time.slice(0,10)}}</p>
<p>项目周期{{item.period}}</p>
<p>技能要求{{item.tech_need}}</p>
<view class="reviewbtnbox" v-if="item.status==5 && item.is_comment == 0">
<view class="reviewbtn" @click.stop="openreviewDialog(item.task_id)">
去评价
</view>
</view>
</view>
</view>
</view>
</view>
<view v-else style="font-size:46rpx;
font-weight: bold;
color: #9D9D9D; text-align:center;margin-top:100px">暂无竞标信息</view>
<view style="height:10px;"></view>
</view>
<!-- 评价弹层 -->
<view class="reviewDialog" v-if="showReviewDialog">
<view class="reviewbox">
<view class="closereview" @click="closeReview">
x
</view>
<view class="titlereview">
评价
</view>
<view class="tipcon">
这次合作还愉快吗评价一下可以帮助到其他人哦
</view>
<view class="ratebox">
<u-rate v-model="rateValue" active-color="#fa9c22" inactive-color="#CDCECE"></u-rate>
</view>
<view class="remarkbox">
<u-input :clearable="false" v-model="remarkValue" type="textarea" border height="150" />
</view>
<view class="reviewbtn" @click="fabuReview">
发布评价
</view>
</view>
</view>
<!-- 评价成功 -->
<view class="reviewDialog" v-if="showSuccessInfo">
<view class="successbox">
<image src="../../../static/crowd/success.png" mode=""></image>
感谢您的评价!
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
crowdslist: [{
name: '竞标中'
}, {
name: '实施中'
}, {
name: '已完成'
}, ],
alltasklist: [], //
currenttasklist: [], //
current: 0,
showReviewDialog: false,
showSuccessInfo: false,
rateValue: null,
remarkValue: null,
taskId: null
}
},
onLoad() {
let wxUserInfo = uni.getStorageSync('wxUserInfo');
if (wxUserInfo) {
this.http.quickGet(`/crowdsource/claim/my/${wxUserInfo.userId}`, true).then(res => {
console.log('我的众包--', res)
// status=0,1,2
this.alltasklist = res.data.rows
this.currenttasklist = this.alltasklist
this.currenttasklist = this.alltasklist.filter(item => item.status == 0);
})
}
},
methods: {
tabsChange(e) {
this.current = e
if (this.alltasklist.length > 0) {
if (this.current == 0) {
this.currenttasklist = this.alltasklist.filter(item => item.status == 0);
} else if (this.current == 1) {
this.currenttasklist = this.alltasklist.filter(item => item.status == 1 || item.status == 3 || item
.status == 4);
console.log('status', this.currenttasklist)
} else if (this.current == 2) {
this.currenttasklist = this.alltasklist.filter(item => item.status == 2 || item.status == 5 || item
.status == 6);
}
}
},
signupdetails(id) {
uni.navigateTo({
url: `/pages/index/testcrowdsourc/crowdsourcingdetails?id=${id}&type=1`
})
},
//
openreviewDialog(id) {
this.showReviewDialog = true
this.taskId = id
},
closeReview() {
this.showReviewDialog = false
this.rateValue = null
this.remarkValue = null
this.taskId = null
},
fabuReview() {
console.log(this.rateValue);
if (!this.rateValue) {
uni.showToast({
title: '请选择评分',
icon: 'none'
})
return
}
if (!this.remarkValue) {
uni.showToast({
title: '请填写内容',
icon: 'none'
})
return
}
const data = {
taskId: this.taskId,
star: this.rateValue,
content: this.remarkValue,
}
this.http.quickPost(`/comment/addComm`, data, true).then(res => {
this.closeReview()
this.showSuccessInfo = true
this.current = 0
let wxUserInfo = uni.getStorageSync('wxUserInfo');
this.http.quickGet(`/crowdsource/claim/my/${wxUserInfo.userId}`, true).then(res => {
this.alltasklist = res.data.rows
this.currenttasklist = this.alltasklist
this.currenttasklist = this.alltasklist.filter(item => item.status == 0);
})
setTimeout(() => {
this.showSuccessInfo = false
}, 1000)
})
}
}
}
</script>
<style lang="scss" scoped>
.navTab {
padding: 2vh 13px;
}
.sign_list {
width: 100%;
background: #FFFFFF;
border-radius: 10px;
margin-bottom: 20px;
padding-bottom: 15px;
}
.rightb {
width: 183rpx;
height: 54rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 9px 0px 46px 0px;
color: #FFFFFF;
font-size: .8rem;
line-height: 54rpx;
text-align: center;
}
.fline {
width: 100%;
height: 1rpx;
border: 1px solid #999999;
opacity: 0.15;
}
.reviewbtnbox {
display: flex;
justify-content: flex-end;
}
.reviewbtn {
width: 150rpx;
height: 50rpx;
background: #FBA02A;
border-radius: 6rpx;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
line-height: 50rpx;
text-align: center;
}
.reviewDialog {
position: fixed;
z-index: 99999999999999999999999999999999;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
.reviewbox {
position: relative;
width: 559rpx;
height: 593rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 21rpx 4rpx rgba(19, 106, 189, 0.15);
padding: 25rpx;
box-sizing: border-box;
.titlereview {
font-weight: bold;
font-size: 30rpx;
color: #1A1A1A;
text-align: center;
height: 70rpx;
line-height: 70rpx;
}
.closereview {
font-weight: bold;
font-size: 30rpx;
color: #1A1A1A;
font-weight: 400;
font-size: 40rpx;
color: #858994;
position: absolute;
top: 0;
right: 20rpx;
}
.tipcon {
font-weight: 500;
font-size: 22rpx;
color: #333333;
text-align: center;
margin: 20rpx 0;
}
.ratebox {
display: flex;
justify-content: center;
margin-bottom: 23rpx;
}
.ratebox ::v-deep .u-icon {
font-size: 20px !important;
}
.remarkbox {
margin-bottom: 30rpx;
}
.reviewbtn {
width: 100%;
height: 60rpx;
background: #2084F9;
border-radius: 6rpx;
line-height: 60rpx;
text-align: center;
}
}
.successbox {
width: 500rpx;
height: 70rpx;
background: #FDF7EE;
box-shadow: 0rpx 1rpx 15rpx 0rpx rgba(39, 50, 63, 0.15);
border-radius: 6rpx;
font-weight: bold;
font-size: 26rpx;
color: #000000;
display: flex;
align-items: center;
justify-content: center;
image {
width: 30rpx;
height: 30rpx;
margin-right: 20rpx;
}
}
}
</style>

@ -0,0 +1,93 @@
<template>
<view class="navTab">
<!-- <u-search v-model='keyware' placeholder='输入搜索内容' :actionStyle="customActionStyle"
showAction="true" actionText="搜索" :animation="false" @custom='seacrhko'></u-search> -->
<view v-if="signuplist.length>0">
<view v-for="(item,key) of signuplist" class="sign_list" @click="signupdetails(item.issue_id)">
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb">
{{item.issue}}
</view>
<p v-if="item.create_time" style="font-size:24rpx;color: #808080;">报名时间{{item.create_time.slice(0,10)}} </p>
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>课程内容{{item.theme_name}}</p>
<!-- start_time -->
<p v-if="item.start_time" >开课时间{{item.start_time.slice(0,4)}}{{item.start_time.slice(5,7)}}{{item.start_time.slice(8,10)}} 09:00</p>
<p>上课地点{{item.class_addr}}</p>
<p>报名人{{item.name}}</p>
</view>
</view>
</view>
<view v-else style="font-size:46rpx;
font-weight: bold;
color: #9D9D9D; text-align:center;margin-top:100px">暂无报名信息</view>
<view style="height:10px;"></view>
</view>
</template>
<script>
export default {
data() {
return {
keyware:'',
customActionStyle: {
color: '#808080', //
fontSize: '16px' //
//
},
signuplist:[],
}
},
onLoad() {
let wxUserInfo=uni.getStorageSync('wxUserInfo');
if(wxUserInfo){
this.http.quickGet(`/train/userApply/${wxUserInfo.userId}`,true).then(res=>{
console.log('报名信息--',res)
this.signuplist=res.data
})
}
},
methods: {
seacrhko(){
},
signupdetails(id){
uni.navigateTo({
url:`/pages/index/testtraining/signup?issueId=${id}&type=1`
})
},
}
}
</script>
<style>
.navTab{
padding:2vh 13px ;
}
.sign_list{
width: 100%;
background: #FFFFFF;
border-radius: 10px;
margin-bottom:20px;
padding-bottom:15px;
}
.rightb{
width: 183rpx;
height: 54rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 9px 0px 46px 0px;
color: #FFFFFF;
font-size:.8rem;
line-height: 54rpx;
text-align: center;
}
.fline{
width: 100%;
height: 1rpx;
border: 1px solid #999999;
opacity: 0.15;
}
</style>

@ -0,0 +1,63 @@
<template>
<view>
<view style="background-color:#ffffff;height:96vh;width: 96vw;margin:2vh auto;padding:10px 13px;border-radius: 10rpx;">
<view class="separate" @click="setup('accountoverview')">
<p>账户概览</p>
<img style='width:15rpx;height:25rpx;margin-top:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
<view class="separate" @click="setup('transaction')">
<p>交易记录</p>
<img style='width:15rpx;height:25rpx;margin-top:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
<view class="separate" @click="setup('tranpassword')">
<p>交易密码</p>
<img style='width:15rpx;height:25rpx;margin-top:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
setup(type){
if(type=='accountoverview'){
uni.navigateTo({
url:'/pages/personal/setup/accountoverview'
})
}else if(type=='transaction'){
uni.navigateTo({
url:'/pages/personal/setup/transaction'
})
}else if(type=='tranpassword'){
uni.navigateTo({
url:'/pages/personal/setup/tranpassword'
})
}
}
}
}
</script>
<style>
.separate{
color: #333333;
font-weight: bold;
width:100%;
height:50px;
display: flex;
font-size: 15px;
justify-content: space-between;
border-bottom:1px solid rgba(153, 153, 153, 0.15);
/* opacity: 0.15; */
align-items: center;
}
</style>

@ -0,0 +1,444 @@
<template>
<view>
<view class="navTab">
<u-search v-model='keyware' placeholder='请输入工具名称' bg-color='#FFFFFF' :actionStyle="customActionStyle"
showAction="true" actionText="搜索" :animation="false" @custom='seacrhko'></u-search>
</view>
<view>
<u-tabs-swiper ref="tabs" :list="ornamelist" :is-scroll="false" @change="tabsChange" :current="current"
bg-color='transparent' active-color="#1578ED" inactive-color='#666666'>
</u-tabs-swiper>
<view style="font-weight: 500;font-size: 22rpx;color: #FD8A1A;padding-left: 15px;margin-top: 15px;"
@click="goPcDetail">
温馨提示请登录PC端-工作台使用购买的工具 >></view>
<div class="navTab">
<view>
<view class="prdertool" v-for="(item,key) of currentoerderist" :key="key">
<view class="oerdeh">
<p>订单号{{item.orderNumber}}</p>
<p>{{ dateFormat(new Date(item.payTime)) }}</p>
</view>
<view style="display: flex;justify-content: space-between;margin-bottom:15px;">
<view style="display: flex;align-items: center;align-items: center;">
<!-- <img style="width:55px;height: 55px;margin-right: 5px;" src="http://image.keyitest.cn/static/my/25.png" alt=""> -->
<img style="width:55px;height: 55px;margin-right: 5px;" :src="item.imgs" alt="">
<view style="font-weight: bold;color: #1A1A1A;font-size:30rpx;">
{{item.name}}
<view v-if="item.priceType == 'month'"
style="font-weight: 500;font-size: 22rpx;color: #999999;margin-top: 20rpx;">
规格使用时长(按月计)</view>
<view v-if="item.priceType == 'time' || item.priceType == 'times'"
style="font-weight: 500;font-size: 22rpx;color: #999999;margin-top: 20rpx;">
规格测试服务(按次计)</view>
<view style="font-weight: 500;font-size: 22rpx;color: #999999;">数量{{item.amount}} |
交付方式{{item.deliverType}}</view>
</view>
</view>
<view style="margin-top: 30px; min-width: 150rpx; text-align: right;">
<!-- <p style="font-size: 13px;color: #4D4D4D;">实付金额</p> -->
<view v-if="item.status == 0" style="color: #f4a42f;margin-bottom: 10rpx;">
待支付
</view>
<view v-if="item.status == 1" style="color: #54be77;margin-bottom: 10rpx;">
支付成功
</view>
<view v-if="item.status == 2" style="color: #ef6461;margin-bottom: 10rpx;">
已取消
</view>
<view v-if="item.status == 3" style="color: #8593a3;margin-bottom: 10rpx;">
已过期
</view>
<view style="display: flex;align-items: center;justify-content: flex-end;">
<p style="font-weight: bold;font-size: 12px;color: #FD461A;margin-right:3px;">¥</p>
<p style="font-size:18px;color: #FD461A;">{{item.fee}}</p>
</view>
</view>
</view>
<u-line color="rgba(153,153,153,0.2)" />
<view class="submitt" v-if="item.status == 1 || item.status == 2 || item.status == 3">
<!-- <view class="button-g"
style="background:#FFFFFF;border: 1px solid #1578ED;color: #1578ED;margin-left:0"
@click="delOrder(item)">删除订单</view> -->
<view class="button-g" @click="againBug(item)">再次购买</view>
</view>
<view class="submitt" v-if="item.status == 0">
<view class="button-g"
style="background:#FFFFFF;border: 1px solid #1578ED;color: #1578ED;margin-left:0"
@click="cancleOrder(item)">取消订单</view>
<view class="button-g" @click="goPay(item)">去支付</view>
</view>
</view>
</view>
<view v-if="currentoerderist.length==0 &&current!=0" style="font-size:46rpx;
font-weight: bold;
color: #9D9D9D; text-align:center;margin-top:100px">暂无订单</view>
<view style="height:10px;"></view>
</div>
</view>
<u-toast ref="uToast" />
<u-popup style="background:#66666;padding: 20px;" v-model="isPopupShow" @close="close" @open="open"
mode="bottom" length="80%" height='60%' border-radius="15" :closeable='true' :mask-close-able="false">
<view style="background:#66666;padding:15px 20px 80px 20px; ">
<view style="background-color: #FFFFFF;">
<view class="horizontalline"></view>
<view>
<view class="commodity">
<p>商品名称</p>
<p style="color:#333333;">{{toolInfo.name}}</p>
</view>
<view class="commodity">
<p>商品规格</p>
<u-input border style="width:60%;height: 40rpx;" v-model="typeName" type="select"
@click="typeShow = true" />
<u-select v-model="typeShow" :list="toolInfo.deliverType=='SaaS' ? typeList : typeList1"
@confirm="citychange" mode="mutil-column-auto"></u-select>
</view>
<view class="commodity">
<p>商品价格</p>
<p style="color:#333333;">{{toolInfo.price}}</p>
</view>
<view class="commodity">
<p>购买数量</p>
<u-number-box v-model="cartnumber" @change="valChange"></u-number-box>
<!-- <p style="color:#333333 ;">Kinterface接口测试工具-软件版</p> -->
</view>
<view class="commodity">
<p>支付金额</p>
<p style="color:#FD461A;margin-top: -3px;">
<span>¥ </span>
<span style="font-size:40rpx;margin-left:10rpx;font-weight: 800;">{{allpirse}}</span>
</p>
</view>
</view>
</view>
</view>
<u-line></u-line>
<view class="submitt22"
style="display: flex;justify-content: center; ;box-shadow:none;background: transparent;padding:0;">
<view class="button-g11"
style="width:80vw; background: linear-gradient(90deg, #5EA6FD, #1A81F9);color: #FFFFFF">支付</view>
</view>
</u-popup>
</view>
</template>
<script>
import {
dateFormat
} from '@/utils/util.js'
// 0 1
export default {
data() {
return {
keyware: '',
current: '0',
ornamelist: [{
name: '全部'
}, {
name: '待支付'
},
{
name: '已取消'
}, {
name: '已完成'
}
],
customActionStyle: {
color: '#808080', //
fontSize: '16px' //
//
},
orderlist: [],
currentoerderist: [],
//
isPopupShow: false,
cartnumber: 1,
typeShow: false,
typeName: '使用时长(按月计)',
typeList: [{
value: '测试服务(按次计)',
label: '测试服务(按次计)'
}, {
value: '使用时长(按月计)',
label: '使用时长(按月计)'
}],
typeList1: [{
value: '使用时长(按月计)',
label: '使用时长(按月计)'
}],
allpirse: 0,
toolInfo: {}
}
},
onLoad: function(option) {
this.current = option.current;
this.http.quickGet('/my/order?pageNum=1&pageSize=100', true).then(res => {
this.orderlist = res.data.rows
this.orderlist.forEach(item => {
item.imgs = this.http.baseUrl + item.img
})
if (this.current == 0) {
this.currentoerderist = this.orderlist
} else if (this.current == 1) {
this.currentoerderist = this.orderlist.filter(it => it.status == 0)
} else if (this.current == 3) {
this.currentoerderist = this.orderlist.filter(it => it.status == 1)
} else if (this.current == 2) {
this.currentoerderist = this.orderlist.filter(it => it.status == 2)
}
})
},
methods: {
dateFormat,
goPcDetail() {
uni.navigateTo({
url: '/pages/personal/setup/guide'
})
},
tabsChange(index) {
if (index == 0) {
this.currentoerderist = this.orderlist
} else if (index == 1) {
this.currentoerderist = this.orderlist.filter(it => it.status == 0)
} else if (index == 3) {
this.currentoerderist = this.orderlist.filter(it => it.status == 1)
} else if (index == 2) {
this.currentoerderist = this.orderlist.filter(it => it.status == 2)
}
// this.currentoerderist = this.orderlist.filter(item => item.status == index - 1);
this.current = index
},
shopping(type) {
if (type == 'cart') {
this.$refs.uToast.show({
title: '功能暂未开通',
type: 'info',
url: '/pages/user/index'
})
}
},
seacrhko() {
const str = this.keyware ? `&projectName=${this.keyware}` : ''
this.http.quickGet('/my/order?pageNum=1&pageSize=100' + str, true).then(res => {
this.orderlist = res.data.rows
this.orderlist.forEach(item => {
item.imgs = this.http.baseUrl + item.img
})
if (this.current == 0) {
this.currentoerderist = this.orderlist
} else if (this.current == 1) {
this.currentoerderist = this.orderlist.filter(it => it.status == 0)
} else if (this.current == 3) {
this.currentoerderist = this.orderlist.filter(it => it.status == 1)
} else if (this.current == 2) {
this.currentoerderist = this.orderlist.filter(it => it.status == 2)
}
})
},
close() {
this.isPopupShow = false
},
open() {},
citychange(e) {
this.typeName = e[0].label
},
valChange(e) {
this.allpirse = e.value * this.toolInfo.price
},
//
delOrder(item) {
// const data = {
// orderNumber: item.orderNumber,
// }
// this.http.quickPost(`/play/cancel_play`, data, true).then(res => {
// if (res.retcode == 'SUCCESS') {
// this.http.quickGet('/my/order?pageNum=1&pageSize=999', true).then(res => {
// this.orderlist = res.data.rows
// this.orderlist.forEach(item => {
// item.imgs = this.http.baseUrl + item.img
// })
// if (this.current == 0) {
// this.currentoerderist = this.orderlist
// } else if (this.current == 1) {
// this.currentoerderist = this.orderlist.filter(it => it.status == 0)
// } else if (this.current == 2) {
// this.currentoerderist = this.orderlist.filter(it => it.status == 2)
// } else if (this.current == 3) {
// this.currentoerderist = this.orderlist.filter(it => it.status == 1)
// }
// })
// }
// })
},
// tioazhuan
againBug(item) {
uni.navigateTo({
url: `/pages/index/toolleasing/tooldetails?id=${item.toolId}`
})
},
//
cancleOrder(item) {
const data = {
orderNumber: item.orderNumber,
}
this.http.quickPost(`/play/cancel_play`, data, true).then(res => {
if (res.retcode == 'SUCCESS') {
this.http.quickGet('/my/order?pageNum=1&pageSize=999', true).then(res => {
this.orderlist = res.data.rows
this.orderlist.forEach(item => {
item.imgs = this.http.baseUrl + item.img
})
if (this.current == 0) {
this.currentoerderist = this.orderlist
} else if (this.current == 1) {
this.currentoerderist = this.orderlist.filter(it => it.status == 0)
} else if (this.current == 2) {
this.currentoerderist = this.orderlist.filter(it => it.status == 2)
} else if (this.current == 3) {
this.currentoerderist = this.orderlist.filter(it => it.status == 1)
}
})
}
})
},
//
goPay(item) {
const that = this
const data = {
orderNumber: item.orderNumber,
payType: 'W06'
}
this.http.quickPost(`/play/wait_play`, data, true).then(res => {
const info = JSON.parse(res.data.payinfo)
uni.requestPayment({
timeStamp: info.timeStamp,
nonceStr: info.nonceStr,
package: info.package,
signType: info.signType,
paySign: info.paySign,
success(r) {
uni.showToast({
icon: 'none',
title: '支付成功,请前往pc端工作台使用'
})
that.current = 0
that.http.quickGet('/my/order?pageNum=1&pageSize=100', true).then(res => {
that.orderlist = res.data.rows
that.orderlist.forEach(item => {
item.imgs = that.http.baseUrl + item.img
})
if (that.current == 0) {
that.currentoerderist = that.orderlist
} else if (that.current == 1) {
that.currentoerderist = that.orderlist.filter(it => it
.status == 0)
} else if (that.current == 2) {
that.currentoerderist = that.orderlist.filter(it => it
.status == 2)
} else if (that.current == 3) {
that.currentoerderist = that.orderlist.filter(it => it
.status == 1)
}
})
},
fail(error) {
console.log(error);
uni.showToast({
icon: 'none',
title: '支付失败'
})
}
})
})
},
}
}
</script>
<style>
.navTab {
padding: 13px 15px;
}
.prdertool {
padding: 28rpx;
background: #FFFFFF;
border-radius: 10rpx;
margin-bottom: 13px;
}
.oerdeh {
display: flex;
justify-content: space-between;
color: #808080;
font-size: 23rpx;
margin-bottom: 13px;
}
.submitt {
/* height:70px; */
font-size: 20px;
margin-top: 15px;
display: flex;
justify-content: flex-end;
}
.button-g {
width: 170rpx;
height: 58rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 88rpx;
text-align: center;
line-height: 58rpx;
color: #FFFFFF;
font-size: 28rpx;
margin-left: 13px;
}
.button-g11 {
width: 540rpx;
height: 70rpx;
background: linear-gradient(90deg, #FF8600, #FE2B2B);
border-radius: 35rpx;
text-align: center;
line-height: 70rpx;
color: #FFFFFF;
font-size: 30rpx;
margin-left: 13px;
}
.commodity {
display: flex;
color: #808080;
font-size: 30rpx;
margin: 20px 0;
}
.commodity>>>input {
min-height: 40rpx !important;
}
.submitt22 {
height: 60px;
/* line-height: 55px; */
/* text-align: center; */
font-size: 20px;
background: #FFFFFF;
box-shadow: -4px 7px 18px 0px rgba(248, 164, 54, 0.33);
margin-top: 60px;
position: fixed;
bottom: 0;
width: 100vw;
padding: 10px 30px;
display: flex;
}
</style>

@ -0,0 +1,474 @@
<template>
<view>
<view class="topbg">
<view style="display: flex;justify-content: space-between;">
<view v-if='phoneuserinfo' style="display: flex;align-items: center;">
<div>
<img style='width:55px;height:55px;border-radius: 50%' v-if='avatar' :src="avatar.indexOf('http')==0?avatar:'https://keyitest.cn'+avatar" alt="">
<img v-else style='width:55px;height:55px;border-radius: 50%' src="https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132" alt="">
</div>
<view style='margin-left:10px;'>
<p v-if='phoneuserinfo.companyName' style='margin-bottom:3px;font-size:17px;font-weight:600;'>{{phoneuserinfo.companyName}}</p>
<p v-else style='margin-bottom:3px;font-size:17px;font-weight:600;'>{{nickName}}</p>
<div style="display: flex;align-items: center;">
<p v-if='phoneuserinfo.userName' style='color:rgb(0 0 0/0.7);margin-right:10px;font-size:15px;'>UID: {{phoneuserinfo.userName}}</p>
<u-tag :text="testerStatustext" plan type="info" shape='circle' color='#36322C' bg-color='#FCF3E2' style="border-color: transparent!important"/>
</div>
</view>
</view>
<view v-else style="display: flex;">
<img style='width:55px;height:55px;' src="http://image.keyitest.cn/static/my/1.png" alt="">
<view style='margin-left:10px;'>
<p style='margin-bottom:10px;font-size:16px;margin-top: 15px;font-weight: 700;' @click="logingj">点击登录</p>
<!-- <u-tag text="已认证" plan shape='circle' color='#2856E7' bg-color='#FFFFFF' /> -->
</view>
</view>
<!-- <div style="display: flex;flex-direction: column;">
<div class='peoinfo' >
<p style="margin-right:5px">服务团队</p>
<img style='width:14px;height:14px;' src="http://image.keyitest.cn/static/my/2.png" alt="">
</div>
<view class='personinfo' >
<p style="margin-right:10px">个人主页</p>
<u-icon name="arrow-right" color="#FFFFFF"></u-icon>
</view>
</div> -->
</view>
<!-- <view class="memeber">
<img style="width: 16px;height:12px;margin-left: 5px;" src="http://image.keyitest.cn/static/my/5.png" alt="">
<p>用户开通企业会员享受全部权益</p>
<img style="width:82px;height:27px;" src="http://image.keyitest.cn/static/my/4.png" alt="">
</view> -->
</view>
<view style='width:94vw;margin:0px 3vw;'>
<view class="handle" >
<view style="display: flex;justify-content: space-between;align-items: center;margin:0px 0px 0 20px">
<p style='font-weight:bold;font-size: 16px;'>我的订单</p>
<view class='personinfo' style="margin-top:0px;" @click="orders()">
<p style="margin-right:5px;color: #808080;">全部订单</p>
<u-icon name="arrow-right" color="#666666" style='margin-top: 2px;'></u-icon>
</view>
</view>
<view style="display: flex;justify-content: space-between;padding:10px;">
<view class="associationddd" @click="changeOrderUrl('./ordernumber/ordernumber?current=1')">
<img src="http://image.keyitest.cn/static/my/6.png" alt="">
<p>待支付</p>
</view>
<view class="associationddd" @click="changeOrderUrl('./ordernumber/ordernumber?current=2')">
<img src="http://image.keyitest.cn/static/my/7.png" alt="">
<p>已完成</p>
</view>
<view class="associationddd" @click="changeOrderUrl('./ordernumber/ordernumber?current=3')">
<img src="http://image.keyitest.cn/static/my/8.png" alt="">
<p>已取消</p>
</view>
<view class="associationddd" @click="changeOrderUrl('./ordernumber/ordernumber?current=4')">
<img src="http://image.keyitest.cn/static/my/9.png" alt="">
<p>待评价</p>
</view>
</view>
</view>
<view class="handle" style='margin:10px 0;padding:15px 0px 5px 0px; '>
<text style='font-weight:bold;font-size: 16px;margin-left:20px'>我的服务</text>
<view style="display: flex;justify-content: space-between;padding:15px 5px 5px 15px;">
<view class="associationddd" @click="servier('mysignup/notice')">
<img src="/static/index/mysignup.png" alt="">
<p>我的报名</p>
</view>
<!-- <view class="associationddd" @click="servier('leavemessage/index')">
<img src="http://image.keyitest.cn/static/my/11.png" alt="">
<p>我的留言</p>
</view> -->
<view class="associationddd" style="width: 75px;" @click="servier('mytestkit/mytestkit')">
<img src="/static/index/testkit.png" alt="">
<p>我的测试宝</p>
</view>
<view class="associationddd" style="width:72px;" @click="servier('mycrowdtest/mycrowdtest')">
<img src="/static/index/zc.png" alt="">
<p>我的众包</p>
</view>
<view class="associationddd" @click="servier('setup/index')">
<img src="http://image.keyitest.cn/static/my/13.png" alt="">
<p>设置</p>
</view>
</view>
</view>
<img class="recomimg" src="http://image.keyitest.cn/static/my/15.png" alt="" />
<view class="recommend" >
<view class="currekei" v-for="(item,key) of toollist" :key="key">
<view class="imgone" @click="details('tool',item.toolId)">
<img v-if="item.name=='代码静态分析工具'" :src="item.imgs" alt="">
<img v-if="item.name=='源代码安全检测工具'" :src="item.imgs" style="width:158rpx" alt="">
<img v-if="item.name=='C/C++单元测试工具'" :src="item.imgs" style="width:150rpx" alt="">
<img v-if="item.name=='接口测试工具'" :src="item.imgs" style="width:140rpx" alt="">
<img v-if="item.name=='JAVA单元测试工具'" :src="item.imgs" style="width:152rpx" alt="">
<img v-if="item.name=='功能测试工具AutoFun'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='代码组成分析平台'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='性能测试工具'" :src="item.imgs" alt="">
<img v-if="item.name=='自鉴-交互式应用安全测试系统IAST'" :src="item.imgs" style="width:145rpx" alt="">
<img v-if="item.name=='Web应用安全测试工具'" :src="item.imgs" style="width:155rpx" alt="">
<img v-if="item.name=='资产识别及漏洞管理工具'" :src="item.imgs" style="width:200rpx" alt="">
<img v-if="item.name=='性能测试工具AutoLoad'" :src="item.imgs" alt="">
</view>
<!-- item.toolTypeName.indexOf('单元')>-1 -->
<p class="leop">{{item.name | tiilnamechange}}</p>
<view style='display:flex;margin:30rpx 0'>
<view v-if='item.toolTypeName' class="tabone">{{item.typel}}测试</view>
<view class="tabone" style="color: #FF8A00;border: 1px solid #FF8A00;margin-left: 10px;">{{item.deliverType}}</view>
</view>
<view style='display:flex;justify-content:space-between;margin:15rpx 0;width:100%'>
<p>¥ {{item.price}}</p>
<img class="imgtwo" src="http://image.keyitest.cn/static/index/add.png" alt="" @click="addcart(item.toolId)">
</view>
</view>
</view>
</view>
<u-toast ref="uToast" />
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下' show-cancel-button='true'
cancel-color='#1578ED' confirm-color='#1578ED' @confirm="lkconfirm" @cancel='tokenshow=false'></u-modal>
</view>
</template>
<script>
import comstemutil from '../../utils/comstemutil'
export default {
data() {
return {
wxUserInfo:null,
grantType:'phone',
canIUseGetUserProfile: false,
toollist:[],
phoneuserinfo:null,
tokenshow:false,
testerStatustext:'',
avatar:'',
nickName:'',
}
},
onShow() {
let Token = uni.getStorageSync('accessToken');
// console.log('wxUserInfo',uni.getStorageSync('wxUserInfo'))
if(Token){
this.phoneuserinfo=uni.getStorageSync('wxUserInfo');
this.avatar=uni.getStorageSync('avatar');
this.nickName=uni.getStorageSync('nickName');
this.http.quickGet(`/tester/cert/apply/${this.phoneuserinfo.userId}`,true).then(res=>{
console.log('实名认证信息---',res)
if(res.data.code==200){
let testerdata=res.data.data;
if(testerdata){
if(testerdata.status==1){
this.testerStatustext='已认证'
}else{
this.testerStatustext='未认证'
}
}else{
this.testerStatustext='未认证'
}
}else{
this.phoneuserinfo=null
}
})
}else{
this.phoneuserinfo=null
}
},
onLoad() {
let accessToken = uni.getStorageSync('accessToken');
if(accessToken){
this.phoneuserinfo=uni.getStorageSync('wxUserInfo');
// let testerStatus=this.phoneuserinfo.testerStatus
this.http.quickGet(`/tester/cert/apply/${this.phoneuserinfo.userId}`,true).then(res=>{
// console.log('---',res)
if(res.data.code==200){
let testerdata=res.data.data;
if(testerdata){
if(testerdata.status==1){
this.testerStatustext='已认证'
}else{
this.testerStatustext='未认证'
}
}else{
this.testerStatustext='未认证'
}
}else{
this.phoneuserinfo=null
}
})
}
this.http.quickGet('/business/tool/listAnon?status=1').then(res=>{
// console.log('---',res.data.rows)
let tooldata=res.data.rows;
tooldata.forEach(item=>{
if(item.name=='代码静态分析工具'){
item.imgs='http://image.keyitest.cn/static/index/11.png'
}else if(item.name=='源代码安全检测工具'){
item.imgs='http://image.keyitest.cn/static/index/5.png'
}else if(item.name=='C/C++单元测试工具'){
item.imgs='http://image.keyitest.cn/static/index/2.png'
}else if(item.name=='接口测试工具'){
item.imgs='http://image.keyitest.cn/static/index/12.png'
}else if(item.name=='JAVA单元测试工具'){
item.imgs='http://image.keyitest.cn/static/index/tool/1.png'
}else if(item.name=='功能测试工具AutoFun'){
item.imgs='http://image.keyitest.cn/static/index/3.png'
}else if(item.name=='代码组成分析平台'){
item.imgs='http://image.keyitest.cn/static/index/tool/4.png'
}else if(item.name=='性能测试工具'){
item.imgs='http://image.keyitest.cn/static/index/6.png'
}else if(item.name=='自鉴-交互式应用安全测试系统IAST'){
item.imgs='http://image.keyitest.cn/static/index/tool/3.png'
}else if(item.name=='Web应用安全测试工具'){
item.imgs='http://image.keyitest.cn/static/index/tool/2.png'
}else if(item.name=='资产识别及漏洞管理工具'){
item.imgs='http://image.keyitest.cn/static/index/zc.png'
}else if(item.name=='性能测试工具AutoLoad'){
item.imgs='http://image.keyitest.cn/static/index/xn.png'
}
item.typel=item.toolTypeName.slice(0,2)
})
this.toollist=res.data.rows.splice(0,6)
// console.log('---',this.toollist)
})
},
filters:{
tiilnamechange(value){
if (!value) return ''
if(value.length>9){
return value.slice(0, 7) + '...'
}
return value
}
},
methods: {
lkconfirm(){
uni.navigateTo({
url: '/pages/personal/login'
})
},
logingj(){
uni.navigateTo({
url:'/pages/personal/login'
})
},
details(type,id){
// console.log('id---',id)
if(type=='tool'){
uni.navigateTo({
url: `../index/tooldetails?id=${id}`
})
}else{
uni.navigateTo({
url: './crowdsourcingdetails'
})
}
},
//
addcart(id){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
//
this.http.quickGet(`/my/addShoppingCart/${id}/1`,true).then(response => {
// console.log('response',response)
if(response.data.code==200){
console.log('111')
this.$refs.uToast.show({
title: '添加购物车成功',
type: 'success',
duration: 1000,
isTab:true,
url:'/pages/shoppingtrolley/shoppingtrolley'
})
}
})
}
},
orders(){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
uni.navigateTo({
url:'./ordernumber/ordernumber?current=0'
})
}
},
changeOrderUrl(url){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
uni.navigateTo({
url:url
})
}
},
//
servier(url){
if(this.phoneuserinfo){
uni.navigateTo({
url:url
})
}else{
this.tokenshow=true
}
}
}
}
</script>
<style>
.topbg{
width:100vw;
height:45vw;
background-size:100% 45vw;
background-image:url('http://image.keyitest.cn/banner-4.png');
background-repeat:no-repeat;
padding:30px 0vw 20px 5vw;
}
.peoinfo{
height:38px;
width:110px;
line-height: 38px;
background: rgba(255, 241, 228, 0.25);
border-radius: 30px 0px 0px 30px;
font-size: 16px;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
.personinfo{
height: 38px;
width: 110px;
line-height: 38px;
font-size: 15px;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
margin-top:10px;
}
.memeber{
width:90vw;
height:16vw;
margin-top: 20px;
background-size:100% 16vw;
background-image:url('http://image.keyitest.cn/member.png');
background-repeat:no-repeat;
display: flex;
align-items: center;
justify-content:space-around;
color: #FEDD92;
}
.handle{
margin-top:-70px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 0px 29px 0px rgba(187, 86, 25, 0.17);
border-radius: 14px;
padding:5px 0 0 0;
}
.handle img{
width: 20px;
height: 20px;
}
.associationddd{
width:65px;
text-align:center;
margin:5px 0;
}
.recomimg{
width: 50vw;
height:4vw;
display: flex;
margin: 20px auto;
}
.recommend{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.currekei{
width:48%;
/* height: 360rpx; */
background: #FFFFFF;
border-radius: 10px;
padding:10px;
margin-bottom:20rpx
}
.leop{
font-size:30rpx;
/* height:40px ; */
font-weight: bold;
color: #1A1A1A;
/* margin: 13rpx 0; */
display: flex;
align-items: center;
justify-content: center;
}
.tabone{
/* width: 98rpx; */
/* height: 33rpx; */
border: 1px solid #2B80FC;
border-radius: 4rpx;
font-size: 20rpx;
font-weight: 500;
color: #2387EE;
text-align: center;
/* line-height: 33rpx; */
padding:3px 5px;
}
.currekei :nth-child(4){
color: #FD461A;
font-weight: 800;
font-size: 34rpx;
}
.imgone{
width: 119rpx;
margin:10px auto;
}
.imgone img{
width: 119rpx;
height: 123rpx;
}
.imgtwo{
width: 32rpx;
height:32rpx;
}
.perfect{
width: 80%;
height: 50px;
margin:25px auto;
line-height: 50px;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
/* box-shadow: -4px 7px 18px 0px rgba(248, 164, 54, 0.33); */
border-radius: 44px;
font-size: 18px;
color: #FFFFFF;
}
/* .u-drawer__scroll-view{
height:0;
} */
.perfectsty{
text-align: center;
border-radius: 22px;
}
.popupu{
overflow-y: scroll;
}
.topbg .u-tag{
border-color:none
}
</style>

@ -0,0 +1,545 @@
<template>
<view>
<view class="topbg">
<view style="display: flex;justify-content: space-between;">
<view v-if='phoneuserinfo' style="display: flex;align-items: center">
<view @click="goUserInfo">
<img style='width:55px;height:55px;border-radius: 50%' v-if='avatar' :src="avatar.indexOf('http')==0?avatar:base+avatar" alt="">
<!-- <img v-else style='width:55px;height:55px;border-radius: 50%' src="http://image.keyitest.cn/static/my/mphoto.png" alt=""> -->
<img v-else style='width:55px;height:55px;border-radius: 50%' src="../../static/crowd/defaultAva.jpg" alt="">
</view>
<view style='margin-left:10px;'>
<p v-if='phoneuserinfo.companyName' style='margin-bottom:5px;font-size:17px;font-weight:600;'>{{phoneuserinfo.companyName}}</p>
<p v-else style='margin-bottom:5px;font-size:17px;font-weight:600;'>{{nickName}}</p>
<view style="display: flex;align-items: center;">
<p v-if='phoneuserinfo.userName' style='color:rgb(0 0 0/0.7);margin-right:10px;font-size:15px;'>UID: {{phoneuserinfo.userName}}</p>
<u-tag :text="testerStatustext" plan type="info" shape='circle' color='#FEFEFE' bg-color='#1A81F9' border-color='transparent' @click="nextcert"/>
</view>
</view>
</view>
<view v-else style="display: flex;">
<img style='width:55px;height:55px;' src="http://image.keyitest.cn/static/my/mphoto.png" alt="">
<view style='margin-left:10px;'>
<p style='margin-bottom:10px;font-size:16px;margin-top: 15px;font-weight: 700;' @click="logingj">点击登录</p>
</view>
</view>
</view>
</view>
<view style='width:94vw;margin:10px 3vw 0 3vw;'>
<!-- <view class="handle" >
<view style="display: flex;justify-content: space-between;align-items: center;margin:0px 0px 0 20px">
<p style='font-weight:bold;font-size:15px;'>我的订单</p>
<view class='personinfo' style="margin-top:0px;" @click="orders()">
<p style="margin-right:5px;color: #808080;font-size: 14px;">全部订单</p>
<u-icon name="arrow-right" color="#666666" style='margin-top: 2px;'></u-icon>
</view>
</view>
<view style="display: flex;justify-content: space-between;padding:10px;">
<view class="associationddd" @click="changeOrderUrl('./ordernumber/ordernumber?current=1')">
<img src="http://image.keyitest.cn/static/my/mtopaid.png" alt="">
<p>待支付</p>
</view>
<view class="associationddd" @click="changeOrderUrl('./ordernumber/ordernumber?current=2')">
<img src="http://image.keyitest.cn/static/my/mcompont.png" alt="">
<p>已完成</p>
</view>
<view class="associationddd" @click="changeOrderUrl('./ordernumber/ordernumber?current=3')">
<img src="http://image.keyitest.cn/static/my/mcancel.png" alt="">
<p>已取消</p>
</view>
<view class="associationddd" @click="changeOrderUrl('./ordernumber/ordernumber?current=4')">
<img src="http://image.keyitest.cn/static/my/mevaluate.png" alt="">
<p>待评价</p>
</view>
</view>
</view> -->
<view class="handle" style='margin:-70px 0;padding:15px 12px 5px 15px; '>
<text style='font-weight:bold;font-size:15px;'>推荐功能</text>
<view class="advance" @click="servier('message')">
<img src="http://image.keyitest.cn/static/my/mmessage.png" alt="" />
<view class="medaget">
<p>消息中心</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<!-- <view class="advance" @click="servier('signup')">
<img src="http://image.keyitest.cn/static/my/msignup.png" alt="" />
<view class="medaget">
<p>我的报名</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view> -->
<view class="advance" @click="servier('bcrowd')">
<img src="http://image.keyitest.cn/static/my/mbcrowd.png" alt="" />
<view class="medaget">
<p>我的众包</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="servier('authentication')">
<img src="http://image.keyitest.cn/static/my/mauthentication.png" alt="" />
<view class="medaget">
<p>实名认证</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="servier('peixunban')">
<img src="http://image.keyitest.cn/static/index/renliwb/peixunbanlogo.png" alt="" />
<view class="medaget">
<p>我的培训班</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="orders">
<img src="http://image.keyitest.cn/static/index/renliwb/orderlogo.png" alt="" />
<view class="medaget">
<p>我的订单</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="servier('usepeople')">
<img src="http://image.keyitest.cn/static/index/renliwb/yongrenlogo.png" alt="" />
<view class="medaget">
<p>我的用人需求</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="servier('myreview')">
<img src="http://image.keyitest.cn/static/index/renliwb/reviewlogo.png" alt="" />
<view class="medaget">
<p>我的评价</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="servier('notes')">
<img src="http://image.keyitest.cn/static/my/mnotes.png" alt="" />
<view class="medaget">
<p>个人简历</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="servier('myper')">
<img src="http://image.keyitest.cn/static/my/mmyper.png" alt="" />
<view class="medaget">
<p>我的钱包</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="servier('setmy')">
<img src="http://image.keyitest.cn/static/my/msetmy.png" alt="" />
<view class="medaget">
<p>设置</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
<view class="advance" @click="servier('pcweb')">
<img src="http://image.keyitest.cn/static/my/mpcweb.png" alt="" />
<view class="medaget" style="border-bottom: none;">
<p>PC网页版</p>
<u-icon name="arrow-right" color="#CCCCCC" style="margin-top: 2px;"></u-icon>
</view>
</view>
</view>
</view>
<view style="height:15px"> </view>
<u-toast ref="uToast" />
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下' show-cancel-button='true'
cancel-color='#1578ED' confirm-color='#1578ED' @confirm="lkconfirm" @cancel='tokenshow=false'></u-modal>
</view>
</template>
<script>
import comstemutil from '../../utils/comstemutil'
export default {
data() {
return {
wxUserInfo:null,
grantType:'phone',
canIUseGetUserProfile: false,
phoneuserinfo:null,
tokenshow:false,
testerStatustext:'',
avatar:'',
nickName:'',
base: this.http.baseUrl
}
},
onShow() {
let Token = uni.getStorageSync('accessToken');
// console.log('wxUserInfo',uni.getStorageSync('wxUserInfo'))
if(Token){
this.phoneuserinfo=uni.getStorageSync('wxUserInfo');
// console.log('',this.phoneuserinfo)
this.avatar=uni.getStorageSync('avatar');
this.nickName=uni.getStorageSync('nickName');
this.http.quickGet(`/tester/cert/apply/${this.phoneuserinfo.userId}`,true).then(res=>{
console.log('实名认证信息---',res)
if(res.data.code==200){
let testerdata=res.data.data;
if(testerdata){
if(testerdata.status==1){
this.testerStatustext='已认证'
}else{
this.testerStatustext='未认证'
}
}else{
this.testerStatustext='未认证'
}
}else{
this.testerStatustext='未认证'
}
})
}else{
this.phoneuserinfo=null
}
},
onLoad() {
// let accessToken = uni.getStorageSync('accessToken');
// if(accessToken){
// this.phoneuserinfo=uni.getStorageSync('wxUserInfo');
// console.log('1',this.phoneuserinfo)
// // let testerStatus=this.phoneuserinfo.testerStatus
// this.http.quickGet(`/tester/cert/apply/${this.phoneuserinfo.userId}`,true).then(res=>{
// // console.log('---',res)
// if(res.data.code==200){
// let testerdata=res.data.data;
// if(testerdata){
// if(testerdata.status==1){
// this.testerStatustext=''
// }else{
// this.testerStatustext=''
// }
// }else{
// this.testerStatustext=''
// }
// }else{
// this.testerStatustext=''
// }
// })
// }else{
// this.phoneuserinfo=null
// }
},
filters:{
tiilnamechange(value){
if (!value) return ''
if(value.length>9){
return value.slice(0, 7) + '...'
}
return value
}
},
methods: {
goUserInfo() {
uni.navigateTo({
url: '/pages/personal/setup/Information'
})
},
nextcert(){
if(this.testerStatustext=='未认证'){
uni.navigateTo({
url: '/pages/personal/setup/certification'
})
}
},
lkconfirm(){
uni.navigateTo({
url: '/pages/personal/login'
})
},
logingj(){
uni.navigateTo({
url:'/pages/personal/login'
})
},
details(type,id){
// console.log('id---',id)
if(type=='tool'){
uni.navigateTo({
url: `../index/tooldetails?id=${id}`
})
}else{
uni.navigateTo({
url: './crowdsourcingdetails'
})
}
},
//
addcart(id){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
//
this.http.quickGet(`/my/addShoppingCart/${id}/1`,true).then(response => {
// console.log('response',response)
if(response.data.code==200){
console.log('111')
this.$refs.uToast.show({
title: '添加购物车成功',
type: 'success',
duration: 1000,
isTab:true,
url:'/pages/shoppingtrolley/shoppingtrolley'
})
}
})
}
},
orders(){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
uni.navigateTo({
url:'./ordernumber/ordernumber?current=0'
})
}
},
changeOrderUrl(url){
let accessToken = uni.getStorageSync('accessToken');
if(!accessToken){
this.tokenshow=true
}else{
uni.navigateTo({
url:url
})
}
},
//
servier(type){
if(this.phoneuserinfo){
if(type=='message'){
uni.navigateTo({
url:'/pages/message/message'
})
}else if(type=='signup'){
uni.navigateTo({
url:'/pages/personal/mysignup/notice'
})
}else if(type=='bcrowd'){
uni.navigateTo({
url:'/pages/personal/mycrowdtest/mycrowdtest'
})
}else if(type=='authentication'){
uni.navigateTo({
url:'/pages/personal/setup/certification'
})
}else if(type=='notes'){
uni.navigateTo({
url:'/pages/personal/personalresume/personalresume'
})
}else if(type=='myper'){
uni.navigateTo({
url:'/pages/personal/mytestkit/mytestkit'
})
}else if(type=='setmy'){
uni.navigateTo({
url:'/pages/personal/setup/index'
})
}else if(type=='pcweb'){
uni.navigateTo({
url:'/pages/personal/setup/pcweb'
})
}
else if(type=='peixunban'){
uni.navigateTo({
url:'/pages/personal/setup/peixunban'
})
}
else if(type=='usepeople'){
uni.navigateTo({
url:'/pages/personal/setup/usepeople'
})
}
else if(type=='myreview'){
uni.navigateTo({
url:'/pages/personal/setup/myreview'
})
}
}else{
this.tokenshow=true
}
}
}
}
</script>
<style>
.topbg{
width:100vw;
height:45vw;
background-size:100% 45vw;
background-image:url('http://image.keyitest.cn/static/my/mpersonbanner.png');
background-repeat:no-repeat;
padding:30px 0vw 20px 5vw;
}
.peoinfo{
height:38px;
width:110px;
line-height: 38px;
background: rgba(255, 241, 228, 0.25);
border-radius: 30px 0px 0px 30px;
font-size: 16px;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
.personinfo{
height: 38px;
width: 110px;
line-height: 38px;
font-size: 15px;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
margin-top:10px;
}
.memeber{
width:90vw;
height:16vw;
margin-top: 20px;
background-size:100% 16vw;
background-image:url('http://image.keyitest.cn/member.png');
background-repeat:no-repeat;
display: flex;
align-items: center;
justify-content:space-around;
color: #FEDD92;
}
.handle{
margin-top:-70px;
background: rgba(255, 255, 255, 1);
box-shadow: 0px 0px 29px 0px rgba(187, 86, 25, 0.17);
border-radius:5px;
padding:5px 0 0 0;
}
.handle img{
width: 20px;
height: 20px;
}
.associationddd{
width:65px;
text-align:center;
margin:5px 0;
color: #595959;
}
.recomimg{
width: 50vw;
height:4vw;
display: flex;
margin: 20px auto;
}
.recommend{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.currekei{
width:48%;
/* height: 360rpx; */
background: #FFFFFF;
border-radius: 10px;
padding:10px;
margin-bottom:20rpx
}
.leop{
font-size:30rpx;
/* height:40px ; */
font-weight: bold;
color: #1A1A1A;
/* margin: 13rpx 0; */
display: flex;
align-items: center;
justify-content: center;
}
.tabone{
/* width: 98rpx; */
/* height: 33rpx; */
border: 1px solid #2B80FC;
border-radius: 4rpx;
font-size: 20rpx;
font-weight: 500;
color: #2387EE;
text-align: center;
/* line-height: 33rpx; */
padding:3px 5px;
}
.currekei :nth-child(4){
color: #FD461A;
font-weight: 800;
font-size: 34rpx;
}
.imgone{
width: 119rpx;
margin:10px auto;
}
.imgone img{
width: 119rpx;
height: 123rpx;
}
.imgtwo{
width: 32rpx;
height:32rpx;
}
.perfect{
width: 80%;
height: 50px;
margin:25px auto;
line-height: 50px;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
/* box-shadow: -4px 7px 18px 0px rgba(248, 164, 54, 0.33); */
border-radius: 44px;
font-size: 18px;
color: #FFFFFF;
}
/* .u-drawer__scroll-view{
height:0;
} */
.perfectsty{
text-align: center;
border-radius: 22px;
}
.popupu{
overflow-y: scroll;
}
.topbg .u-tag{
border-color:none;
}
.advance{
display: flex;
justify-content: space-between;
margin-top: 15px;
}
.medaget{
border-bottom: 1px solid #99999926;
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 14px;
width:93%;
}
.advance img{
width: 15px;
height: 15px;
margin-top: 3px;
}
</style>

@ -0,0 +1,77 @@
<template>
<view class='navTab'>
<p style='font-size: 18px;font-weight: bold;margin: 10px 0 20px 0;'>我的优势</p>
<u-input style="width:100%;" border='true' type='textarea' height='300' maxlength='3000' v-model="advantage" placeholder='请输入我的优势'/>
<view class="bottbtn" @click="resource">保存</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
advantage:''
}
},
onLoad() {
let wxUserInfo = uni.getStorageSync('wxUserInfo');
this.http.quickGet(`/tester/TesterInfo/resume/${wxUserInfo.userId}`,true).then(res=>{
this.advantage=res.data.personalAdvantage
console.log('简历信息---',res)
})
},
methods: {
resource(){
let wxUserInfo = uni.getStorageSync('wxUserInfo');
if(!this.advantage){
uni.showToast({ title: '请输入我的优势', icon: 'none', duration: 1000 });
return;
}
if(this.advantage.length>3000){
uni.showToast({ title: '最多可输入3000字', icon: 'none', duration: 1000 });
return;
}
let data={
userId:wxUserInfo.userId,
personalAdvantage:this.advantage,
}
this.http.quickPost(`/tester/TesterInfo/advantage`,data,true).then(res=>{
if(res.data.code==200){
uni.showToast({ title: '我的优势编辑成功', icon: 'success', duration: 2000 });
setTimeout(()=>{
uni.navigateBack({
delta:1
})
},1000)
}
})
}
}
}
</script>
<style>
.navTab{
background-color: #ffffff;
width: 96vw;
margin: 2vh auto;
padding: 10px 15px 30px 25px;
border-radius: 5px;
}
/* .navTab .u-input{
min-height:200px;
} */
.bottbtn{
margin:30px 3vw 15px 3vw;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:15rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
}
</style>

@ -0,0 +1,323 @@
<template>
<view style="">
<view class="navTab">
<view class="sintitle">
<img src="/static/index/grxx.png" alt="">
<p>基本信息</p>
</view>
<u-form :model="basicobj" ref="basicobj" label-position='left' label-width='150' border-bottom='false' >
<u-form-item label="姓名:" prop="name" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" v-model="basicobj.name" placeholder='输入姓名'/>
</view>
</u-form-item>
<u-form-item label="所在城市:" prop="city" border-bottom='false' required='true'>
<!-- <view v-if="istest" class="sinput">
<u-input style="width:100%;" v-model="basicobj.city" placeholder='输入所在城市' />
</view>v-else -->
<view class="sinput">
<u-input style="width:100%;" v-model="basicobj.city" type="select" @click="cityshow = true" placeholder='输入所在城市' />
<u-select v-model="cityshow" :list="cityList" @confirm="citychange" mode="mutil-column-auto" ></u-select>
</view>
</u-form-item>
<u-form-item label="个人技能:" prop="testSkills" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" v-model="basicobj.testSkills" placeholder='输入个人技能'/>
</view>
</u-form-item>
<view class="sintitle" style="margin-top:15px;margin-left: -20px;">
<img src="/static/index/jnzs.png" alt="">
<p style="color:#fa3534;margin-right:3px">* </p>
<p>资格证书</p>
</view>
<u-form-item prop="certificateUrl" border-bottom='false' >
<u-upload width='100px' height='100px'
:action="action"
:header="headers"
:auto-upload="true"
:show-progress="false"
max-count="1"
:deletable="true"
:file-list="basicobj.certificateUrl"
@on-success="(data,index,lists) => {fielUploadSuc(data,index,lists) }"
@on-remove="(index, lists, name)=>{deleteUpfile(index)}"
@on-error="(data,index, lists)=>{errorUpfile(data,index, lists)}"
>
<view slot="addBtn" class="slot-btn" >
<img v-if="basicobj.certificateUrl" :src="basicobj.certificateUrl" mode="aspectFill" style="width: 100px;height: 100px;">
<div v-else class="upliacla">
<p style="font-size: 18px;">+</p>
<p>选择图片</p>
<!-- <u-icon name="arrow-upward" color="#606266" size="38"></u-icon> -->
</div>
</view>
</u-upload>
<!-- <div v-if="basicobj.certificateUrl">
<img v-if="basicobj.certificateUrl.length>35" :src="basicobj.certificateUrl" style="width: 100px;height: 100px;">
<p class="wuploa" v-else>未上传证书</p>
</div> -->
</u-form-item>
</u-form>
</view>
<view class="bottbtn" @click="resource">保存</view>
<view style="height:10px"></view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
cityshow:false,
basicobj:{name:'',city:'',testSkills:'',certificateUrl:''},
wxUserInfo:null,
testerdata:null,
cityList:[],
action: this.http.baseUrl +'/upload',
headers:{Authorization:'Bearer '+uni.getStorageSync('accessToken')},
certRules: {
name: [{required: true, message: '请输入姓名', trigger: 'change',},
{max: 4, message: '最多输入4个中文', trigger: 'change' },
{
pattern:
/^(?:[\u4e00-\u9fa5·]{2,16})$/,
message: "请输入中文",
trigger: "blur",
},],
city:[{required: true, message: '请选择城市', trigger: 'change'}],
},
}
},
onShow() {
this.http.quickGet(`/common/city`,).then(res=>{
// console.log('---',res)
this.cityList=res.data
})
},
onReady(){
this.$refs.basicobj.setRules(this.certRules);
},
onLoad() {
// /tester/cert/apply/{userId}
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
let userId=this.wxUserInfo.userId
this.http.quickGet(`/tester/TesterInfo/resume/${this.wxUserInfo.userId}`,true).then(res=>{
let resumedata=res.data;
let {name,city,testSkills,certificateUrl}=resumedata;
this.basicobj={name,city,testSkills,certificateUrl}
console.log('简历信息---',res)
})
},
computed: {
},
methods: {
citychange(e){
console.log('城市回显',e,this.cityshow)
this.basicobj.city=e[0].label+'-'+e[1].label
},
//
fielUploadSuc(data,index) {
console.log('-',data,'*',index)
if (data.code === 200) {
this.basicobj.certificateUrl=data.filePath
console.log('技能认证',this.basicobj.certificateUrl)
}
},
//
deleteUpfile(index,lists){
console.log('del技能认证',this.basicobj.certificateUrl)
this.basicobj.certificateUrl=''
// if(this.credentialImgList.length>0){
// let id=this.credentialImgList[0].id;
// this.http.quickDelete(`/equestrianinfo/file/${id}`).then(()=>{})
// }
},
errorUpfile(data,index){
// console.log('-',data,'*',index)
// this.$refs.uToast.show({
// title: '',
// type: 'error',
// })
},
resource(){
console.log('basicobj',this.basicobj)
this.$refs.basicobj.validate(valid => {
if (valid) {
let certificateUrl = this.http.baseUrl + this.basicobj.certificateUrl;
// console.log('',this.basicobj.certificateUrl)
// if(this.basicobj.certificateUrl.indexOf('https')==0){
// certificateUrl=this.basicobj.certificateUrl
// }else{
// if(this.basicobj.certificateUrl==''){
// certificateUrl=''
// }else{
// certificateUrl='https://www.keyitest.cn/prod-api'+this.basicobj.certificateUrl
// }
// }
let data={
userId:this.wxUserInfo.userId,
name:this.basicobj.name,
city:this.basicobj.city,
testSkills:this.basicobj.testSkills,
certificateUrl,
}
console.log('基本信息',data)
// return;
this.http.quickPut(`/tester/TesterInfo`,data,true).then(res=>{
console.log('更新基本信息',res)
if(res.data.code==200){
this.$refs.uToast.show({
title: '保存成功',
type: 'success',
url:'pages/personal/personalresume/personalresume'
})
}else{
}
})
}else{
console.log('验证失败',this.basicobj)
}
})
}
}
}
</script>
<style>
page{
background: #FFFFFF!important;
}
.navTab{
padding:13px 20px 13px 20px;
}
.sinput{
display: flex;
align-items: center;
/* height: 50px; */
}
.u-form-left__content__label{
color:#808080!important;
}
.sintitle{
display: flex;
align-items: center;
/* height: 50px; */
background: #F2F4F7;
/* background:#20529c; */
border-radius: 4rpx;
padding:7px 15px;
}
.sintitle img{
width:20px;
height:18px;
margin-right:5px;
}
.sintitle p{
font-size: 15px;
color:#000000;
font-weight: bold;
}
.sinput .u-input{
height:35px;
border-bottom: 1px solid #EBEBEB!important;
}
.sinput p{
color: #808080;
}
.bottbtn{
width:94vw;
margin:30px 3vw 15px 3vw;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:43rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
/* margin-left:13px; */
}
.sinputrt{
display: flex;
/* align-items: center; */
/* height: 50px; */
padding: 10px 0px;
}
.sinputrt .u-input{
/* width:75vw; */
height:100px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px!important;
}
.u-list-item{
margin:0!important;
zIndex:0!important;
}
.slot-btn {
width:200rpx;
height:0rpx;
zIndex:99;
/* display: flex;
justify-content: center;
align-items: center;
background: rgb(244, 245, 246);
border-radius: 10rpx; */
}
.slot-btn__hover {
background-color: rgb(235, 236, 238);
}
.u-form-item{
margin-bottom:-5px;
color: #808080!important;
}
.u-form{
margin-left: 20px;
}
.u-list-item{
margin: 0 !important;
background: transparent!important;
color:transparent!important;
}
.upliacla{
width: 100px;
height: 100px;
/* line-height:100px; */
border-radius: 4px;
background: #f4f5f6;
color:#606266;
display:flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.wuploa{
/* width: 100px;
height: 100px;
line-height: 100px;
font-size: 12px;
border: 1px solid #E6E6E6;
text-align: center;
border-radius: 4px; */
}
</style>

@ -0,0 +1,245 @@
<template>
<view class="accounmt">
<view class="beizhu">
友情提示完善简历有助于您在竞标时提高竞争力哦
</view>
<view style="display: flex;justify-content: space-between;">
<view >
<view style="display: flex;">
<p style="font-weight: bold;font-size: 36rpx;">{{resumedata.name?resumedata.name:resumedata.userName}}</p>
<img @click="nextpro('basic')" style="width: 14px;height: 14px;margin:8px 5px 0 5px" src="http://image.keyitest.cn/static/resume/edit.png" alt="" />
<!-- <u-tag text="预览" plan type="info" shape='circle' color='#2168F8' bg-color='#F5F7FA' border-color='transparent'/> -->
</view>
<view style="color:#4D4D4D;margin:15px 0;display: flex;align-items: center;">
<p>{{resumedata.sex}}</p>
<p style="margin: 0 5px;"> . </p>
<p>{{resumedata.city}}</p>
</view>
<view style="margin-bottom: 15px;">
<p>{{resumedata.testSkills}}</p>
</view>
</view>
<img v-if="resumedata.avatar" :src='resumedata.avatar' style='width:55px;height:55px;border-radius: 50%' alt="" />
<img v-else style='width:55px;height:55px;border-radius: 50%' src="http://image.keyitest.cn/static/my/mphoto.png" alt="" />
</view>
<view style="display: flex;">
<view style="display: flex;align-items: center;margin-right: 20px;">
<img style="width: 14px;height: 14px;margin-right: 5px;" src="http://image.keyitest.cn/static/resume/phone.png" alt="" />
<p >{{resumedata.phonenumber?resumedata.phonenumber.slice(0,3)+'****'+resumedata.phonenumber.slice(7,11):'无'}}</p>
</view>
<view style="display: flex;align-items: center;">
<img style="width: 14px;height: 14px;margin-right: 5px;" src="/static/crowd/reeamil.png" alt="" />
<p >{{resumedata.email?resumedata.email:'无'}}</p>
</view>
</view>
<view class="linx"></view>
<view style="display: flex;justify-content: space-between;">
<p style="font-weight: bold;font-size: 36rpx;">个人优势</p>
<img @click="nextpro('advantage')" style="width: 14px;height: 14px;margin:6px 5px 0 5px" src="http://image.keyitest.cn/static/resume/edit.png" alt="" />
</view>
<p v-if='resumedata.personalAdvantage' @click="nextpro('advantage')" style="color: #333333;margin-top:13px;line-height: 40rpx;">{{resumedata.personalAdvantage}}</p>
<p v-else style="color: #333333;margin-top:13px;"></p>
<view class="linx"></view>
<view style="display: flex;justify-content: space-between;">
<p style="font-weight: bold;font-size: 36rpx;">工作经历</p>
<img @click="nextpro('work')" style="width: 14px;height: 14px;margin:6px 5px 0 5px" src="http://image.keyitest.cn/static/resume/edit.png" alt="" />
</view>
<view @click="nextpro('work')" v-if='resumedata.workExperience'
v-html="resumedata.workExperience.replace(/(\r\n|\n|\r)/gm, '<br />')"
style="color: #333333;margin-top:13px;white-space: nowrap"> </view>
<p v-else style="color: #333333;margin-top:13px;"></p>
<!-- <view style="display: flex;justify-content: space-between;margin: 45rpx 0 25rpx 0;">
<p style="font-weight: bold;font-size:14px;">北京关键科技科技有限公司</p>
<view style="display: flex;">
<p style="margin-right:6px;color: #4D4D4D;">2021.08-2024.02</p>
<u-icon name="arrow-right" color="#808080" size="26"></u-icon>
</view>
</view>
<p style="color:#000000">UI设计师 高级 研发部</p>
<p style="color: #595959;margin-top:25rpx;line-height: 20px;">内容1.负责公司核项的UX/UI和品牌设计包括APPCARVODB端后台及新媒体业务
2.制定并编写设计准则和品牌规范通过组件化封装提产品品质和设计效率并在团队中进宣讲...
</p>
<p style="color: #595959;line-height: 20px;">
业绩1.制定并输出设计原则样式指南设计规范等档确保设计致性和可复性
2.成功解决公司粉丝业务需求通过程序点歌为公众号吸引粉丝并保持稳定的新增粉丝数...
</p> -->
<view class="linx"></view>
<view style="display: flex;justify-content: space-between;">
<p style="font-weight: bold;font-size: 36rpx;">项目经历</p>
<img @click="nextpro('pro')" style="width: 14px;height: 14px;margin:6px 5px 0 5px" src="http://image.keyitest.cn/static/resume/add.png" alt="" />
</view>
<view v-if="projectlist.length>0">
<view v-for="(item,key) of projectlist" @click="prodetaols(item)">
<view style="display: flex;justify-content: space-between;margin: 45rpx 0 25rpx 0;">
<p style="font-weight: bold;font-size:14px;">{{item.projectName}}</p>
<view style="display: flex;">
<p style="margin-right:6px;color: #4D4D4D;">{{item.projectPeriod}}
<!-- <span v-if="item.projectPeriod==1">3-10天</span>
<span v-if="item.projectPeriod==2">10-15天</span>
<span v-if="item.projectPeriod==3">15-30天</span>
<span v-if="item.projectPeriod==4">1-2个月</span>
<span v-if="item.projectPeriod==5">3-6个月</span>
<span v-if="item.projectPeriod==6">6-12个月</span>
<span v-if="item.projectPeriod==7">1-2年</span>
<span v-if="item.projectPeriod==8">2年以上</span> -->
</p>
<u-icon name="arrow-right" color="#808080" size="26"></u-icon>
</view>
</view>
<p style="color:#000000">{{item.role}}</p>
<p style="color: #595959;margin-top:25rpx;line-height: 20px;">
{{item.projectIntro}}
</p>
</view>
</view>
<p v-else style="color: #333333;margin-top:13px;"></p>
<view class="linx"></view>
<!-- <view style="display: flex;justify-content: space-between;">
<p style="font-weight: bold;font-size: 36rpx;">教育经历</p>
<img style="width: 14px;height: 14px;margin:6px 5px 0 5px" src="http://image.keyitest.cn/static/resume/add.png" alt="" />
</view>
<view style="display: flex;align-items: center;margin-top: 15px;">
<img style="width:50px;height: 50px;margin-right: 10px;" src="http://image.keyitest.cn/static/resume/school.png" alt="">
<view>
<view style="display: flex;justify-content: space-between;width:70vw;">
<p style="font-weight: bold;font-size:14px;">西安科技大学</p>
<view style="display: flex;">
<p style="margin-right:6px;color: #4D4D4D;">2021.08-2024.02</p>
<u-icon name="arrow-right" color="#808080" size="26"></u-icon>
</view>
</view>
<p style="margin-right:6px;color: #4D4D4D;margin-top: 10px;">本科 计算机专业</p>
</view>
</view>
<view class="linx"></view>-->
<view style="display: flex;justify-content: space-between;">
<p style="font-weight: bold;font-size: 36rpx;">资格证书</p>
<img @click="nextpro('basic')" style="width: 14px;height: 14px;margin:6px 5px 0 5px" src="http://image.keyitest.cn/static/resume/add.png" alt="" />
</view>
<view style="text-align:center;margin: 15px 0;width:200rpx;">
<img @click="priveimg(resumedata.certificateUrl)" v-if="resumedata.certificateUrl" style="width: 196rpx;height: 139rpx;" :src="resumedata.certificateUrl" alt="">
<p v-else style="text-align: left;"></p>
</view>
<view class="linx"></view>
</view>
</template>
<script>
export default {
data() {
return {
userinfo:{},
projectlist:[],//
resumedata:{},
action: 'https://www.keyitest.cn/prod-api/upload',
headers:{Authorization:'Bearer '+uni.getStorageSync('accessToken')},
}
},
onShow() {
this.userinfo=uni.getStorageSync('wxUserInfo');
console.log('个人信息',this.userinfo)
//
this.http.quickGet(`/personal/case/list/${this.userinfo.userId}`,true).then(res=>{
this.projectlist=res.data
console.log('res---',res)
})
this.http.quickGet(`/tester/TesterInfo/resume/${this.userinfo.userId}`,true).then(res=>{
this.resumedata=res.data
console.log('简历信息---',res)
})
},
onLoad() {
},
methods: {
//
fielUploadSuc(data,index) {
console.log('-',data,'*',index)
if (data.code === 200) {
this.resumedata.certificateUrl=data.filePath
console.log('技能认证',this.resumedata.certificateUrl)
}
},
//
deleteUpfile(index,lists){
console.log('del技能认证',this.resumedata.certificateUrl)
this.resumedata.certificateUrl=''
// if(this.credentialImgList.length>0){
// let id=this.credentialImgList[0].id;
// this.http.quickDelete(`/equestrianinfo/file/${id}`).then(()=>{})
// }
},
errorUpfile(data,index){
// console.log('-',data,'*',index)
// this.$refs.uToast.show({
// title: '',
// type: 'error',
// })
},
//
nextpro(type){
if(type=='basic'){
uni.navigateTo({
url:'/pages/personal/personalresume/basicinform'
})
}else if(type=='advantage'){
uni.navigateTo({
url:'/pages/personal/personalresume/advantage'
})
}else if(type=='work'){
uni.navigateTo({
url:'/pages/personal/personalresume/workexperience'
})
}else if(type=='pro'){
uni.navigateTo({
url:'/pages/personal/personalresume/projectexperience?type=1'
})
}
},
//
prodetaols(item){
uni.navigateTo({
url:`/pages/personal/personalresume/projectexperience?type=2&caseId=${item.caseId}`
})
},
//
priveimg(logourl){
// console.log('')
let imgsArray = [];
imgsArray[0] = logourl
uni.previewImage({
current: 0,
urls: imgsArray
});
},
}
}
</script>
<style>
.accounmt{
background-color: #ffffff;
/* height: 96vh; */
width: 96vw;
margin: 2vh auto;
padding: 10px 15px 30px 15px;
border-radius: 5px;
font-size: 13px;
}
.linx{
width: 100%;
height: 1rpx;
opacity: 0.15;
background: #999999;
margin: 15px 0;
}
.beizhu {
font-size: 25rpx;
color: #808080;
margin-bottom: 20rpx;
font-weight: 500;
}
</style>

@ -0,0 +1,179 @@
<template>
<view class="navTab">
<u-form :model="projectobj" ref="projectobj" label-position='left' label-width='150' >
<u-form-item label="项目名称:" prop="projectName" required='true'>
<u-input style="width:100%;" v-model="projectobj.projectName" placeholder='请输入项目名称'/>
</u-form-item>
<u-form-item label="项目周期:" prop="projectPeriod" required='true' >
<!-- <u-input style="width:100%;" @click="show=true" v-model="projectobj.projectPeriod" placeholder='请选择项目周期'/> -->
<u-input class="seleclas" v-model="projectobj.projectPeriod" type="select" @click="Periodshow = true" placeholder='请选择' />
<u-select v-model="Periodshow" :list="PeriodList" @confirm="Periodchange"></u-select>
<!-- <u-calendar v-model="show" :mode="mode"
max-date='2050-01-01'
@change="Periodchange">
<view slot="tooltip"> <view class="title"> </view> </view>
</u-calendar> -->
<!-- <view class="button" @click="show=true">请选择项目周期项目周期</view> -->
</u-form-item>
<u-form-item label="担任角色:" prop="role" required='true'>
<u-input style="width:100%;" v-model="projectobj.role" placeholder='请输入担任角色'/>
</u-form-item>
<u-form-item label="应用技术:" prop="applyTech" >
<u-input style="width:100%;" v-model="projectobj.applyTech" placeholder='请输入应用技术'/>
</u-form-item>
<u-form-item label="项目简介:" prop="projectIntro" required='true' class="textare">
<u-input style="width:100%;height: 100px;" border='true' type='textarea' v-model="projectobj.projectIntro" placeholder='请输入项目简介'/>
</u-form-item>
</u-form>
<view class="bottbtn" @click="resource">保存</view>
<!-- <view class="bottbtn" @click="delpro">删除</view> -->
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
projectobj:{userId:'',caseId:'',projectName:'',projectPeriod:'',role:'',applyTech:'',projectIntro:''},
projectRules: {
projectName: [{ required: true, message: '请输入项目名称', trigger: 'change',}],
projectPeriod: [{ required: true, message: '请选择项目周期', trigger: 'change',}],
role: [{ required: true, message: '请输入担任角色', trigger: 'change',}],
projectIntro: [{ required: true, message: '请输入项目简介', trigger: 'change',}],
},
Periodshow: false,
PeriodList:[{value:'1',label:'3-10天'},{value:'2',label:'10-15天'},{value:'3',label:'15-30天'},{value:'4',label:'1-2个月'},
{value:'5',label:'3-6个月'},{value:'6',label:'6-12个月'},{value:'7',label:'1-2年'},{value:'8',label:'2年以上'}],
mode: 'range'
}
},
onReady(){
this.$refs.projectobj.setRules(this.projectRules);
},
onLoad(option) {
console.log('option---',option)
let type=option.type;
if(type&&type==1){
uni.setNavigationBarTitle({
title: '添加项目经历'
});
}else{
uni.setNavigationBarTitle({
title: '编辑项目经历'
});
let caseId=option.caseId
if(caseId){
this.http.quickGet(`/personal/case/${caseId}`,true).then(res=>{
console.log('项目信息---',res)
let prodata=res.data;
if(prodata){
let {caseId,projectName,projectPeriod,role,applyTech,projectIntro}=prodata
this.projectobj={caseId,projectName,projectPeriod,role,applyTech,projectIntro}
}
})
}
}
},
methods: {
Periodchange(e){
this.projectobj.projectPeriod=e[0].label
},
resource(){
console.log('projectobj',this.projectobj)
this.$refs.projectobj.validate(valid => {
if (valid) {
let wxUserInfo = uni.getStorageSync('wxUserInfo');
let data={
userId:wxUserInfo.userId,
caseId:this.projectobj.caseId,
projectName:this.projectobj.projectName,
projectPeriod:this.projectobj.projectPeriod,
role:this.projectobj.role,
applyTech:this.projectobj.applyTech,
projectIntro:this.projectobj.projectIntro,
}
console.log('data',data)
if(this.projectobj.caseId){
//
// delete /personal/case/{caseId}
this.http.quickPost(`/personal/case/update`,data,true).then(res=>{
if(res.data.code==200){
this.$refs.uToast.show({
title: '编辑项目成功',
type: 'success',
url:'pages/personal/personalresume/personalresume'
})
}
})
}else{
this.http.quickPost(`/personal/case/add`,data,true).then(res=>{
if(res.data.code==200){
this.$refs.uToast.show({
title: '添加项目成功',
type: 'success',
url:'pages/personal/personalresume/personalresume'
})
}
})
}
}
})
},
//
delpro(){
this.http.quickDelete(`/personal/case/${this.projectobj.caseId}`,true).then(res=>{
console.log('res---',res)
this.$refs.uToast.show({
title: '删除项目成功',
type: 'info',
url:'pages/personal/personalresume/personalresume'
})
})
}
}
}
</script>
<style>
.navTab{
background-color: #ffffff;
width: 96vw;
margin: 2vh auto;
padding: 10px 15px 30px 25px;
border-radius: 5px;
}
.u-form-left__content__label{
color:#808080!important;
}
.navTab .u-input{
/* height:35px; */
border-bottom: 1px solid #EBEBEB!important;
}
.textare .u-input{
min-height:100px;
}
.bottbtn{
/* width:94vw; */
margin:30px 3vw 15px 3vw;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:15rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
}
.title{
color: #1A81F9;
text-align: center;
padding: 20rpx 0 0 0;
}
</style>

@ -0,0 +1,90 @@
<template>
<view class='navTab'>
<p style='font-size: 18px;font-weight: bold;margin: 10px 0 20px 0;'>工作经历</p>
<u-input style="width:100%;" border='true' type='textarea' height='300' maxlength='3000' v-model="workexe" placeholder='请输入工作经历'/>
<p style="margin: 10px 0;">工作经历填写示例</p>
<p style='font-size:12px;color:#595959 ;'>2017.5-2021.7 西安未央软件有限公司 软件测试工程师</p>
<p style='font-size:12px;color:#595959 ;margin:5px 0;'>2013.9-2017.4. 西安大唐软件有限公司 软件测试工程师</p>
<p style='font-size:12px;color:#595959 ;'>2009.9-2013.7 西安科技大学 软件工程专业 本科</p>
<view class="bottbtn" @click="resource">保存</view>
</view>
</template>
<script>
export default {
data() {
return {
workexe:''
}
},
onLoad() {
let wxUserInfo = uni.getStorageSync('wxUserInfo');
this.http.quickGet(`/tester/TesterInfo/resume/${wxUserInfo.userId}`,true).then(res=>{
this.workexe=res.data.workExperience
if(!this.workexe){
uni.setNavigationBarTitle({
title: '添加工作经历'
});
}else{
uni.setNavigationBarTitle({
title: '编辑工作经历'
});
}
console.log('简历信息---',res)
})
},
methods: {
resource(){
let wxUserInfo = uni.getStorageSync('wxUserInfo');
if(!this.workexe){
uni.showToast({ title: '请输入工作经历', icon: 'none', duration: 1000 });
return;
}
if(this.workexe.length>3000){
uni.showToast({ title: '最多可输入3000字', icon: 'none', duration: 1000 });
return;
}
let data={
userId:wxUserInfo.userId,
workExperience:this.workexe,
}
this.http.quickPost(`/tester/TesterInfo/experience`,data,true).then(res=>{
if(res.data.code==200){
uni.showToast({ title: '工作经历编辑成功', icon: 'success', duration: 2000 });
setTimeout(()=>{
uni.navigateBack({
delta:1
})
},1000)
}
})
}
}
}
</script>
<style>
.navTab{
background-color: #ffffff;
width: 96vw;
margin: 2vh auto;
padding: 10px 15px 30px 25px;
border-radius: 5px;
}
/* .navTab .u-input{
min-height:200px;
} */
.bottbtn{
margin:30px 3vw 15px 3vw;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:15rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
}
</style>

@ -0,0 +1,180 @@
<template>
<view>
<view class="bureau">
<view style="margin-bottom: 43px;">
<img src="/static/index/logo.png" alt="">
<p style="margin: 10px 0;">关键测试宝</p>
<p style="font-size:.8rem;font-weight: 400;letter-spacing: 0.7rem;">专业软件测试云平台</p>
</view>
<view class="inlog">
<u-field v-model="loginobj.phone" label-width='0' placeholder-style="font-size:15px" :clearable='isclear' placeholder='请输入手机号'>
<p slot="right" style="font-size:15px;color:#000000" @click="getCode">+86</p>
</u-field>
<u-field v-model="loginobj.code" :clearable='isclear' label-width='0' placeholder-style="font-size:15px" placeholder='请输入验证码'>
<!-- <u-button size="mini" plain slot="right" type="primary" @click="getCode">{{codeText}}</u-button> -->
<p slot="right" @click="getCode">{{codeText}}</p>
</u-field>
<u-verification-code ref="uCode" @change="codeChange"></u-verification-code>
</view>
<button v-if='loginobj.code.length==6' class="button-g" @click="login">登录</button>
<button v-else class="button-g" style="background-color:rgba(25, 123, 239, .5);" >登录</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
loginobj:{
phone:'',
code:'',
uuid:'',
},
cleart:false,
codeText: '获取验证码',
uproute:''
}
},
onLoad() {
let pages = getCurrentPages()
let prevPage = pages[pages.length - 2];
if(prevPage){
this.uproute=prevPage.route
}
},
methods: {
isMobile(s) {
return /^1[0-9]{10}$/.test(s)
},
codeChange(text) {
this.codeText = text;
},
//
getCode() {
if(this.$refs.uCode.canGetCode) {
let phone = this.loginobj.phone;
if (!phone || !this.isMobile(phone)) {
uni.showToast({ title: '手机格式不对', icon: 'none', duration: 1000 });
return;
}
//
this.http.quickGet('/captchaUserLogin?phoneNumber=' + phone).then((res)=> {
console.log('获取登录验证码',res);
if(res.data.code==200){
this.loginobj.uuid=res.data.uuid;
uni.showToast({title: '发送成功', icon: 'none', duration:1000 });
setTimeout(() => {
uni.hideLoading();
//
this.$refs.uCode.start();
}, 1000);
}else{
uni.showToast({title:res.data.msg, icon: 'none', duration:1000 });
}
}).catch((err) => {
console.log('err',err);
});
}else {
this.$u.toast('倒计时结束后再发送');
}
},
login(){
console.log('123123');
const _this = this
uni.login({
success(logininfo) {
console.log(logininfo);
let data={
mobile:_this.loginobj.phone,
code:_this.loginobj.code,
uuid:_this.loginobj.uuid,
openidCode: logininfo.code
}
_this.http.quickPost('/phoneLogin',data).then(res=>{
if(res.data.code==200){
uni.setStorageSync('accessToken', res.data.token)
_this.http.quickGet('/getInfo',true).then(res=>{
if(res.data.code==200){
console.log('手机验证登录成功',res.data)
uni.setStorageSync('register', res.data.isRegister)
uni.setStorageSync('testerStatus', res.data.user.testerStatus)
uni.setStorageSync('wxUserInfo', res.data.user)
uni.setStorageSync('email', res.data.user.email)
uni.setStorageSync('avatar', res.data.user.avatar)
uni.setStorageSync('nickName', res.data.user.nickName)
uni.setStorageSync('sex', res.data.user.sex)
uni.showToast({ title: '登录成功', icon: 'success', duration: 1000 });
if(_this.uproute=='pages/personal/personal' || _this.uproute=='pages/personal/login'){
uni.switchTab({
url:'/pages/personal/personal'
})
}else{
setTimeout(()=>{
uni.navigateBack({
delta:2
})
},1000)
}
}
})
}
})
},
fail(error) {
console.log('失败了', error);
}
})
},
}
}
</script>
<style>
.bureau{
text-align: center;
margin: 13vh auto;
}
.bureau img{
width:70px;
height:58px;
margin-right: 5px;
}
.bureau p{
font-size:1.3rem;
font-weight: bold;
color:#0A8AD3;
}
.inlog{
width:90vw;
margin: 0 auto;
}
.inlog .u-field{
height:45px;
border-bottom: 1px solid rgb(187 187 187 / 0.5);
margin-bottom:10px;
}
.inlog p{
color:#2979ff;
font-size: 15px;
font-weight:normal
}
.button-g{
width:90vw;
height:80rpx;
background-color:#197BEF;
border-radius:25px;
text-align: center;
line-height:80rpx;
color: #FFFFFF;
font-size:36rpx;
margin-top:15px;
}
</style>

@ -0,0 +1,266 @@
<template>
<view class="navTab">
<p style="font-size: 18px;text-align: center;font-weight: bold;margin-bottom:15px;">关键测试宝用户隐私政策</p>
<p>更新日期2024年3月05日</p>
<p style="margin: 10px 0;">生效日期2024年3月05日</p>
<p style='text-indent:30px;'>北京京关键科技股份有限公司运营的关键测试宝在线服务平台小程序软件以下简称关键测试宝或我们尊重并保护所有关键测试宝用户
以下也称的个人信息及隐私安全我们依据中华人民共和国网络安全法中华人民共和国个人信息保护法中华人民共和国民法典
信息安全技术个人信息安全规范以及其他相关法律法规和技术规范明确了我们收集/使用/对外提供个人信息的原则进一步阐述了关于您个人信息的相关权利</p>
<p style='text-indent:30px;'>
本政策与您所使用的我们的产品与/或服务息息相关您在浏览注册登录使用我们的产品与/或服务
以下统称使用我们的产品与/或服务我们将按照本政策的约定处理和保护您的个人信息我们尽量以简明扼要
的表述向您解释本政策所涉及的技术词汇以便于您理解
<span style="font-weight: bold;">
本政策中与您权益可能存在重大关系的条款我们已使用加粗字
体予以区别请您重点查阅
</span>
</p>
<p style='text-indent:30px;font-weight: bold;margin: 10px 0;'>关键测试宝特别提请未满18周岁的未成年特别是未满十四周岁的儿童及其监护人的注意
我们已明确未成年保护专门章节以粗体提示请您仔细阅读</p>
<p style='text-indent:30px;'>
请在使用/继续使用我们的各项产品与服务前仔细阅读并充分理解本政策并在需要时按照本政策的指引
做出适当的选择如果您不同意本政策的内容将可能导致我们的产品与/或服务无法正常运行
或者无法达到我们拟达到的服务效果您应立即停止访问/使用我们的产品与/或服务您使用或继续使用我们
提供的产品与/或服务的行为都表示您充分理解和同意本关键测试宝用户隐私政策包括更新版本的全部内容
</p>
<p style="font-weight: bold; margin:5px 0;">我们如何收集和使用您的个人信息</p>
<p style='text-indent:30px;'>关键测试宝是在线服务平台为用户提供包括培训服务众包服务工具服务人才服务搜索查看等功能/及服务我们将在本政策中依次向您说明每项功能可能收集的个人信息范围收集目的收集方式
以及拒绝提供个人信息可能导致的结果请您知悉您拒绝提供各项功能实现所必要的对应信息时
仍然可以使用关键测试宝平台的其他功能</p>
<p style='text-indent:30px;'>
我们会遵循正当合法必要的原则出于本政策所述的以下目的收集和使用您在使用我们服务过程中主动提供或因使用我们
产品和/或服务而产生的个人信息如果我们要将您的个人信息用于本政策未载明的其它用途
或基于特定目的将已经收集的信息用于其他目的我们将以合理的方式向您告知并在使用前再次征得您的同意
</p>
<p style="font-weight: bold;margin: 5px 0;">账号注册及登录</p>
<p style='text-indent:30px;'>
1. 当您注册及登录时如您使用一键登录的功能基于我们与通信运营商的合作
我们会收集您的
<span style="font-weight: bold;">手机号码用户自行填写的姓名或昵称</span>
以便为您提供快捷的登录服务
</p>
<p style='text-indent:30px;'>
2. 您还可以根据自身需求选择填写或更改
<span style="font-weight: bold;">头像名字昵称性别简介信息来完善您的信息</span>
但如您不提供此类信息不会影响您使用本产品和相关服务
</p>
<p style='text-indent:30px;'>
3. 在使用关键测试宝网站为您提供的服务时您在关键测试宝网站注册的账号可同时登录关键测试宝微信小程序并获得相关服务使用相关功能您使用该账号登录
使用关键测试宝小程序应同时受关键测试宝用户服务协议关键测试宝用户隐私政策及相关协议条款的约束
</p>
<p style="font-weight: bold; margin: 5px 0;">向您提供产品和/或服务</p>
<p style="font-weight: bold;">1. 用户体验改进计划</p>
<p style='text-indent:30px;'>关键测试宝将基于您对关键测试宝平台的使用数据结合您个人常用设备信息统计诊断系统问题优化产品体验我们会使用工具
含第三方工具统计您在使用关键测试宝平台过程中产生的数据信息其中包含
<span style="font-weight: bold;">应用启动数页面访问数重点按钮点击数设置项的配置属性</span>
随着关键测试宝平台的升级迭代我们统计的范围会有所改变您使用关键测试宝平台新版本的行为将被视为您对届时相关改变的同意</p>
<p style="font-weight: bold;">2. 开展营销活动</p>
<p style='text-indent:30px;'>当您选择参加我们举办的有关营销活动时根据活动需要可能需要收集您提供的个人信息与第三方支付服务帐号这些信息包括
<span style="font-weight: bold;">个人电话号码支付宝账号微信帐号</span>
我们承诺将仅在相关活动范围内使用上述信息若您拒绝提供相关信息我们可能无法完成向您转账</p>
<p style="font-weight: bold;">3. 客服与售后</p>
<p style='text-indent:30px;'>当您联系我们的客服或提出我们的产品与/或服务的售后申请时我们可能
<span style="font-weight: bold;">会记录您与客服之间的通信/通话记录或内容</span>
为了您的账号与系统安全我们可能需要您提供相关个人信息与您之前提供的个人信息相匹配以验证您的用户身份
验证成功后我们可能会收集您与我们的沟通信息账号信息订单信息您为了证明相关事实而提供的图片/视频/文字信息及有关信息
您的联系方式以及您与我们的沟通记录包括线上沟通记录电话录音以便尽快为您解决问题和改进我们的产品与/或服务同时
我们可能会以电话短信站内信及相关方式主动联系您沟通您在使用我们产品及服务过程中产生的问题</p>
<p style='text-indent:30px;'>为了保证服务的体验处理服务纠纷您与客服间的通话信息可能会被录音有关上述信息的收集和使用规则如下</p>
<p style='text-indent:30px;'> A. 当您使用关键测试宝服务与平台或者其他用户发生纠纷时
我们可调取并使用录音信息作为解决纠纷的参考依据</p>
<p style='text-indent:30px;'>B. 为了向您提供客服和售后服务我们可能将您的通话录音存储在第三方客服系统中我们会通过协议约束等方式
确保第三方无法访问您的通话录音除以下情形外平台不会将录音提供给任何人包括通话主被叫方
a.有权机关依法定程序调取b.被录音的一方持司法机关出具的法律文件依法调取</p>
<p style="font-weight: bold; margin: 5px 0;">征得授权同意的例外</p>
<p style='text-indent:30px;'>根据相关法律法规规定及国家标准以下情形中我们可能会依法收集并使用您的个人信息无需征得您的同意</p>
<p>1与国家安全国防安全直接相关的</p>
<p>2与公共安全公共卫生重大公共利益直接相关的</p>
<p>3与犯罪侦查起诉审判和判决执行等直接相关的</p>
<p>4出于维护您或其他个人的生命财产等重大合法权益但又很难得到您本人同意的</p>
<p>5所收集的个人信息是您自行向社会公众公开的</p>
<p>6从合法公开披露的信息中收集个人信息的合法的新闻报道政府信息公开等渠道</p>
<p>7根据您的要求签订和履行合同所必须的</p>
<p>8用于维护所提供的产品或服务的安全稳定运行所必需的例如发现或处置产品或服务的故障</p>
<p>9法律法规规定的其他情形</p>
<p style="font-weight: bold; margin: 5px 0;">我们如何共享转让公开披露您的个人信息</p>
<p>共享</p>
<p style='text-indent:30px;'>对于您的个人信息我们不会与任何公司组织和个人进行共享除非存在以下一种或多种情形</p>
<p style="font-weight: bold; ">1事先已得到您的授权</p>
<p style="font-weight: bold; ">2您自行提出的</p>
<p style="font-weight: bold; ">3与商业合作伙伴的必要共享</p>
<p style="font-weight: bold; text-indent:30px;">您理解并知悉为了向您提供更完善优质的产品和服务我们将授权商业合作伙伴为您提供部分服务此种情形下我们可能会与合作伙伴共享您的某些个人信息以提供更好的客户服务和用户体验请您注意我们仅会出于合法正当必要特定明确的目的共享您的个人信息并且只会共享提供服务所必要的个人信息我们将对信息数据的输出形式流转使用进行安全评估与处理以保护数据安全
同时我们会对合作伙伴进行严格的监督与管理一旦发现其存在违规处理个人信息的行为将立即停止合作并追究其法律责任</p>
<p>目前我们的合作伙伴包括以下类型</p>
<p style="font-weight: bold; ">1. 商品或技术服务的供应商</p>
<p style='text-indent:30px;'>我们可能会将您的个人信息共享给支持我们功能的第三方这些支持包括为我们提供支付服务
数据处理等我们共享这些信息的目的是可以实现我们产品与/或服务的核心功能</p>
<p style="font-weight: bold; ">2. 第三方商家</p>
<p style='text-indent:30px;'>我们必须将您为实现操作目的之必要信息与第三方商家共享并促使其可以完成后续服务</p>
<p>3. 当您选择参加我们及我们的关联方或平台上的第三方举办的营销活动时可能需要您提供姓名性别通信地址联系方式银行账号信息您若拒绝提供可能会影响您参加相关活动但不会影响其他功能只有经过您的同意我们才会将这些信息与关联方或第三方共享
以保障您在活动中获得体验一致的服务或委托第三方及时向您兑现奖励</p>
<p>4. 与我们的关联公司必要共享我们可能会与我们的关联公司共享您的个人信息我们只会共享必要的个人信息且这种共享受本政策所声明的目的的约束
关联公司如要改变个人信息的处理目的需要再次征得您的授权和同意</p>
<p style="font-weight: bold; ">转让</p>
<p style='text-indent:30px;'>转让是指将取得您个人信息的控制权转让给其他公司组织或个人
除非获取您的明确同意否则我们不会将您的个人信息转让给任何公司组织或个人但下述情形除外</p>
<p>1事先已征得您的同意</p>
<p>2您自行提出的</p>
<p>3如果公司发生合并分立解散被宣告破产将可能涉及到个人信息转让此种情况下我们会告知您接收方的名称或者姓名和联系方式
并要求新的持有您个人信息的公司组织继续受本政策的约束
若接收方变更个人信息处理目的处理方式的我们将要求其重新获取您的明示同意</p>
<p>4其他法律法规规定的情形</p>
<p style="font-weight: bold; ">公开披露</p>
<p style='text-indent:30px;'>公开披露是指向社会或不特定人群发布信息的行为原则上我们不会对您的个人信息进行公开披露但下述情况除外</p>
<p>1因公布处罚等相关事项时展示必要的相关脱敏信息</p>
<p>2取得您的明示同意后</p>
<p style="font-weight: bold; ">共享转让公开披露个人信息授权同意的例外情形</p>
<p style='text-indent:30px;'>根据相关法律法规的规定在以下情形中我们可能在未事先征得您授权同意的情况下共享转让公开披露您的个人信息</p>
<p>1为订立履行个人作为一方当事人的合同所必需</p>
<p>2为履行法定职责或者法定义务所必需</p>
<p>3为应对突发公共卫生事件或者紧急情况下为保护自然人的生命健康和财产安全所必需</p>
<p>4为公共利益实施新闻报道舆论监督等行为在合理的范围内处理个人信息</p>
<p>5依照个人信息保护法规定在合理的范围内处理个人自行公开或者其他已经合法公开的个人信息</p>
<p>6法律法规规定的其他情形</p>
<p style='text-indent:30px;'>请您了解根据现行法律规定及监管要求共享转让经匿名化处理的个人信息且确保数据接收方无法复原并重新识别个人信息主体的无需另行向您通知并征得您的同意</p>
<p style="font-weight: bold; margin:5px 0;">我们如何存储和保护您的个人信息</p>
<p style="font-weight: bold; ">存储</p>
<p style='text-indent:30px;'>存储地点我们将从中华人民共和国境内获得的个人信息存放于中华人民共和国境内
以下情形下我们会确保在履行了法律规定的义务后向境外实体提供您的个人信息</p>
<p>1适用的法律有明确规定;</p>
<p>2获得您的明确授权;</p>
<p>3您通过互联网进行跨境交易等个人主动行为</p>
<p style='text-indent:30px;'>针对以上情形我们会通过合同等形式确保以不低于本政策规定的程度保护您的个人信息</p>
<p style='text-indent:30px;' >存储时间我们承诺始终按照法律的规定在合理必要期限内在存储您个人信息超出上述期限后我们将删除您的个人信息或对您的个人信息进行匿名化处理
如我们停止运营我们将及时停止收集您个人信息的活动将停止运营的通知以逐一送达或公告的形式通知您并对所持有的您的个人信息进行删除或匿名化处理</p>
<p style="font-weight: bold; ">保护</p>
<p style='text-indent:30px;'>为了保护您的个人信息安全我们将努力采取各种符合行业标准的安全措施来保护您的个人信息以最大程度降低您的个人信息被毁损盗用泄露非授权访问使用披露和更改的风险我们将积极建立数据分类分级制度
数据安全管理规范数据安全开发规范来管理规范个人信息的存储和使用确保未收集与我们提供的服务无关的个人信息</p>
<p style='text-indent:30px;'>您的账户均有安全保护功能请妥善保管您的账户及密码信息关键测试宝将通过采取SSLSecure Socket Layer协议加密保护等相关安全措施确保您的信息不丢失不被滥用和变造尽管有前述安全措施但同时也请您注意在信息网络上不存在完善的安全措施为防止安全事故的发生我们已按照法律法规的规定制定了妥善的预警机制和应急预案如确发生安全事件我们将及时将相关情况选择以邮件信函电话推送通知及相关方式告知您难以逐一告知个人信息主体时我们会采取合理有效的方式发布公告
同时我们还将按照监管部门要求主动上报个人信息安全事件的处置情况紧密配合政府机关的工作</p>
<p style='text-indent:30px;'>当我们的产品或服务发生停止运营的情形时我们会及时停止继续收集个人信息的活动上述变更我们将以推送通知公告及相关形式通知你并在合理的期限内删除你的个人信息或进行匿名化处理所谓匿名化处理是指通过对个人信息的技术处理使得个人信息主体无法被识别
且处理后的信息不能被复原的过程个人信息经匿名化处理后所得的信息不属于个人信息</p>
<p style="font-weight: bold; margin:5px 0;">您如何管理您的个人信息</p>
<p style="font-weight: bold; text-indent:30px;">我们非常重视并尽全力保障您对自己个人信息的相关权利</p>
<p style="font-weight: bold; ">1. 自主决定收藏信息</p>
<p style='text-indent:30px;'>在收藏中会根据您主动收藏的信息进行展示您可以根据需要自主选择收藏或取消收藏</p>
<p style="font-weight: bold; ">2. 个人信息的编辑</p>
<p style='text-indent:30px;'>我们通过交互界面的设计为您提供了可自行访问获取更正和删除相关个人信息的渠道您可通过我的-编辑资料访问
获取更正自己的个人资料含头像昵称简介所在行业网站所属主体等信息</p>
<p style='text-indent:30px;'>除上述外有下列情形之一的我们将应当主动删除您的个人信息您也有权请求我们删除</p>
<p>1处理目的已实现无法实现或者为实现处理目的不再必要</p>
<p>2我们已停止提供产品或者服务或者保存期限已届满</p>
<p>3您已明确撤回同意</p>
<p>4如您有足够的理由认为我们违反法律行政法规或者违反约定处理您的个人信息</p>
<p>5法律行政法规规定的其他情形</p>
<p style="font-weight: bold; ">3. 个人信息的删除</p>
<p>在以下情形中您可以向我们提出删除个人信息的要求</p>
<p>(1) 如果我们处理个人信息的行为违反法律法规</p>
<p>(2) 如果我们收集使用您的个人信息却未征得您的同意</p>
<p>(3) 如果我们处理个人信息的行为违反了与您的约定</p>
<p>(4) 如果您不再使用我们的产品或服务或您注销了帐号</p>
<p>(5) 如果我们不再为您提供产品或服务</p>
<p style='text-indent:30px;'>当您被从我们的服务中删除信息后我们可能不会立即从备份系统中删除相应的信息但会在备份更新时删除这些信息</p>
<p style="font-weight: bold; ">4. 撤回授权同意</p>
<p style='text-indent:30px;'>您可以通过关键测试宝平台公布的联系方式或电话联系客服向我们提出撤回收集使用个人信息的同意授权撤回同意后我们后续不会再处理您的个人信息同时我们会保障您拒绝接收基于您个人信息推送的权利在我们对外共享转让
公开披露您的个人信息时我们会向您提供撤回同意的通知撤回同意不影响撤回前基于同意的您的个人信息处理</p>
<p style="font-weight: bold; ">5. 附条件的个人信息转移权</p>
<p style='text-indent:30px;'>
若您需要将您的个人信息转移至其他平台企业或组织您可以通过本隐私政策所披露的方式联系我们
我们将对您的请求进行审核在符合我国网信部门规定的条件下我们将为您提供转移相应个人信息的途径
</p>
<p style="font-weight: bold; ">6. 约束信息系统自动决策</p>
<p style='text-indent:30px;'>在一些业务功能中我们可能仅依据信息系统算法在内的非人工自动决策机制作出决定
如果这些决定显著影响您的合法权益您有权要求我们作出解释我们也将提供适当的救济方式</p>
<p>7. 在符合相关法律要求的情况下您的近亲属可以对您的相关个人信息行使上述查阅复制
更正删除等权利您另有安排的除外</p>
<p style="font-weight: bold; ">8. 联系我们进行管理</p>
<p style='text-indent:30px;'>出于安全性和身份识别的考虑您可能无法直接通过关键测试宝交互界面自行访问更正或删除某些信息实名认证后的信息您的部分使用记录及有关信息如您确有必要访问修改或依法要求删除该类信息请您按照本政策第十条中所提供的联系方式
对您的问题进行反馈我们将尽快审核所涉问题并在核验您的用户身份后及时予以回复</p>
<p style="font-weight: bold; margin:5px 0;">账号注销</p>
<p style='text-indent:30px;'>在您注销您的关键测试宝账号之前您已充分阅读理解并同意下列事项</p>
<p style='text-indent:30px;'>1您所申请注销的关键测试宝账号应当是您本人依照关键测试宝用户服务协议隐私政策约定注册的账号
该账号处于安全状态及正常使用中不存在违规被封被盗等情形</p>
<p style='text-indent:30px;'>2您应当依照本公司规定的程序或网站提示进行账号注销操作</p>
<p style='text-indent:30px;'>3注销账号是不可恢复的操作您将无法使用该账号或找回您添加或绑定在账号上的任何内容信息及用户积分等相关权益即使使用相同的手机号码个人信息再次注册并使用关键测试宝
您应自行备份该账号的相关信息和数据操作之前请确认与该账号相关的所有交易及服务均已妥善处理</p>
<p style='text-indent:30px;'>4关键测试宝账号注销将导致关键测试宝用户服务协议隐私政策及相关规则约定的权利义务终止依本协议其他条款另行约定不得终止的或依其性质不能终止的除外
同时还可能对于该账号产生如下结果且均由您自行承担</p>
<p style='text-indent:30px;'>A.该账号的全部个人资料和历史信息都将无法找回</p>
<p style='text-indent:30px;'>B.该账号的联系人都将无法通过该账号联系您</p>
<p style='text-indent:30px;'>C.该账号如有未使用完毕的用户权益都将同时作废相应费用将不予退回</p>
<p style='text-indent:30px;'>D.任何您之前累计的用户权益都将作废且无法恢复</p>
<p style='text-indent:30px;'>E.任何兑换代码如金币等都将作废</p>
<p style='text-indent:30px;'>F.任何绑定的银行卡或支付提现服务都将不能适用该账号内的支付或提现服务</p>
<p style='text-indent:30px;'>G.您通过关键测试宝账号使用授权登录或绑定该账号后使用的任何第三方其他服务您将无法通过该账号再登录
使用或继续使用前述第三方服务所有记录将无法找回</p>
<p style='text-indent:30px;'>5注销关键测试宝账号前您需妥善处理关键测试宝账号下所有资金和交易问题
您申请注销关键测试宝账号应当不存在任何由于该账号被注销而导致的未了结的合同关系与其他基于该账号的存在而产生或维持的权利义务
及本公司认为注销该账号会由此产生未了结的权利义务而产生纠纷的情况在关键测试宝账号注销期间如果您的关键测试宝账号被他人投诉
被国家机关调查或者正处于诉讼仲裁程序中我公司有权暂停关键测试宝账号注销</p>
<p style='text-indent:30px;'>6您同意如您申请注销关键测试宝账号时本公司尚在或需要对您有关交易或账号进行核查的
本公司有权继续冻结您的关键测试宝账号或账号内全部或部分资金以便继续核查
注销您的关键测试宝账号并不代表该账号注销前的账号行为和相关责任得到豁免或减轻</p>
<p style="font-weight: bold; margin:5px 0;">有关第三方提供产品和/或服务的特别说明</p>
<p style='text-indent:30px;'>关键测试宝中可能包括第三方产品和/或服务或链接至第三方提供的信息和/或服务
<span style="font-weight: bold; ">
该第三方产品和/或服务在使用前
您需要跳转到相应的小程序或第三方页面您使用该第三方服务包括您向该第三方提供的任何个人信息
须受该第三方的服务条款及隐私政策而非本政策约束您需要仔细阅读其条款并自行决定是否接受</span>请您妥善保护自己的个人信息
仅在必要的情况下向他人提供本政策仅适用于我们所收集保存使用共享披露信息并不适用于任何第三方提供的服务或第三方的信息使用规则
第三方使用您信息时的行为由其自行负责</p>
<p style="font-weight: bold; margin:5px 0;">我们如何使用Cookie和其他同类技术</p>
<p style='text-indent:30px;'>在您接受cookies的情况下关键测试宝会在您的计算机以及相关移动设备上设定或取用cookies
以便您能登录或使用依赖于cookies的关键测试宝平台服务或功能
您有权选择接受或拒绝接受cookies您可以通过修改浏览器设置的方式或在移动设备中设置拒绝接受cookies
但如果您选择拒绝接受cookies则您可能无法登录或使用依赖于cookies的关键测试宝平台服务或功能</p>
<p>通过关键测试宝所设cookies所取得的有关信息将适用本政策</p>
<p style="font-weight: bold; margin:5px 0;">未成年人保护</p>
<p style="font-weight: bold;text-indent:30px; ">以下条款请未成年用户特别是未满十四周岁的儿童用户在监护人的陪同下仔细阅读
并由监护人在充分理解后作出是否接受或拒绝本政策的决定</p>
<p style="font-weight: bold;text-indent:30px; ">1. 若用户是未满18周岁的未成年人特别是未满十四周岁的儿童用户
应在监护人监护指导并获得监护人同意情况下阅读本协议和使用关键测试宝相关服务</p>
<p style="font-weight: bold;text-indent:30px; ">2. 我们重视对未成年人个人信息的保护未成年用户在填写个人信息时
请加强个人保护意识并谨慎对待请在监护人指导时正确使用关键测试宝相关服务</p>
<p style="font-weight: bold;text-indent:30px; ">3. 我们将根据国家相关法律法规及本政策的规定保护未成年人用户信息的保密性及安全性
如果我们发现自己在未事先获得可证实的父母或法定监护人同意的情况下收集了未成年人的个人信息则会设法尽快删除相关数据同时我们建立了严格
的未成年人信息收集使用规则以保护儿童和青少年个人信息安全若您是未成年人的监护人当您对您所监护的未成年人使用我们的服务或其向我们
提供的用户信息有任何疑问时
请您根据本政策第十条提供的联系方式及时与我们联系</p>
<p style="font-weight: bold; margin:5px 0;">我们如何更新隐私政策</p>
<p style="text-indent:30px; ">1. 为了给您提供更好的服务我们会根据产品的更新情况及法律法规的相关要求更新本政策的条款
这些更新将构成本政策的一部分
未经您明确同意我们不会削减您依据当前生效的本政策所应享受的权利</p>
<p style="text-indent:30px; ">2. 如遇本政策更新我们会通过关键测试宝官方网站www.keyitest.cn
关键测试宝小程序推送通知或其他合理方式通知您以便您能及时了解本政策的最新版本</p>
<p style="font-weight: bold; margin:5px 0;">如何联系我们</p>
<p style="text-indent:30px; ">如您对个人信息保护问题有任何投诉建议疑问或您对本政策有任何疑问
1您可与关键测试宝产品功能页面的在线客服联系或者在线提交意见反馈
2您可以通过关键测试宝官方网站www.keyitest.cn进行反馈</p>
<p>我们将尽快审核所涉问题并在验证您的用户身份后的十五个工作日内予以答复</p>
<p style="font-weight: bold; margin:5px 0;">十一其他</p>
<p style="text-indent:30px; ">因本政策以及我们处理您个人信息事宜引起的任何争议由双方协商解决协商不一致的可以向被告所在地人民法院提起诉讼</p>
<view style="height: 20px;"></view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
.navTab{
padding:15px 20px 13px 20px;
font-size: 14px;
line-height:23px;
color: #333333;
}
</style>

@ -0,0 +1,316 @@
<template>
<view class="navTab">
<u-form v-if="wxUserInfo" :model="infornobj" ref="infornobj" label-position='left' label-width='130' border-bottom='false' >
<u-form-item label="头像:" prop="avatar" border-bottom='false' required='true' >
<u-upload ref="upload" width='100px' height='100px'
:action="action"
:header="headers"
:auto-upload="true"
:show-progress="false"
max-count="1"
:deletable="true"
:file-list="infornobj.avatar"
@on-success="(data,index,lists) => {fielUploadSuc(data,index,lists) }"
@on-remove="(index, lists, name)=>{deleteUpfile(index)}"
@on-error="(data,index, lists)=>{errorUpfile(data,index, lists)}"
>
<view slot="addBtn" class="slot-btn" >
<img v-if="infornobj.avatar" :src="infornobj.avatar" mode="aspectFill" style="width: 100px;height: 100px;">
<div v-else class="upliacla">
<p style="font-size: 18px;">+</p>
<p>选择图片</p>
<!-- <u-icon name="arrow-upward" color="#606266" size="38"></u-icon> -->
</div>
</view>
</u-upload>
</u-form-item>
<u-form-item label="昵称:" prop="nickName" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="infornobj.nickName" placeholder='输入昵称'/>
</view>
</u-form-item>
<u-form-item label="性别:" prop="sex" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" v-model="infornobj.sex" type="select" @click="sexshow = true" placeholder='请选择' />
<u-select v-model="sexshow" :list="sexList" @confirm="sexchange"></u-select>
</view>
</u-form-item>
<u-form-item label="邮箱:" prop="email" border-bottom='false' required='true'>
<view class="sinput">
<!-- <input type="text" style="width:100%;" v-model="infornobj.email"/> @input='xgemial'-->
<u-input style="width:100%;" :disabled='istest' v-model="infornobj.email" placeholder='输入邮箱'/>
</view>
</u-form-item>
<u-form-item label="手机号:" prop="phonenumber" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" disabled v-model="infornobj.phonenumber" placeholder='输入手机号'/>
</view>
</u-form-item>
</u-form>
<view class="button-g" @click="resource">保存</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
sexshow:false,
wxUserInfo:null,
isPopupShow:false,
istest:false,
infornobj:{avatar:'',nickName:'',phonenumber:'',email:'',sex:''},
sexList:[{value:'0',label:'男'},{value:'1',label:'女'},],
// action: 'https://www.keyitest.cn/prod-api/upload',
action: this.http.baseUrl + '/upload',
headers:{
// 'TENANT-ID': 3, 'accept': '*/*',
// 'Connection': 'keep-alive','Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryDX4wOxgD9mzUzAIF',
// 'Origin': 'https://www.keyitest.cn', 'Accept-Encoding': 'gzip, deflate, br',
// 'Accept-Language': 'zh,zh-CN;q=0.9', 'Host': 'https://www.keyitest.cn',
// 'Referer':'https://www.keyitest.cn',
Authorization:'Bearer '+uni.getStorageSync('accessToken'),
},
Rules: {
nickName: [{ required: true, message: '请输入姓名', trigger: 'change',}],
email: [{ required: true, message: '请输入邮箱', trigger: 'change',},
{
pattern:
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
message: "邮箱格式不对",
trigger: "blur",
},],
//
sex: [{ required: true, message: '请选择性别', trigger: 'change',}],
},
}
},
onReady(){
this.$refs.infornobj.setRules(this.Rules);
},
onShow() {
},
mounted() {
this.infornobj.avatar=this.wxUserInfo.avatar
},
onLoad() {
this.wxUserInfo=uni.getStorageSync('wxUserInfo');
let avatar=uni.getStorageSync('avatar');
let email=uni.getStorageSync('email');
let nickName=uni.getStorageSync('nickName');
let sex=uni.getStorageSync('sex');
console.log('wxUserInfo',this.wxUserInfo,)
let {phonenumber}=this.wxUserInfo;
let setavatar='',sexdata='';
if(avatar){
// if(avatar.indexOf('http')==0){
// setavatar = avatar
// }else{
// setavatar=this.http.baseUrl+avatar
// }
setavatar = avatar
}else{
setavatar=''
}
if(sex){
sexdata=this.sexList.filter(item=>item.value==sex)[0].label;
}
console.log('sex--',this.infornobj.sex)
console.log('头像',setavatar,this.wxUserInfo)
this.$nextTick(()=>{
let setphone=phonenumber.slice(0,3)+'****'+phonenumber.slice(7,11)
this.infornobj={nickName,sex:sexdata,phonenumber:setphone,avatar:setavatar,email:email?email:''}
console.log('avatar',this.wxUserInfo,this.infornobj)
})
},
methods: {
sexchange(e){
this.infornobj.sex=e[0].label
},
//
fielUploadSuc(data,index,lists) {
console.log('-',data,'*',index,lists)
if (data.code === 200) {
this.infornobj.avatar=data.filePath
// console.log('',this.infornobj.avatar)
}
},
//
deleteUpfile(index,lists){
console.log('del头像',this.infornobj.avatar)
this.infornobj.avatar=''
// if(this.credentialImgList.length>0){
// let id=this.credentialImgList[0].id;
// this.http.quickDelete(`/equestrianinfo/file/${id}`).then(()=>{})
// }
},
errorUpfile(data,index){
// console.log('-',data,'*',index)
// this.$refs.uToast.show({
// title: '',
// type: 'error',
// })
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
},
editinform(){
this.isPopupShow = true
},
xgemial(e){
console.log('xgemial===',e,'===xgemial',this.infornobj.avatar);
this.infornobj.avatar=this.infornobj.avatar.slice(0,1)
},
resource(){
console.log('this.infornobj---',this.infornobj)
this.$refs.infornobj.validate(valid => {
if (valid) {
if(!this.infornobj.avatar){
this.$refs.uToast.show({
title: '请上传头像',
type: 'warning',
})
return;
}
let avatar='',avtimg=this.infornobj.avatar;
if(avtimg&&avtimg.indexOf('h')==0){
avatar=avtimg
}else{
avatar=this.http.baseUrl+avtimg
}
let sexindex=this.sexList.filter(item=>item.label==this.infornobj.sex)[0].value;
let data={
userId:this.wxUserInfo.userId,
nickName:this.infornobj.nickName,
email:this.infornobj.email,
sex:sexindex,
avatar,
}
console.log('data---',data)
// return;
this.http.quickPut(`/system/user/profile`,data,true).then(res=>{
if(res.data.code==200){
uni.setStorageSync('avatar', data.avatar)
uni.setStorageSync('email', data.email)
uni.setStorageSync('nickName', data.nickName)
uni.setStorageSync('sex', data.sex)
this.$refs.uToast.show({
title: '信息修改成功',
type: 'success',
isTab:true,
url:'pages/personal/personal'
})
} else {
this.$refs.uToast.show({
title: res.data.msg,
type: 'eroor',
})
}
// console.log('res---',res)
})
}else{
console.log('验证失败',this.infornobj)
}
})
}
}
}
</script>
<style>
.navTab{
background-color: #ffffff;
/* height: 96vh; */
width: 96vw;
margin: 2vh auto;
padding: 10px 15px 30px 25px;
border-radius: 5px;
}
.sinput{
display: flex;
align-items: center;
/* height: 50px; */
}
.u-form-left__content__label{
color:#808080!important;
}
.sinput .u-input{
height:35px;
border-bottom: 1px solid #EBEBEB!important;
}
.slot-btn{
width:200rpx;
height:0rpx;
zIndex:99;
/* display: flex;
justify-content: center;
align-items: center;
background: rgb(244, 245, 246);
border-radius: 10rpx; */
}
.slot-btn__hover {
background-color: rgb(235, 236, 238);
}
.infoencls{
display: flex;
justify-content: space-between;
font-size: 15px;
border-bottom: 1px solid #EBEBEB;
height:43px;
align-items: center;
}
.peodi{
margin:-5px auto 15px;
width: 260px;
text-align: center;
color: #1A1A1A;
font-size:36rpx;
font-weight: bold;
}
.button-g{
/* width:90vw; */
background:#1578ED;
border: 1px solid #1578ED;
color: #FFFFFF;
height: 80rpx;
border-radius:15rpx;
text-align: center;
line-height:80rpx;
font-size: 35rpx;
margin-top: 30px;
/* position: fixed; */
/* bottom:25px; */
}
.picput{
margin:50px auto;
width:65vw;
text-align: center;
}
.u-list-item{
margin: 0 !important;
background: transparent!important;
color:transparent!important;
}
.upliacla{
width: 100px;
height: 100px;
/* line-height:100px; */
border-radius: 4px;
background: #f4f5f6;
color:#606266;
display:flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
</style>

@ -0,0 +1,216 @@
<template>
<view>
<view class="accounmt">
<div class="applydraw">
<p><span style="font-size:16px;color: #000000FF;font-weight: bold;">转出到</span></p>
<p style="font-size:13px;color: #808080FF;margin:8px 0 13px 0"><span >请选择余额转出到哪里</span></p>
<u-input style="width:100%;" v-model="Withdrawalform.withdraw" type="select" @click="psytypeshow = true" placeholder='选择添加类型' />
<u-select v-model="psytypeshow" :list="payList" @confirm="paychange" mode="mutil-column-auto" ></u-select>
<!-- 支付宝 -->
<block v-if="Withdrawalform.withdraw == '支付宝' && accountdata.alipay">
<view style="height: 20rpx;"></view>
<u-input :value="`${accountdata.alipay}(${accountdata.name})`" disabled ></u-input>
</block>
<!-- 银行卡 -->
<block v-if="Withdrawalform.withdraw == '银行卡' && accountdata.bankAccount">
<view style="height: 20rpx;"></view>
<u-input :value="`${accountdata.bankAccount}(${accountdata.name})`" disabled ></u-input>
<view style="height: 20rpx;"></view>
<u-input :value="accountdata.bankDeposit" disabled ></u-input>
</block>
<div style="border: 1px dashed #EBEBEB;margin: 20px 0;"></div>
<div style="display: flex;align-items: center;">
<p style="font-size:16px;color: #000000FF;font-weight: bold;">提现金额</p>
<!-- <i style="color:#FD5D5DFF;margin: 0 5px;" class="u-icon-warning"></i> -->
</div>
<div style="margin:8px 0 13px 0">
<u-icon name="info-circle-fill" size='26' color='#fd5d5dFF'></u-icon>
<span style="font-size:13px;color: #808080FF;">提现金额将在7个工作日到账请耐心等待</span>
</div>
<u-input v-model="Withdrawalform.recordAmount" style="width:500px" placeholder='请输入提现金额'></u-input>
<p style="font-size:14px;color: #4D4D4DFF;margin-top: 20px;">
<span>本次最大可提现金额</span>
<span style="color:#FD5D5DFF">{{ accountdata.availableBalance }}</span>
<span></span>
</p>
<div style="border: 1px dashed #EBEBEB;margin: 20px 0;"></div>
<p>
<span style="font-size:16px;color: #000000FF;font-weight: bold;">交易密码</span>
</p>
<p v-if="!accountdata.password" style="font-size:13px;color: #808080FF;margin:8px 0 13px 0"><span >你还未设置交易密码,<text @click="goPassword" style="color:#358efa">去设置</text></span></p>
<u-input type="password" show-password auto-complete="new-password" v-model="Withdrawalform.password" placeholder='请输入交易密码'></u-input>
<div style="border: 1px dashed #EBEBEB;margin: 20px 0;width:"></div>
<p>
<span style="font-size:16px;color: #000000FF;font-weight: bold;">备注</span>
</p>
<p style="font-size:13px;color: #808080FF;margin:8px 0 13px 0"> <span >备注信息非必需</span></p>
<div class="remak">
<u-input type="textarea" auto-height="true" v-model="Withdrawalform.remark" />
</div>
<div class="addbtn">
<button class="applbtn" @click="Withdapply('applyfor')"
style='background: linear-gradient(90deg, #5EA6FD, #1A81F9);'>提现申请</button>
<button class="applbtn" @click="Withdapply('cancel')"
style="border: 1px solid #E0E0E0;background: #FFFFFF;color: #666666;">取消</button>
</div>
</div>
</view>
<u-toast ref="uToast"></u-toast>
</view>
</template>
<script>
import { encrypt, decrypt } from '../../../utils/encrypt.js'
export default {
data() {
return {
psytypeshow:false,
payList:[{value:'alipay',label:'支付宝'},{value:'bank',label:'银行卡'},],
Withdrawalform:{withdraw:'支付宝',recordAmount:'',password:''},
wxUserInfo:{},
accountdata:{},
}
},
onShow() {
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
this.http.quickGet(`/mpay/my/account/${this.wxUserInfo.userId}`,true).then(res=>{
console.log('账户概览---',res)
this.accountdata=res.data
})
},
methods: {
goPassword() {
uni.navigateTo({
url: '/pages/personal/setup/tranpassword'
})
},
paychange(e){
if (e[0].label == '支付宝' && !this.accountdata.alipay) {
return this.$refs.uToast.show(
{
type: 'default',
title: "请先添加提现支付宝",
}
)
}
if (e[0].label == '银行卡' && !this.accountdata.bankAccount) {
return this.$refs.uToast.show(
{
type: 'default',
title: "请先添加提现银行卡",
}
)
}
this.Withdrawalform.withdraw=e[0].label
},
//
Withdapply(type){
if(type=='applyfor'){
// Withdrawalform:{withdraw:'alipay',recordAmount:'',password:''}
if(!this.accountdata.password){
uni.showToast({ title: '请先设置交易密码', icon: 'none', duration:1000 });
return;
}
if(!this.Withdrawalform.recordAmount){
uni.showToast({ title: '请输入提款金额', icon: 'none', duration:1000 });
return;
}
if (!/^[1-9]\d*$/.test(this.Withdrawalform.recordAmount)){
uni.showToast({ title: '请输入数字', icon: 'none', duration:1000 });
return;
}
if(Number(this.Withdrawalform.recordAmount) > this.accountdata.availableBalance){
uni.showToast({ title: '超出提现范围', icon: 'none', duration:1000 });
return;
}
if(!this.Withdrawalform.password){
uni.showToast({ title: '请输入密码', icon: 'none', duration:1000 });
return;
}
if(this.Withdrawalform.password.length < 6){
uni.showToast({ title: '密码少于6位', icon: 'none', duration:1000 });
return;
}
let data={
accountId:this.accountdata.accountId,
userId:this.wxUserInfo.userId,
withdraw:this.Withdrawalform.withdraw,
// password:this.Withdrawalform.password,
password:encrypt(this.Withdrawalform.password),
recordAmount:parseInt(this.Withdrawalform.recordAmount)
}
console.log('data---',data)
// return;
this.http.quickPost(`/mpay/account/withdraw`,data,true).then(res=>{
console.log('res---',res)
if(res.data.data.code==200){
uni.showToast({ title: '提现申请成功', icon: 'none', duration:2000 });
setTimeout(()=>{
uni.navigateTo({
url:'/pages/personal/setup/accountoverview'
})
},1000)
}else{
uni.showToast({ title: res.data.data.msg, icon: 'none', duration:1000 });
}
})
}else{
uni.navigateTo({
url:'/pages/personal/setup/accountoverview'
})
}
}
}
}
</script>
<style>
.accounmt{
background: #FFFFFF;
width:96vw;
/* height:96vh; */
margin:2vh auto;
border-radius: 10px;
padding:10px 13px;
}
.applbtn{
border-radius:50px;
width:150px;
height:40px;
font-size: 18px;
margin-right:20px;
background: #909399;
text-align: center;
line-height: 40px;
color: #FFFFFF;
}
.addbtn{
display: flex;
/* position: fixed; */
/* bottom: 50px; */
margin: 20px;
}
.u-input{
padding: 0 10px!important;
height:35px;
border-radius: 4rpx;
border: 1px solid #E6E6E6;
}
.remak .u-input{
/* width:75vw; */
height:100px;
/* border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px!important;
margin-top:70px */
}
</style>

@ -0,0 +1,53 @@
<template>
<view>
<view class="bureau">
<view style="margin-bottom: 43px;">
<img src="/static/index/logo.png" alt="">
<p style="margin: 10px 0;">关键测试宝</p>
<p style="font-size:.8rem;font-weight: 400;letter-spacing: 0.7rem;">专业软件测试云平台</p>
</view>
</view>
<view style="width: 90vw;margin: 0 5vw;">
<!-- <p style="color: #333333;line-height: 42rpx;margin-bottom:13px;">北京关键科技股份有限公司成立于2005年总部位于北京昌平
未来科学城国电投研究院园区内目前在西安上海武汉重庆成都及广州均有分公司及办事处</p>text-indent:25px; -->
<p style="color: #333333;line-height:50rpx;margin-bottom:13px;text-indent: 2em;">北京关键科技股份有限公司成立于2005年是国家级高新技术企业双软认证企业CNAS国家认可实验室认证,连续多年被评为北京市纳税信用A级企业单位为院校电力轨道交通金融和电信等行业提供软件工程软件测试信息安全大数据高性能计算等方面的产品服务和技术解决方案</p>
<p style="color: #333333;line-height:50rpx;margin-bottom:13px;text-indent: 2em;">为员工服务为用户奋斗是关键科技的司训宗旨关键科技的一切来自于员工为员工服务是关键科技事业兴旺发达的内在前提关键科技的事业源自于用户为用户奋斗是关键科技事业持续发展的必然结果为员工服务是为实现为用户奋斗准备有生力量为用户奋斗是为实现为员工服务提供再生能量两者有机统一互为支撑</p>
<p style="color: #333333;line-height:50rpx;margin-bottom:13px;text-indent: 2em;">个人为事业服务事业为社会服务个人的服务是超报酬的社会的服务是超经济的是公司理念的价值链公司为员工增值员工为事业创造价值事业为社会创造价值新的价值所形成的新的经济会超越并提升现有的经济</p>
<p style="color: #333333;line-height:50rpx;margin-bottom:13px;text-indent: 2em;">谋关键的事创关键的业做关键的人何为关键的事何为关键的业又何为关键的人呢关键的事是一个战术问题对内推动变革保持价值观一致实行有效沟通保证信息对称员工价值增值创造价值再把价值贡献给社会</p>
<u-line ></u-line>
<p style='color: #808080;font-size: 13px;margin:13px 0 10px 0;'>官方网站www.keyitest.cn</p>
<p style='color: #808080;font-size: 13px;'>客服电话010-80750213</p>
<div style="height: 50px;"> </div>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
.bureau{
text-align: center;
margin: 5vh auto 3vh auto;
}
.bureau img{
width:70px;
height:58px;
margin-right: 5px;
}
.bureau p{
font-size:1.3rem;
font-weight: bold;
color:#0A8AD3;
}
</style>

@ -0,0 +1,502 @@
<template>
<view>
<view class="accounmt">
<view v-show="isadd">
<p class="selectadd" style="margin-bottom: 20px;">选择添加类型</p>
<u-input style="width:100%;" v-model="accountform.paytype" type="select" @click="psytypeshow = true" placeholder='选择添加类型' />
<u-select v-model="psytypeshow" :list="payList" @confirm="paychange" mode="mutil-column-auto" ></u-select>
<div style="border: 1px dashed #EBEBEB;margin: 20px 0;"></div>
<div v-if="accountform.paytype=='支付宝'" style="display: flex;align-items: center;margin-bottom:10px;">
<img style="width:19px;height:19px;margin-right:5px;" src="/static/crowd/PAYB.png" alt="">
<p class="selectadd">支付宝账号</p>
</div>
<div v-if="accountform.paytype=='银行卡'" style="display: flex;align-items: center;margin-bottom:10px;">
<img style="width:18px;height:15px;margin-right:5px;" src="/static/crowd/bankcad.png" alt="">
<p class="selectadd">银行卡账号</p>
</div>
<u-form :model="accountform" ref="accountform" label-position='left' label-width='140' border-bottom='false'>
<view v-if="accountform.paytype=='支付宝' && !accountdata.alipay">
<u-form-item label="姓 名:" prop="name" border-bottom='false' required='true'>
<u-input style="" v-model="accountform.name" ></u-input>
</u-form-item>
<u-form-item label="账 号:" prop="alipay" border-bottom='false' required='true'>
<u-input v-model="accountform.alipay" ></u-input>
</u-form-item>
<view class="tishi">
<image style="width: 21rpx;height: 21rpx;margin-right: 10rpx;" src="../../../static/crowd/zhuyi.png" mode=""></image>
账号添加后暂不支持更改请仔细检查后再提交确定
</view>
<view class="addbtn">
<view class="addbtnff" v-if="accountform.paytype=='支付宝' && !accountdata.alipay" @click="acsumbit('determine')"
style='background: linear-gradient(90deg, #5EA6FD, #1A81F9);'>确定</view>
<view v-if="accountform.paytype=='支付宝' && !accountdata.alipay" class="addbtnff" @click="acsumbit('cancel')" style="border: 1px solid #E0E0E0;background: #FFFFFF;color: #666666;">取消</view>
</view>
</view>
<view v-if="accountform.paytype=='银行卡' && !accountdata.bankAccount">
<u-form-item label="姓 名:" prop="name" border-bottom='false' required='true'>
<u-input style="" v-model="accountform.name" ></u-input>
</u-form-item>
<u-form-item label="开户行:" prop="bankDeposit" border-bottom='false' required='true'>
<u-input v-model="accountform.bankDeposit" ></u-input>
</u-form-item>
<u-form-item label="账 号:" prop="bankAccount" border-bottom='false' required='true'>
<u-input v-model="accountform.bankAccount" ></u-input>
</u-form-item>
<view class="tishi">
<image style="width: 21rpx;height: 21rpx;margin-right: 10rpx;" src="../../../static/crowd/zhuyi.png" mode=""></image>
账号添加后暂不支持更改请仔细检查后再提交确定
</view>
<view class="addbtn">
<view class="addbtnff" v-if="accountform.paytype=='银行卡' && !accountdata.bankAccount" @click="acsumbit('determine')"
style='background: linear-gradient(90deg, #5EA6FD, #1A81F9);'>确定</view>
<view v-if="accountform.paytype=='银行卡' && !accountdata.bankAccount" class="addbtnff" @click="acsumbit('cancel')" style="border: 1px solid #E0E0E0;background: #FFFFFF;color: #666666;">取消</view>
</view>
</view>
</u-form>
<!-- 已添加账号 -->
<view class="yitianjiaed" v-if="accountform.paytype=='支付宝' && accountdata.alipay">
<view class="yitianjiaedtext">
<text>*</text>
姓名{{ accountdata.name }}
</view>
<view class="yitianjiaedtext">
<text>*</text>
账号{{ accountdata.alipay }}
</view>
</view>
<view class="yitianjiaed" v-if="accountform.paytype=='银行卡' && accountdata.bankAccount">
<view class="yitianjiaedtext">
<text>*</text>
姓名{{ accountdata.name }}
</view>
<view class="yitianjiaedtext">
<text>*</text>
开户行{{ accountdata.bankDeposit }}
</view>
<view class="yitianjiaedtext">
<text>*</text>
账号{{ accountdata.bankAccount }}
</view>
</view>
</view>
<view v-show="!isadd">
<view v-if="accountdata.alipay && accountdata.bankAccount" @click="accountdatadia('查看账户')" style="display:flex;align-items:center;font-size:15px;cursor: pointer;">
<!-- <img style="width:20px;height:20px" src="/static/crowd/add.png" alt=""> -->
<p style="color:#2286FA;margin: 0 5px;">查看账户</p>
</view>
<view v-else @click="accountdatadia('添加账户')" style="display:flex;align-items:center;font-size:15px;cursor: pointer;">
<img style="width:20px;height:20px" src="/static/crowd/add.png" alt="">
<p style="color:#2286FA;margin: 0 5px;">添加账户</p>
<p v-if="!accountdata.alipay && !accountdata.bankAccount" style="color:#666666FF;font-size:13px;">(还未添加账户,无法提现)</p>
</view>
<div class="test_content">
<div style="padding:20px;background: #F2F4F7FF;border-radius: 6px 6px 0px 0px;border: 1px solid #E6E8EB;">
<p style="font-size:26px;color:#1A1A1AFF;font-weight: bold;">账户余额</p>
<p style="margin: 20px 0 0 0;">
<span style="font-size:30px;color:#F65B24FF;">{{accountdata.balance}}</span>
<span style="font-size:18px;color:#A6A6A6;margin-left: 10px;"></span>
</p>
</div>
<div class="Withdrawable">
<p>可提现余额{{accountdata.availableBalance}}</p>
</div>
<!-- <u-divider use-solt='false'></u-divider> -->
<!-- <div class="linex"></div> -->
<div style="margin-top:35px;display: flex;">
<button class="applbtn" @click="chongzhi" style='background: linear-gradient(90deg, #5EA6FD, #1A81F9);'>充值</button>
<button class="applbtn" @click="openwitd" style='border: 1px solid #2468F6;color: #2468F6; background: #FFFFFF;'>提现</button>
<!-- <button @click="openwitd" class="addbtnff" style='border: 1px solid #2468F6;'>提现</button> -->
<!-- <view style="width:150px;height:50px;font-size: 18px;margin-right:20px;">充值</view>
<view style="width:150px;height:50px;font-size: 18px;margin-left:20px;">提现</view> -->
</div>
</div>
</view>
</view>
<u-toast ref="uToast"></u-toast>
<!-- 充值弹层 -->
<u-popup style="background:#66666;padding: 20px;" v-model="lqPasswordShow" mode="bottom" length="80%"
height='40%' border-radius="15" :closeable='true' :mask-close-able="false">
<!-- <u-code-input dot v-model="qbpassword" :maxlength="6"></u-code-input> -->
<view style="height:100rpx">
</view>
<view style="font-weight: 500;font-size: 26rpx;color: #1A1A1A;margin-bottom: 40rpx;">充值金额</view>
<u-input v-model="chongzhinum" type="digit" :border="true" />
<view class="button-g"
style="width:80vw; background: linear-gradient(90deg, #5EA6FD, #1A81F9);color: #FFFFFF;margin-top: 80rpx;margin-left: 80rpx;"
@click="chongzhipay">充值</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
lqPasswordShow: false,
chongzhinum: null,
accountdata:{},
wxUserInfo:null,
isadd:false,
psytypeshow:false,
payList:[{value:'1',label:'支付宝'},{value:'2',label:'银行卡'},],
accountform:{paytype:'支付宝',name:'',alipay:'',bankDeposit:'',bankAccount:''},
accountRules:{
name: [
{required: true, message: "姓名不能为空", trigger: "blur"},
{max: 4, message: '最多输入4个中文', trigger: 'change' },
{
pattern:
/^(?:[\u4e00-\u9fa5·]{2,16})$/,
message: "请输入中文",
trigger: "blur",
},
],
bankDeposit: [
{required: true, message: "开户行不能为空", trigger: "blur"},
{
pattern:
/^(?:[\u4e00-\u9fa5·]{2,16})$/,
message: "请输入中文",
trigger: "blur",
},
],
alipay: [
{required: true, message: "账号不能为空", trigger: "blur"},
{max: 25, message: '账号格式不对', trigger: 'change' },
{
message: '账号格式不对',
trigger: 'change',
pattern:/(^[\w.\-]+@(?:[a-z0-9]+(?:-[a-z0-9]+)*\.)+[a-z]{2,3}$)|(^1[3|4|5|8]\d{9}$)/,
},
],
bankAccount: [
{required: true, message: "账号不能为空", trigger: "blur"},
// {min:16, message: '', trigger: 'change' },
// {max:19, message: '', trigger: 'change' },
// {
// message: '',
// trigger: 'change',
// pattern:/^[1-9]\d*$/,
// }
{
validator: (rule, value, callback) => {
const str = value.replace(/\s/g, '');
if (/^[1-9]\d*$/.test(str)) {
if(str.length <=19 && str.length >=16) {
callback()
} else {
callback(new Error('账号位数错误'));
}
} else {
callback(new Error('卡号只能为数字'));
}
},
trigger: ['blur'],
}
],
},
Withdrawalform:{withdraw:'alipay',recordAmount:'',password:''}
}
},
onReady(){
this.$refs.accountform.setRules(this.accountRules);
},
onShow() {
if(this.isadd){
uni.setNavigationBarTitle({
title: '添加账户'
});
}else{
uni.setNavigationBarTitle({
title: '账户概览'
});
}
},
onLoad() {
},
mounted() {
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
let userId=this.wxUserInfo.userId
this.http.quickGet(`/mpay/my/account/${userId}`,true).then(res=>{
this.accountdata=res.data
this.accountform.name = res.data.name
this.accountform.alipay = res.data.alipay
this.accountform.bankDeposit = res.data.bankDeposit
this.accountform.bankAccount = res.data.bankAccount
})
},
methods: {
paychange(e){
this.accountform.paytype=e[0].label
},
//
accountdatadia(val){
this.isadd=true
uni.setNavigationBarTitle({
title: val
});
},
//
acsumbit(type){
if(type=='cancel'){
this.isadd=false
uni.setNavigationBarTitle({
title: '账户概览'
});
}else{
this.$refs.accountform.validate((valid) => {
if(valid) {
let data={};
if(this.accountform.paytype=='支付宝'){
data={
name:this.accountform.name,
accountId:this.accountdata.accountId,
userId:this.wxUserInfo.userId,
alipay:this.accountform.alipay
}
}else{
data={
name:this.accountform.name,
accountId:this.accountdata.accountId,
userId:this.wxUserInfo.userId,
bankAccount:this.accountform.bankAccount.replace(/\s/g, ''),
bankDeposit:this.accountform.bankDeposit
}
}
console.log('添加账号data---',data)
// return;
this.http.quickPost(`/mpay/setting/account`,data,true).then(res=>{
console.log('res---',res)
if(res.data.data.code==200){
this.$refs.uToast.show(
{
type: 'success',
title: "添加成功",
duration: 2000,
}
)
// uni.showToast({ title: '', icon: 'none', duration: 1000, success() {
// this.isadd = false
// } });
//
this.isadd = false
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
let userId=this.wxUserInfo.userId
this.http.quickGet(`/mpay/my/account/${userId}`,true).then(res=>{
this.accountdata=res.data
this.accountform.name = res.data.name
this.accountform.alipay = res.data.alipay
this.accountform.bankDeposit = res.data.bankDeposit
this.accountform.bankAccount = res.data.bankAccount
})
} else {
this.$refs.uToast.show(
{
type: 'error',
title: "添加失败",
duration: 2000,
}
)
}
})
}else{
console.log('效验失败---',data)
}
})
}
},
//
openwitd(){
//
if (this.accountdata.availableBalance == 0) {
return this.$refs.uToast.show(
{
type: 'default',
title: "您的提现额度不足, 无法提现",
}
)
}
//
if (!this.accountform.alipay && !this.accountform.bankAccount) {
this.$refs.uToast.show(
{
type: 'default',
title: "请先添加提现账户",
}
)
} else {
uni.navigateTo({
url:'/pages/personal/setup/Withdrawal'
})
}
},
//
chongzhi() {
this.lqPasswordShow = true
},
//
chongzhipay() {
const that = this
const data = {
paytype: 'W06',
userId: this.accountdata.userId,
accountId: this.accountdata.accountId,
remark: '',
price: this.chongzhinum,
recordName: '小程序端微信充值',
}
this.http.quickPost(`/play/recharge`, data, true).then(res => {
const info = JSON.parse(res.data.payinfo)
uni.requestPayment({
timeStamp: info.timeStamp,
nonceStr: info.nonceStr,
package: info.package,
signType: info.signType,
paySign: info.paySign,
success(r) {
that.wxUserInfo = uni.getStorageSync('wxUserInfo');
let userId=that.wxUserInfo.userId
that.http.quickGet(`/mpay/my/account/${userId}`,true).then(res=>{
that.accountdata=res.data
that.accountform.name = res.data.name
that.accountform.alipay = res.data.alipay
that.accountform.bankDeposit = res.data.bankDeposit
that.accountform.bankAccount = res.data.bankAccount
})
uni.showToast({
icon:'none',
title: '充值成功'
})
that.lqPasswordShow = false
that.chongzhinum = ''
},
fail(error) {
console.log(error);
uni.showToast({
icon:'none',
title: '充值失败'
})
}
})
})
}
}
}
</script>
<style>
.button-g {
width: 540rpx;
height: 70rpx;
background: linear-gradient(90deg, #FF8600, #FE2B2B);
border-radius: 35rpx;
text-align: center;
line-height: 70rpx;
color: #FFFFFF;
font-size: 30rpx;
margin-left: 13px;
}
/* #F2F4F7 */
.accounmt{
background: #FFFFFF;
width:96vw;
height:96vh;
margin:2vh auto;
border-radius: 10px;
padding:10px 13px;
}
.test_content{
margin:30px 0;
/* background: #F2F4F7FF; */
text-align: center;
}
.linex{
height:1rpx;
width:100%;
background:#EBEBEB
}
.applbtn{
border-radius:50px;
width:150px;
height:40px;
font-size: 18px;
margin-right:20px;
background: #909399;
text-align: center;
line-height: 40px;
color: #FFFFFF;
}
.Withdrawable{
background: #DDE8F8;
border-radius: 0px 0px 6px 6px;
border: 1px solid #E6E8EB;
height:100rpx;
line-height:100rpx;
font-size:16px;
color:#666666FF;
}
.selectadd{
color: #000000;
font-size:16px;
font-weight: bold;
}
.u-input{
padding: 0 10px!important;
height:35px;
border-radius: 4rpx;
border: 1px solid #E6E6E6;
}
.addbtn{
display: flex;
justify-content: space-evenly;
position: fixed;
bottom: 50px;
width: 100%;
margin-left: -40rpx;
}
.addbtnff {
width: 40%;
height: 70rpx;
border-radius: 35rpx;
line-height: 70rpx;
font-weight: 500;
font-size: 28rpx;
color: #FFFFFF;
text-align: center;
}
.tishi {
font-weight: 500;
font-size: 22rpx;
color: #808080;
display: flex;
align-items: center;
}
.yitianjiaed {
width: 100%;
background: #F5F7FA;
border-radius: 4px;
border: 1px solid #E6E6E6;
box-sizing: border-box;
padding: 20rpx;
margin-top: 40rpx;
}
.yitianjiaedtext {
font-weight: 500;
font-size: 26rpx;
color: #333333;
margin-bottom: 25rpx;
}
.yitianjiaedtext text {
color: red;
margin-right: 10rpx;
}
</style>

@ -0,0 +1,435 @@
<template>
<view style="">
<view class="navTab">
<view class="sintitle">
<img src="/static/index/grxx.png" alt="">
<p>认证信息</p>
</view>
<u-form :model="certobj" ref="certobj" label-position='left' label-width='150' border-bottom='false' >
<u-form-item label="姓名:" prop="name" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.name" placeholder='输入姓名'/>
</view>
</u-form-item>
<u-form-item label="身份证号:" prop="idNumber" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.idNumber" placeholder='输入身份证号' />
</view>
</u-form-item>
<!-- <u-form-item label="所在城市:" prop="city" border-bottom='false' required='true'>
<view v-if="istest" class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.city" placeholder='输入所在城市' />
</view>
<view v-else class="sinput">
<u-input style="width:100%;" v-model="certobj.city" type="select" @click="cityshow = true" placeholder='输入所在城市' />
<u-select v-model="cityshow" :list="cityList" @confirm="citychange" mode="mutil-column-auto" ></u-select>
</view>
</u-form-item>
<u-form-item label="个人技能:" prop="testSkills" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.testSkills" placeholder='输入个人技能'/>
</view>
</u-form-item>
<view class="sintitle" style="margin-top:15px;margin-left: -20px;">
<img src="/static/index/jnzs.png" alt="">
<p style="color:#fa3534;margin-right:3px">* </p>
<p>技能证书</p>
</view>
<u-form-item prop="certificateUrl" border-bottom='false' >
<u-upload width='100px' height='100px'
:action="action"
:disabled='istest'
:header="headers"
:auto-upload="true"
:show-progress="false"
max-count="1"
:deletable="true"
:file-list="certobj.certificateUrl"
@on-success="(data,index,lists) => {fielUploadSuc(data,index,lists) }"
@on-remove="(index, lists, name)=>{deleteUpfile(index)}"
@on-error="(data,index, lists)=>{errorUpfile(data,index, lists)}"
>
<view slot="addBtn" class="slot-btn" >
<img v-if="certobj.certificateUrl" :src="certobj.certificateUrl" mode="aspectFill" style="width: 100px;height: 100px;">
<div v-else class="upliacla">
<p style="font-size: 18px;">+</p>
<p>选择图片</p>
</div>
</view>
</u-upload>
<div v-if="certobj.certificateUrl&&istest">
<img v-if="certobj.certificateUrl.length>35" :src="certobj.certificateUrl" style="width: 100px;height: 100px;">
<p class="wuploa" v-else>未上传证书</p>
</div>
</u-form-item>
<view class="sintitle" style="margin-top:15px;margin-left: -20px;">
<img src="/static/index/gzjl.png" alt="">
<p>工作经历
<span style="font-size: 13px;color:#B3B3B3;margin-left: 5px;"> (非必填</span>
</p>
</view>
<u-form-item prop="workExperience" border-bottom='false' >
<view class="sinputrt">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.workExperience" placeholder='输入内容...' type="textarea" auto-height="true"/>
</view>
</u-form-item>-->
</u-form>
<view style="margin-top: 30px;" v-if="testerStatus==3" >
<span ></span>
<span style="color:#fa3534">{{testerdata.auditOpinion?testerdata.auditOpinion:'无'}}</span>
<span>审核未能通过请完善后再提交</span>
</view>
</view>
<view class="bottbtn" v-if="testerStatus==0" @click="resource">确定</view>
<view class="bottbtn" v-if="testerStatus==1" style="background: linear-gradient(90deg, #e8a034,#ff9900)">审核中</view>
<view class="bottbtn" v-if="testerStatus==2" style="background: #909399">已认证</view>
<view class="bottbtn" v-if="testerStatus==3" @click="resource">修改</view>
<view style="height:10px"></view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
cityshow:false,
certobj:{applyId:'',name:'',idNumber:'',city:'',certificateUrl:'',testSkills:'',workExperience:''},
wxUserInfo:null,
action: 'https://www.keyitest.cn/prod-api/upload',
headers:{
// 'TENANT-ID': 3, 'accept': '*/*',
// 'Connection': 'keep-alive','Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryDX4wOxgD9mzUzAIF',
// 'Origin': 'https://www.keyitest.cn', 'Accept-Encoding': 'gzip, deflate, br',
// 'Accept-Language': 'zh,zh-CN;q=0.9', 'Host': 'https://www.keyitest.cn',
// 'Referer':'https://www.keyitest.cn',
Authorization:'Bearer '+uni.getStorageSync('accessToken'),
},
testerStatus:'',
istest:false,
testerdata:null,
certRules: {
name: [{required: true, message: '请输入姓名', trigger: 'blur',},
{max: 20, message: '最多输入20个中文', trigger: 'blur' },
{
pattern:
/^(?:[\u4e00-\u9fa5·]{2,16})$/,
message: "请输入中文",
trigger: "blur",
},],
idNumber: [{ required: true, message: '请输入身份证号', trigger: 'blur'},
{
pattern:
/^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
message: "请输入正确的身份证号码",
trigger: "blur",
},
{max:18, message: '身份证长度为18', trigger: 'blur' },
{min:18, message: '身份证长度为18', trigger: 'blur' },
],
},
}
},
onShow() {
},
onReady(){
this.$refs.certobj.setRules(this.certRules);
},
onLoad() {
// /tester/cert/apply/{userId}
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
let userId=this.wxUserInfo.userId
this.http.quickGet(`/tester/cert/apply/${userId}`,true).then(res=>{
this.testerdata=res.data.data;
if(this.testerdata){
let {applyId,name,idNumber}=this.testerdata;
this.certobj={applyId,name,idNumber}
}
console.log('this.certobj---',this.certobj)
if(this.testerdata){
if(this.testerdata.status==0){
this.testerStatus=1
this.istest=true
this.cityshow=false
}else if(this.testerdata.status==1){
this.testerStatus=2
let setidNumber=this.certobj.idNumber.slice(0,2)+'************'+this.certobj.idNumber.slice(14)
this.certobj.idNumber=setidNumber
this.istest=true
this.cityshow=false
}else if(this.testerdata.status==2){
this.testerStatus=3
}else{
this.testerStatus=0
}
}
})
},
computed: {
},
methods: {
resource(){
this.$refs.certobj.validate(valid => {
if (valid) {
let data={
applyId:this.certobj.applyId,
userId:this.wxUserInfo.userId,
name:this.certobj.name,
idNumber:this.certobj.idNumber,
}
console.log('认证信息',data)
// return;
if(this.testerStatus==0){
// return;/tester/cert/update
this.http.quickPost(`/tester/cert/apply`,data,true).then(res=>{
if(res.data.code==200){
this.$refs.uToast.show({
title: '认证成功',
type: 'success',
})
uni.redirectTo({
url: '/pages/personal/setup/certification' //
});
} else {
this.$refs.uToast.show({
title: res.data.msg,
type: 'error',
isTab:true,
})
}
let userId=this.wxUserInfo.userId
this.http.quickGet(`/tester/cert/apply/${userId}`,true).then(res=>{
this.testerdata=res.data.data;
if(this.testerdata){
let {applyId,name,idNumber}=this.testerdata;
this.certobj={applyId,name,idNumber}
}
console.log('this.certobj---',this.certobj)
if(this.testerdata){
if(this.testerdata.status==0){
this.testerStatus=1
this.istest=true
this.cityshow=false
}else if(this.testerdata.status==1){
this.testerStatus=2
let setidNumber=this.certobj.idNumber.slice(0,2)+'************'+this.certobj.idNumber.slice(14)
this.certobj.idNumber=setidNumber
this.istest=true
this.cityshow=false
}else if(this.testerdata.status==2){
this.testerStatus=3
}else{
this.testerStatus=0
}
}
})
})
}else{
this.http.quickPost(`/tester/cert/update`,data,true).then(res=>{
console.log('更新认证信息',res)
if(res.data.code==200){
this.$refs.uToast.show({
title: '认证成功',
type: 'success',
})
uni.redirectTo({
url: '/pages/personal/setup/certification' //
});
}else{
this.$refs.uToast.show({
title: res.data.msg,
type: 'error',
isTab:true,
})
}
let userId=this.wxUserInfo.userId
this.http.quickGet(`/tester/cert/apply/${userId}`,true).then(res=>{
this.testerdata=res.data.data;
if(this.testerdata){
let {applyId,name,idNumber}=this.testerdata;
this.certobj={applyId,name,idNumber}
}
console.log('this.certobj---',this.certobj)
if(this.testerdata){
if(this.testerdata.status==0){
this.testerStatus=1
this.istest=true
this.cityshow=false
}else if(this.testerdata.status==1){
this.testerStatus=2
let setidNumber=this.certobj.idNumber.slice(0,2)+'************'+this.certobj.idNumber.slice(14)
this.certobj.idNumber=setidNumber
this.istest=true
this.cityshow=false
}else if(this.testerdata.status==2){
this.testerStatus=3
}else{
this.testerStatus=0
}
}
})
})
}
}else{
console.log('验证失败',this.certobj)
}
})
}
}
}
</script>
<style>
page{
background: #FFFFFF!important;
}
.navTab{
padding:13px 20px 13px 20px;
}
.sinput{
display: flex;
align-items: center;
/* height: 50px; */
}
.u-form-left__content__label{
color:#808080!important;
}
.sintitle{
display: flex;
align-items: center;
/* height: 50px; */
background: #F2F4F7;
/* background:#20529c; */
border-radius: 4rpx;
padding:7px 15px;
}
.sintitle img{
width:20px;
height:18px;
margin-right:5px;
}
.sintitle p{
font-size: 15px;
color:#000000;
font-weight: bold;
}
.sinput .u-input{
height:35px;
border-bottom: 1px solid #EBEBEB!important;
}
.sinput p{
color: #808080;
}
.bottbtn{
width:94vw;
margin:30px 3vw 15px 3vw;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:43rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
/* margin-left:13px; */
}
.sinputrt{
display: flex;
/* align-items: center; */
/* height: 50px; */
padding: 10px 0px;
}
.sinputrt .u-input{
/* width:75vw; */
height:100px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px!important;
}
.u-list-item{
margin:0!important;
zIndex:0!important;
}
.slot-btn {
width:200rpx;
height:0rpx;
zIndex:99;
/* display: flex;
justify-content: center;
align-items: center;
background: rgb(244, 245, 246);
border-radius: 10rpx; */
}
.slot-btn__hover {
background-color: rgb(235, 236, 238);
}
.u-form-item{
margin-bottom:-5px;
color: #808080!important;
}
.u-form{
margin-left: 20px;
}
.u-list-item{
margin: 0 !important;
background: transparent!important;
color:transparent!important;
}
.upliacla{
width: 100px;
height: 100px;
/* line-height:100px; */
border-radius: 4px;
background: #f4f5f6;
color:#606266;
display:flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.wuploa{
/* width: 100px;
height: 100px;
line-height: 100px;
font-size: 12px;
border: 1px solid #E6E6E6;
text-align: center;
border-radius: 4px; */
}
</style>

@ -0,0 +1,61 @@
<template>
<view>
<view class="bureau">
<view class="boxx">
<view class="text">
1. PC网址https://keyitest.cn/
</view>
<view class="text">
2. 登陆后找到右上角工作台
</view>
<image src="http://image.keyitest.cn/static/index/renliwb/usePC1.png" mode=""></image>
<view class="text">
3. 找到工作台-工具管理-我的工具
</view>
<image src="http://image.keyitest.cn/static/index/renliwb/usePC2.png" mode=""></image>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
.bureau {
width: 100%;
height: 100vh;
background: #f5f7fa;
padding: 25rpx;
box-sizing: border-box;
}
.boxx {
width: 100%;
height: 100%;
background: #FFFFFF;
border-radius: 10rpx;
padding: 30rpx;
box-sizing: border-box;
}
.text {
font-weight: 500;
font-size: 26rpx;
color: #333333;
margin-bottom: 20rpx;
}
image {
height: 300rpx;
margin-bottom: 20rpx;
}
</style>

@ -0,0 +1,114 @@
<template>
<view>
<view style="background-color:#ffffff;height:96vh;width: 96vw;margin:2vh auto;padding:10px 13px;border-radius: 10rpx;">
<view class="separate" @click="setup('inform')">
<p>个人信息</p>
<img style='width:15rpx;height:25rpx;margin-top:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
<!-- <view class="separate" @click="setup('setpass')">
<p>设置密码</p>
<img style='width:15rpx;height:25rpx;margin-top:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view> -->
<!-- <view class="separate" @click="setup('certif')">
<p>实名认证</p>
<img style='width:15rpx;height:25rpx;margin-top:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view> -->
<!-- <view class="separate" @click="setup('pc')">
<p>PC网页版</p>
<img style='width:15rpx;height:25rpx;margin-top:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view> -->
<view class="separate" @click="setup('about')">
<p>关于我们</p>
<img style='width:15rpx;height:25rpx;margin-top:5px;' src="http://image.keyitest.cn/static/index/xia.png" alt="">
</view>
<view class="logoutbtn" @click="logout">退出登录</view>
</view>
<u-modal title='温馨提示' v-model="logshow" content="确定退出登录?" confirm-text='确定' cancel-text='取消' showCancelButton='true'
cancel-color='#1578ED' confirm-color='#1578ED' @confirm="logconfirm" cancel='logcancel'></u-modal>
</view>
</template>
<script>
export default {
data() {
return {
logshow:false
}
},
methods: {
logout(){
this.logshow=true
},
logconfirm(){
this.logshow=false
uni.setStorageSync('accessToken', null)
uni.setStorageSync('wxUserInfo', null)
uni.setStorageSync('register', null)
uni.setStorageSync('testerStatus', null)
uni.setStorageSync('avatar', null)
uni.setStorageSync('nickName', null)
let Token = uni.getStorageSync('accessToken');
if(!Token){
setTimeout(()=>{
uni.switchTab({
url:'/pages/personal/personal'
})
},1000)
}
},
logcancel(){
this.logshow=false
},
setup(type){
if(type=='certif'){
uni.navigateTo({
url:'/pages/personal/setup/certification'
})
}else if(type=='about'){
uni.navigateTo({
url:'/pages/personal/setup/aboutus'
})
}else if(type=='inform'){
uni.navigateTo({
url:'/pages/personal/setup/Information'
})
}else if(type=='pc'){
uni.navigateTo({
url:'/pages/personal/setup/pcweb'
})
}else if(type=='setpass'){
uni.navigateTo({
url:'/pages/personal/setup/pclogin'
})
}
}
}
}
</script>
<style>
.separate{
color: #333333;
font-weight: bold;
width:100%;
height:50px;
display: flex;
font-size: 15px;
justify-content: space-between;
border-bottom:1px solid rgba(153, 153, 153, 0.15);
/* opacity: 0.15; */
align-items: center;
}
.logoutbtn{
width:100%;
height:50px;
background: #F2F4F7;
border-radius: 10rpx;
font-size:16px;
color: #4D4D4D;
line-height: 50px;
margin-top:30px ;
text-align: center;
}
</style>

@ -0,0 +1,126 @@
<template>
<view class="peixunbanpage">
<view class="pxitembox" v-for="it in reviewList" :key="it.comment_id">
<view class="pxitemboxt">
<view class="pxitemboxtl">
<image class="pxitemboxtlimg" src="../../../static/crowd/defaultAva.jpg" mode=""></image>
<!-- {来自{{it.from_city}}的伙伴} -->
{{it.user_name}}
</view>
<view class="pxitemboxtr">
{{dateFormat(new Date(it.create_time)) }}
</view>
</view>
<view class="pxitemboxc">
<view class="ratebox">
<u-rate v-model="it.star" :current="2" :disabled="true" active-color="#fa9c22" inactive-color="#CDCECE"></u-rate>
</view>
<view class="pxitemboxcremark">
{{it.content}}
</view>
<view class="pxitemboxctask" @click="goTaskDetail">
{{it.project_name}}
</view>
</view>
</view>
</view>
</template>
<script>
import { dateFormat} from '@/utils/util.js'
export default {
data() {
return {
reviewList: []
}
},
onLoad() {
this.getList()
},
methods: {
dateFormat,
getList() {
const phoneuserinfo = uni.getStorageSync('wxUserInfo');
const userId = phoneuserinfo.userId
this.http.quickGet(`/comment/myComment/${userId}`, true).then(res=>{
this.reviewList=res.data.rows
})
},
//
goTaskDetail() {
}
}
}
</script>
<style lang="scss" scoped>
.peixunbanpage {
width: 100vw;
height: 100%;
background: #f5f7fa;
padding: 25rpx 25rpx 0 25rpx;
box-sizing: border-box;
.pxitembox {
width: 100%;
background: #FFFFFF;
border-radius: 10rpx;
.pxitemboxt {
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid rgba(153, 153, 153, 0.2);
padding: 0 25rpx;
box-sizing: border-box;
}
.pxitemboxtl {
height: 89rpx;
display: flex;
align-items: center;
font-weight: 500;
font-size: 28rpx;
color: #1A1A1A;
.pxitemboxtlimg {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
margin-right: 10rpx;
}
}
.pxitemboxtr {
font-weight: 500;
font-size: 22rpx;
color: #808080;
}
.pxitemboxc {
width: 100%;
padding: 25rpx;
box-sizing: border-box;
.ratebox {
margin-bottom: 20rpx;
}
.ratebox ::v-deep .u-icon {
font-size: 20px !important;
}
.pxitemboxcremark {
font-weight: 500;
font-size: 22rpx;
color: #333333;
}
.pxitemboxctask {
margin-top: 20rpx;
font-weight: 500;
font-size: 22rpx;
color: #2084F9;
}
}
}
}
</style>

@ -0,0 +1,442 @@
<template>
<view style="">
<view class="navTab">
<view class="sintitle">
<img src="/static/index/grxx.png" alt="">
<p>认证信息</p>
</view>
<u-form :model="certobj" ref="certobj" label-position='left' label-width='150' border-bottom='false' >
<u-form-item label="姓名:" prop="name" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.name" placeholder='输入姓名'/>
</view>
</u-form-item>
<u-form-item label="身份证号:" prop="idNumber" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.idNumber" placeholder='输入身份证号' />
</view>
</u-form-item>
<u-form-item label="所在城市:" prop="city" border-bottom='false' required='true'>
<view v-if="!istest" class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.city" placeholder='输入所在城市' />
</view>
<view v-else class="sinput">
<u-input style="width:100%;" v-model="certobj.city" type="select" @click="cityshow = true" placeholder='输入所在城市' />
<u-select v-model="cityshow" :list="cityList" @confirm="citychange" mode="mutil-column-auto" ></u-select>
</view>
<!-- -->
</u-form-item>
<u-form-item label="个人技能:" prop="testSkills" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.testSkills" placeholder='输入个人技能'/>
</view>
</u-form-item>
<view class="sintitle" style="margin-top:15px;margin-left: -20px;">
<img src="/static/index/jnzs.png" alt="">
<p style="color:#fa3534;margin-right:3px">* </p>
<p>技能证书</p>
</view>
<u-form-item prop="certificateUrl" border-bottom='false' >
<u-upload width='100px' height='100px'
:action="action"
:disabled='istest'
:header="headers"
:auto-upload="true"
:show-progress="false"
max-count="1"
:deletable="true"
:file-list="certobj.certificateUrl"
@on-success="(data,index,lists) => {fielUploadSuc(data,index,lists) }"
@on-remove="(index, lists, name)=>{deleteUpfile(index)}"
@on-error="(data,index, lists)=>{errorUpfile(data,index, lists)}"
>
<view slot="addBtn" class="slot-btn" >
<img v-if="certobj.certificateUrl" :src="certobj.certificateUrl" mode="aspectFill" style="width: 100px;height: 100px;">
<div v-else class="upliacla">
<p style="font-size: 18px;">+</p>
<p>选择图片</p>
<!-- <u-icon name="arrow-upward" color="#606266" size="38"></u-icon> -->
</div>
</view>
</u-upload>
<div v-if="certobj.certificateUrl&&istest">
<img v-if="certobj.certificateUrl.length>35" :src="certobj.certificateUrl" style="width: 100px;height: 100px;">
<p class="wuploa" v-else>未上传证书</p>
</div>
</u-form-item>
<view class="sintitle" style="margin-top:15px;margin-left: -20px;">
<img src="/static/index/gzjl.png" alt="">
<p>工作经历
<span style="font-size: 13px;color:#B3B3B3;margin-left: 5px;"> (非必填</span>
</p>
</view>
<u-form-item prop="workExperience" border-bottom='false' >
<!-- <p style="margin-right:10px;">工作经历</p> -->
<view class="sinputrt">
<u-input style="width:100%;" :disabled='istest' v-model="certobj.workExperience" placeholder='输入内容...' type="textarea" auto-height="true"/>
</view>
</u-form-item>
</u-form>
<view v-if="testerStatus==3" >
<span ></span>
<span style="color:#fa3534">{{testerdata.auditOpinion?testerdata.auditOpinion:'无'}}</span>
<span>审核未能通过请完善后再提交</span>
</view>
</view>
<view class="bottbtn" v-if="testerStatus==0" @click="resource">确定</view>
<view class="bottbtn" v-if="testerStatus==1" style="background: linear-gradient(90deg, #e8a034,#ff9900)">审核中</view>
<view class="bottbtn" v-if="testerStatus==2" style="background: #909399">已认证</view>
<view class="bottbtn" v-if="testerStatus==3" @click="resource">修改</view>
<view style="height:10px"></view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
cityshow:false,
certobj:{applyId:'',name:'',idNumber:'',city:'',certificateUrl:'',testSkills:'',workExperience:''},
wxUserInfo:null,
action: 'https://www.keyitest.cn/prod-api/upload',
headers:{
// 'TENANT-ID': 3, 'accept': '*/*',
// 'Connection': 'keep-alive','Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryDX4wOxgD9mzUzAIF',
// 'Origin': 'https://www.keyitest.cn', 'Accept-Encoding': 'gzip, deflate, br',
// 'Accept-Language': 'zh,zh-CN;q=0.9', 'Host': 'https://www.keyitest.cn',
// 'Referer':'https://www.keyitest.cn',
Authorization:'Bearer '+uni.getStorageSync('accessToken'),
},
testerStatus:'',
istest:false,
testerdata:null,
certRules: {
name: [{required: true, message: '请输入姓名', trigger: 'change',},
{max: 4, message: '最多输入4个中文', trigger: 'change' },
{
pattern:
/^(?:[\u4e00-\u9fa5·]{2,16})$/,
message: "请输入中文",
trigger: "blur",
},],
idNumber: [{ required: true, message: '请输入身份证号', trigger: 'change'},
{
pattern:
/^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
message: "请输入正确的身份证号码",
trigger: "blur",
},
{max:18, message: '身份证长度为18', trigger: 'change' },
{min:18, message: '身份证长度为18', trigger: 'change' },
],
city: [{ required: true, message: '请输入所在城市', trigger: 'change',}],
testSkills: [{ required: true, message: '请输入个人技能', trigger: 'change',}],
},
cityList:[],
}
},
onShow() {
this.http.quickGet(`/common/city`,).then(res=>{
// console.log('---',res)
this.cityList=res.data
})
},
onReady(){
this.$refs.certobj.setRules(this.certRules);
},
onLoad() {
// /tester/cert/apply/{userId}
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
let userId=this.wxUserInfo.userId
this.http.quickGet(`/tester/cert/apply/${userId}`,true).then(res=>{
console.log('实名认证信息---',res)
this.testerdata=res.data.data;
if(this.testerdata){
let {applyId,name,idNumber,city,certificateUrl,testSkills,workExperience}=this.testerdata;
// let setavater=[]
// setavater[0]={url:certificateUrl}
this.certobj={applyId,name,idNumber,city,certificateUrl,testSkills,workExperience}
}
console.log('this.certobj---',this.certobj)
if(this.testerdata){
if(this.testerdata.status==0){
this.testerStatus=1
this.istest=true
this.cityshow=false
}else if(this.testerdata.status==1){
this.testerStatus=2
this.istest=true
this.cityshow=false
}else if(this.testerdata.status==2){
this.testerStatus=3
}else{
this.testerStatus=0
}
}
})
// this.testerStatus=uni.getStorageSync('testerStatus');
// if(this.testerStatus==0){
// }else if(this.testerStatus==1){
// this.istest=true
// }else if(this.testerStatus==2){
// this.istest=true
// }else if(this.testerStatus==3){
// }
},
computed: {
// headers() {
// return { Authorization: "Bearer " + this.token };
// },
},
methods: {
citychange(e){
console.log('城市回显',e,this.cityshow)
this.certobj.city=e[0].label+'-'+e[1].label
},
idnchange(e){
console.log('身份证号',e,)
if(!this.certobj.name){
uni.showToast({ title:'请输入姓名', icon: 'none', duration: 2000 });
return;
}
},
//
fielUploadSuc(data,index) {
console.log('-',data,'*',index)
if (data.code === 200) {
this.certobj.certificateUrl=data.filePath
console.log('技能认证',this.certobj.certificateUrl)
}
},
//
deleteUpfile(index,lists){
console.log('del技能认证',this.certobj.certificateUrl)
this.certobj.certificateUrl=''
// if(this.credentialImgList.length>0){
// let id=this.credentialImgList[0].id;
// this.http.quickDelete(`/equestrianinfo/file/${id}`).then(()=>{})
// }
},
errorUpfile(data,index){
// console.log('-',data,'*',index)
// this.$refs.uToast.show({
// title: '',
// type: 'error',
// })
},
resource(){
console.log('certobj',this.certobj)
this.$refs.certobj.validate(valid => {
if (valid) {
// if(!this.certobj.certificateUrl){
// this.$refs.uToast.show({
// title: '',
// type: 'warning',
// })
// return;
// }
let certificateUrl='';
if(this.certobj.certificateUrl.indexOf('https')==0){
certificateUrl=this.certobj.certificateUrl
}else{
certificateUrl='https://www.keyitest.cn/prod-api'+this.certobj.certificateUrl
}
let iddata={
userId:this.wxUserInfo.userId,
name:this.certobj.name,
idNumber:this.certobj.idNumber,
}
this.http.quickPost(`/tester/cert/apply`,iddata,true).then(res=>{
console.log('姓名与身份证验证成功',res)
// if (res.code == 200) {
// console.log('',res)
// }else{
// uni.showToast({ title:'', icon: 'none', duration: 2000 });
// }
})
let data={
applyId:this.certobj.applyId,
userId:this.wxUserInfo.userId,
name:this.certobj.name,
idNumber:this.certobj.idNumber,
city:this.certobj.city,
certificateUrl,
testSkills:this.certobj.testSkills,
workExperience:this.certobj.workExperience,
}
console.log('认证信息',data)
// return;
if(this.testerStatus==0){
// return;/tester/cert/update
this.http.quickPost(`/tester/cert/apply`,data,true).then(res=>{
if(res.data.code==200){
this.$refs.uToast.show({
title: '认证成功',
type: 'success',
isTab:true,
url:'pages/personal/personal'
})
uni.setStorageSync('testerStatus', 1)
}
})
}else{
this.http.quickPost(`/tester/cert/update`,data,true).then(res=>{
if(res.data.code==200){
this.$refs.uToast.show({
title: '认证修改成功',
type: 'success',
isTab:true,
url:'pages/personal/personal'
})
uni.setStorageSync('testerStatus', 1)
}
})
}
}else{
console.log('验证失败',this.certobj)
}
})
}
}
}
</script>
<style>
page{
background: #FFFFFF!important;
}
.navTab{
padding:13px 20px 13px 20px;
}
.sinput{
display: flex;
align-items: center;
/* height: 50px; */
}
.u-form-left__content__label{
color:#808080!important;
}
.sintitle{
display: flex;
align-items: center;
/* height: 50px; */
background: #F2F4F7;
/* background:#20529c; */
border-radius: 4rpx;
padding:7px 15px;
}
.sintitle img{
width:20px;
height:18px;
margin-right:5px;
}
.sintitle p{
font-size: 15px;
color:#000000;
font-weight: bold;
}
.sinput .u-input{
height:35px;
border-bottom: 1px solid #EBEBEB!important;
}
.sinput p{
color: #808080;
}
.bottbtn{
width:94vw;
margin:30px 3vw 15px 3vw;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:43rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
/* margin-left:13px; */
}
.sinputrt{
display: flex;
/* align-items: center; */
/* height: 50px; */
padding: 10px 0px;
}
.sinputrt .u-input{
/* width:75vw; */
height:100px;
border: 1px solid #E6E6E6;
background: #FFFFFF;
border-radius: 10rpx 10rpx 0rpx 0rpx;
padding-left: 10px!important;
}
.u-list-item{
margin:0!important;
zIndex:0!important;
}
.slot-btn {
width:200rpx;
height:0rpx;
zIndex:99;
/* display: flex;
justify-content: center;
align-items: center;
background: rgb(244, 245, 246);
border-radius: 10rpx; */
}
.slot-btn__hover {
background-color: rgb(235, 236, 238);
}
.u-form-item{
margin-bottom:-5px;
color: #808080!important;
}
.u-form{
margin-left: 20px;
}
.u-list-item{
margin: 0 !important;
background: transparent!important;
color:transparent!important;
}
.upliacla{
width: 100px;
height: 100px;
/* line-height:100px; */
border-radius: 4px;
background: #f4f5f6;
color:#606266;
display:flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.wuploa{
/* width: 100px;
height: 100px;
line-height: 100px;
font-size: 12px;
border: 1px solid #E6E6E6;
text-align: center;
border-radius: 4px; */
}
</style>

@ -0,0 +1,161 @@
<template>
<view>
<div class="accounmt">
<!-- <p style="font-size:23px;color:#333333;margin-top:0">设置密码</p> -->
<!-- <div class="linex"></div> -->
<!-- <p style="color:#A6A6A6;font-size:14px">*请您记住用户名网页登录需使用</p> -->
<!-- <p style="color:#A6A6A6;font-size:12px;margin:5px 0">*密码必须为 6-16 字母数字或字符的组合</p>
<p style="color:#A6A6A6;font-size:12px;margin-bottom: 30px;">
<span>*如果您收不到手机验证码请先去</span>
<span style="color:#1989fa">个人信息</span>
<span>页面验证工作手机</span>
</p> -->
<view style="padding: 0 10px;">
<u-form :model="userinform" ref="userinform" label-position='left' label-width='200' border-bottom='false' >
<u-form-item label="用户名" prop="name" border-bottom='false' required='true'>
<view class="sinput">
<span v-if="wxUserInfo.userName">{{wxUserInfo.userName}}</span>
</view>
</u-form-item>
<u-form-item label="登录密码" prop="password" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" type="password" password-icon="true" v-model="userinform.password" placeholder='输入登录密码' />
</view>
</u-form-item>
<u-form-item label="确认密码" prop="newpassword" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" type="password" password-icon="true" v-model="userinform.newpassword" placeholder='输入确认密码' />
</view>
</u-form-item>
</u-form>
</view>
<button class="button-g" @click="submit">保存</button>
<u-toast ref="uToast" />
</div>
</view>
</template>
<script>
import { encrypt, decrypt } from '../../../utils/encrypt.js'
export default {
data() {
const validatePass = (rule, value, callback) => {
if (value === '') {
return callback(new Error('请输入密码'));
}
if(!/^[a-z0-9][a-z0-9A-Z@#%^.*!~?|]{5,11}$/i.test(value)){
return callback(new Error('密码格式错误'));
}
// if (this.getpasswordForm.repassword !== '') {
// this.$refs.getpasswordForm.validateField('repassword')
// }
return callback();
};
//
const validatePass2 = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入确认密码'));
} else if (value !== this.userinform.password) {
callback(new Error('两次输入密码不一致!'));
} else {
callback();
}
};
return {
wxUserInfo:null,
userinform:{password:'',userName:'',userId:'',newpassword:''},
passRules: {
password: [{ required: true, validator:validatePass, trigger: 'blur' },
{ min: 6, message: '密码长度最少为6位', trigger: 'blur' }],
newpassword: [{ required: true, validator:validatePass2, trigger: 'blur' },
{ min: 6, message: '密码长度最少为6位', trigger: 'blur' }],
},
}
},
mounted() {
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
},
onReady(){
this.$refs.userinform.setRules(this.passRules);
},
methods: {
submit(){
this.$refs.userinform.validate(valid => {
if (valid) {
let data={
userId:this.wxUserInfo.userId,
userName:this.wxUserInfo.userName,
// password:this.userinform.password,
password:encrypt(this.userinform.password),
}
console.log('data---',data)
// return;
this.http.quickPost(`/system/user/setPasswd`,data,true).then(res=>{
console.log('设置密码成功',res.data)
if(res.data.code==200){
this.$refs.uToast.show({
title: '设置成功',
type: 'success',
isTab:true,
url:'pages/personal/personal'
})
}else {
this.$refs.uToast.show({
title: '设置失败',
type: 'error',
})
}
})
}
})
}
}
}
</script>
<style>
.accounmt{
background-color: #ffffff;
/* height: 96vh; */
width: 96vw;
margin: 2vh auto;
padding: 10px 15px 30px 25px;
border-radius: 5px;
}
.linex{
height:1rpx;
width:100%;
background:#EBEBEB;
margin: 20px 0 10px 0;
}
.sinput{
display: flex;
align-items: center;
/* height: 50px; */
}
.sinput .u-input{
/* height:35px; */
border-bottom: 1px solid #EBEBEB!important;
}
.sinput .u-field{
height:45px;
border-bottom: 1px solid #EBEBEB!important;
margin-bottom:10px;
}
.button-g{
/* width:90vw; */
height:80rpx;
background-color:#197BEF;
border-radius:25px;
text-align: center;
line-height:80rpx;
color: #FFFFFF;
font-size:36rpx;
margin-top:15px;
}
</style>

@ -0,0 +1,46 @@
<template>
<view class="bureau">
<view style="display:flex;" >
<img src="/static/index/logo.png" alt="">
<view>
<p style="margin:7px 0 3px 0;font-size:1.2rem;color:#333333;">关键测试宝</p>
<p style="letter-spacing: 0.2rem;color: #808080;">专业软件测试云平台</p>
</view>
</view>
<view style="display:flex;justify-content: space-between;margin:30px 0 0px 0;">
<p>网站https://keyitest.cn</p>
<u-link href="https://keyitest.cn">复制</u-link>
</view>
<!-- <view style="display:flex;justify-content: space-between;">
<p>备用网站https://keyitest.cn</p>
<u-link href="https://keyitest.cn">复制</u-link>
</view> -->
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
.bureau{
background-color: #FFFFFF;
padding:3vh 8vw 8vh 8vw;
}
.bureau img{
width:70px;
height:60px;
margin-right: 15px;
}
</style>

@ -0,0 +1,113 @@
<template>
<view class="navTab">
<!-- <u-search v-model='keyware' placeholder='输入搜索内容' :actionStyle="customActionStyle"
showAction="true" actionText="搜索" :animation="false" @custom='seacrhko'></u-search> -->
<view v-if="signuplist.length>0">
<view v-for="(item,key) of signuplist" class="sign_list">
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb">
{{item.trainClassName}}
</view>
<p v-if="item.registrationTime" style="font-size:24rpx;color: #808080;">报名时间{{ dateFormat(new Date(item.registrationTime))}} </p>
</view>
<view class="fline"></view>
<view style="display: flex;justify-content: space-between;margin: 19px 15px 0 15px;align-items: center;">
<view style="color:#333333FF;font-size:13px;line-height:27px;">
<p>班级名称{{item.trainClassName}}</p>
<!-- start_time -->
<p v-if="item.trainStartTime" >开课时间{{item.trainStartTime.slice(0,4)}}{{item.trainStartTime.slice(5,7)}}{{item.trainStartTime.slice(8,10)}}</p>
</view>
<div v-if="item.status==1" class="sign_sataus" >未开始 </div>
<div v-if="item.status==2" class="sign_sataus" > 报名中 </div>
<div v-if="item.status==3" class="sign_sataus" style="background: #FBA02A;"> 未开课 </div>
<div v-if="item.status==4" class="sign_sataus" style="background: #28D17CFF;"> 开课中 </div>
<div v-if="item.status==5" class="sign_sataus" style="background: #FE5555FF;"> 已结束 </div>
</view>
</view>
</view>
<view v-else style="font-size:46rpx;
font-weight: bold;
color: #9D9D9D; text-align:center;margin-top:100px">暂无报名信息</view>
<view style="height:10px;"></view>
</view>
</template>
<script>
import { dateFormat} from '@/utils/util.js'
export default {
data() {
return {
keyware:'',
customActionStyle: {
color: '#808080', //
fontSize: '16px' //
//
},
signuplist:[],
}
},
onLoad() {
let wxUserInfo=uni.getStorageSync('wxUserInfo');
// ${wxUserInfo.phonenumber}
if(wxUserInfo){
// let phone='15802995503';
this.http.quickGet(`/train/myTrainingList`, true).then(res=>{
console.log('报名信息--',res)
this.signuplist=res.data.rows
})
}
},
methods: {
dateFormat,
seacrhko(){
},
signupdetails(id){
uni.navigateTo({
url:`/pages/index/testtraining/signup?issueId=${id}&type=1`
})
},
}
}
</script>
<style>
.navTab{
padding:2vh 13px ;
}
.sign_list{
width: 100%;
background: #FFFFFF;
border-radius: 10px;
margin-bottom:20px;
padding-bottom:15px;
}
.rightb{
/* width: 183rpx; */
padding: 0 20rpx;
height: 54rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 9px 0px 46px 0px;
color: #FFFFFF;
font-size:.8rem;
line-height: 54rpx;
text-align: center;
}
.fline{
width: 100%;
height: 1rpx;
border: 1px solid #999999;
opacity: 0.15;
}
.sign_sataus{
width: 75px;
height: 28px;
background: #A8AEB6;
border-radius: 13px;
font-size: 14px;
color: #FFFFFF;
line-height:28px;
text-align: center;
}
</style>

@ -0,0 +1,213 @@
<template>
<view>
<div class="accounmt">
<p style="font-size:23px;color:#333333;margin-top:0">设置交易密码</p>
<div class="linex"></div>
<p style="color:#A6A6A6;font-size:12px">*请确保交易密码与登录密码不同!</p>
<p style="color:#A6A6A6;font-size:12px;margin:5px 0">*密码必须为 6-16 字母数字或字符的组合</p>
<p style="color:#A6A6A6;font-size:12px;margin-bottom: 30px;">
<span>*如果您收不到手机验证码请先去</span>
<span style="color:#1989fa">个人信息</span>
<span>页面验证工作手机</span>
</p>
<view style="padding: 0 10px;">
<u-form :model="transactionform" ref="transactionform" label-position='left' label-width='200' border-bottom='false' >
<u-form-item label="手机号码" prop="name" border-bottom='false' required='true'>
<view class="sinput">
<span v-if="wxUserInfo.phonenumber">+86 {{wxUserInfo.phonenumber}}</span>
</view>
</u-form-item>
<u-form-item label="交易密码" prop="password" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" type="password" password-icon="true" v-model="transactionform.password" placeholder='输入交易密码' />
</view>
</u-form-item>
<u-form-item label="确认交易密码" prop="newpassword" border-bottom='false' required='true'>
<view class="sinput">
<u-input style="width:100%;" type="password" password-icon="true" v-model="transactionform.newpassword" placeholder='输入确认交易密码' />
</view>
</u-form-item>
<u-form-item label="短信验证码" border-bottom='false' required='true'>
<view class="sinput">
<u-field v-model="transactionform.code" :clearable='isclear' label-width='0' placeholder-style="font-size:14px'color:#c0c4cc" placeholder='请输入验证码'>
<p slot="right" @click="getCode">{{codeText}}</p>
</u-field>
<u-verification-code ref="uCode" @change="codeChange"></u-verification-code>
</view>
</u-form-item>
</u-form>
</view>
<button class="button-g" @click="submit">确认</button>
<u-toast ref="uToast" />
</div>
</view>
</template>
<script>
import { encrypt, decrypt } from '../../../utils/encrypt.js'
export default {
data() {
const validatePass = (rule, value, callback) => {
if (value === '') {
return callback(new Error('请输入密码'));
}
if(!/^[a-z0-9][a-z0-9A-Z@#%^.*!~?|]{5,11}$/i.test(value)){
return callback(new Error('密码格式错误'));
}
// if (this.getpasswordForm.repassword !== '') {
// this.$refs.getpasswordForm.validateField('repassword')
// }
return callback();
};
//
const validatePass2 = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'));
} else if (value !== this.transactionform.password) {
callback(new Error('两次输入密码不一致!'));
} else {
callback();
}
};
return {
wxUserInfo:null,
transactionform:{password:'',newpassword:'',code:'',uuid:'',},
cleart:false,
codeText: '获取验证码',
passRules: {
password: [{ required: true, validator:validatePass, trigger: 'blur' },
{ min: 6, message: '密码长度最少为6位', trigger: 'blur' },{ max: 20, message: '密码长度最长为20位', trigger: 'blur' }],
newpassword: [{ required: true, validator:validatePass2, trigger: 'blur' },
{ min: 6, message: '密码长度最少为6位', trigger: 'blur' },{ max: 20, message: '密码长度最长为20位', trigger: 'blur' }],
},
}
},
mounted() {
this.wxUserInfo = uni.getStorageSync('wxUserInfo');
},
onReady(){
this.$refs.transactionform.setRules(this.passRules);
},
methods: {
isMobile(s) {
return /^1[0-9]{10}$/.test(s)
},
codeChange(text) {
this.codeText = text;
},
//
getCode() {
if(!this.transactionform.newpassword){
uni.showToast({ title: '请输入密码', icon: 'none', duration: 1000 });
}else{
if(this.$refs.uCode.canGetCode) {
let phone = this.wxUserInfo.phonenumber;
if (!phone || !this.isMobile(phone)) {
uni.showToast({ title: '手机格式不对', icon: 'none', duration: 1000 });
return;
}
//
this.http.quickGet('/captchaUserLogin?phoneNumber=' + phone).then((res)=> {
console.log('获取注册验证码',res);
if(res.data.code==200){
this.transactionform.uuid=res.data.uuid;
uni.showToast({title: '发送成功', icon: 'none', duration:1000 });
setTimeout(() => {
uni.hideLoading();
//
this.$refs.uCode.start();
}, 1000);
}else{
uni.showToast({title:res.data.msg, icon: 'none', duration:1000 });
}
}).catch((err) => {
console.log('err',err);
});
}else {
this.$u.toast('倒计时结束后再发送');
}
}
},
submit(){
this.$refs.transactionform.validate(valid => {
if (valid) {
if(!this.transactionform.code){
uni.showToast({ title: '请输入验证码', icon: 'none', duration:1000 });
}else{
let data={
// password:this.transactionform.password,
password: encrypt(this.transactionform.password),
code:this.transactionform.code,
uuid:this.transactionform.uuid,
}
console.log('交易密码',data)
// return;
this.http.quickPost(`/mpay/setpasswd/${this.wxUserInfo.userId}`,data,true).then(res=>{
console.log('设置密码成功',res.data)
if(res.data.code==200){
this.$refs.uToast.show({
title: '设置成功',
type: 'success',
isTab:true,
url:'pages/personal/personal'
})
}else{
uni.showToast({ title: '验证码无效', icon: 'none', duration:1000 });
}
})
}
}
})
}
}
}
</script>
<style>
.accounmt{
background-color: #ffffff;
/* height: 96vh; */
width: 96vw;
margin: 2vh auto;
padding: 10px 15px 30px 25px;
border-radius: 5px;
}
.linex{
height:1rpx;
width:100%;
background:#EBEBEB;
margin: 20px 0;
}
.sinput{
display: flex;
align-items: center;
/* height: 50px; */
}
.sinput .u-input{
/* height:35px; */
border-bottom: 1px solid #EBEBEB!important;
}
.sinput .u-field{
height:45px;
border-bottom: 1px solid #EBEBEB!important;
margin-bottom:10px;
padding: 20rpx 28rpx 20rpx 0rpx!important;
margin-left:-5px
}
.button-g{
/* width:90vw; */
height:80rpx;
background-color:#197BEF;
border-radius:25px;
text-align: center;
line-height:80rpx;
color: #FFFFFF;
font-size:36rpx;
margin-top:15px;
}
</style>

@ -0,0 +1,168 @@
<template>
<view>
<u-tabs-swiper ref="tabs" :list="scationlist" :is-scroll="false" @change="tabsChange" :current="current" bg-color='#FFFFFF'
active-color="#1578ED" inactive-color='#666666' bar-width='180'>
</u-tabs-swiper>
<view style='padding: 2vh 13px'>
<view v-if="currenttranslist&&currenttranslist.length>0">
<view v-if="current==0">
<view v-for="(item,key) of currenttranslist" class="sign_list">
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb" style="background: linear-gradient(90deg, #FFDC00, #ED9706);"> 充值 </view>
<!-- <p style="color:#FD461A;">赏金金额{{item.price}} </p> -->
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>交易名称{{item.recordName}}</p>
<p>交易金额{{item.recordAmount}}</p>
<p>交易状态
<span v-if="item.recordStatus==0">处理中</span>
<span v-if="item.recordStatus==1">已完成</span>
<span v-if="item.recordStatus==2">已取消</span>
<span v-if="item.recordStatus==3">已失败</span>
</p>
<p>交易时间{{item.recordTime.slice(0,10)}}</p>
</view>
</view>
</view>
<view v-if="current==1">
<view v-for="(item,key) of currenttranslist" class="sign_list">
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb" style="background: linear-gradient(90deg, #5EA6FD, #1A81F9)"> 提现 </view>
<!-- <p style="color:#FD461A;">赏金金额{{item.price}} </p> -->
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>交易名称{{item.recordName}}</p>
<p>交易金额{{item.recordAmount}}</p>
<p>交易状态
<span v-if="item.recordStatus==0">处理中</span>
<span v-if="item.recordStatus==1">已完成</span>
<span v-if="item.recordStatus==2">已取消</span>
<span v-if="item.recordStatus==3">已失败</span>
</p>
<p>交易时间{{item.recordTime.slice(0,10)}}</p>
</view>
</view>
</view>
<view v-if="current==2">
<view v-for="(item,key) of currenttranslist" class="sign_list">
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb" style="background: linear-gradient(90deg, #FCA141, #FD6940);"> 支出 </view>
<!-- <p style="color:#FD461A;">赏金金额{{item.price}} </p> -->
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>交易名称{{item.recordName}}</p>
<p>交易金额{{item.recordAmount}}</p>
<p>交易状态
<span v-if="item.recordStatus==0">处理中</span>
<span v-if="item.recordStatus==1">已完成</span>
<span v-if="item.recordStatus==2">已取消</span>
<span v-if="item.recordStatus==3">已失败</span>
</p>
<p>交易时间{{item.recordTime.slice(0,10)}}</p>
</view>
</view>
</view>
<view v-if="current==3">
<view v-for="(item,key) of currenttranslist" class="sign_list">
<view style="display:flex;margin:0 12px 8px 0;justify-content: space-between;align-items: flex-end;">
<view class="rightb" style="background: linear-gradient(90deg, #1BF5B3, #08C78F)"> 收入 </view>
<!-- <p style="color:#FD461A;">赏金金额{{item.price}} </p> -->
</view>
<view class="fline"></view>
<view style="margin:12px 15px 0 15px;color:#333333;font-size:13px;line-height:27px;">
<p>交易名称{{item.recordName}}</p>
<p>交易金额{{item.recordAmount}}</p>
<p>交易状态
<span v-if="item.recordStatus==0">处理中</span>
<span v-if="item.recordStatus==1">已完成</span>
<span v-if="item.recordStatus==2">已取消</span>
<span v-if="item.recordStatus==3">已失败</span>
</p>
<p>交易时间{{item.recordTime.slice(0,10)}}</p>
</view>
</view>
</view>
</view>
<view v-if="currenttranslist.length==0" style="font-size:46rpx;
font-weight: bold;
color: #9D9D9D; text-align:center;margin-top:100px">暂无记录</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
scationlist:[{name:'充值记录'},{name:'提现记录'},{name:'支出记录'},{name:'收入记录'}],
alltranslist:[],//
currenttranslist:[],//
current:0
}
},
onLoad() {
let wxUserInfo=uni.getStorageSync('wxUserInfo');
if(wxUserInfo){
this.http.quickGet(`/mpay/my/record/${wxUserInfo.userId}`,true).then(res=>{
console.log('我的交易记录--',res)
// recordType=0,1,2,3
// res.data.rows=[{recordName:'1',recordType:'0',recordAmount:'500.363654',recordStatus:'0',recordTime:'2023.01.60 10:50'},
// {recordName:'1000',recordType:'1',recordAmount:'99900.36',recordStatus:'1',recordTime:'2023.01.60 10:50'},
// {recordName:'1000',recordType:'2',recordAmount:'99900.36',recordStatus:'2',recordTime:'2023.01.60 10:50'},
// {recordName:'1000',recordType:'3',recordAmount:'99900.36',recordStatus:'3',recordTime:'2023.01.60 10:50'},
// ]
this.alltranslist=res.data.rows
this.currenttranslist=this.alltranslist
this.currenttranslist=this.alltranslist.filter(item=>item.recordType==0);
})
}
},
methods: {
tabsChange(e){
this.current=e
if(this.alltranslist.length>0){
this.currenttranslist=this.alltranslist.filter(item=>item.recordType==e);
}
},
// signupdetails(id){
// uni.navigateTo({
// url:`/pages/index/testcrowdsourc/crowdsourcingdetails?id=${id}&type=1`
// })
// },
}
}
</script>
<style>
.navTab{
padding:2vh 13px;
}
.sign_list{
width: 100%;
background: #FFFFFF;
border-radius: 10px;
margin-bottom:20px;
padding-bottom:15px;
}
.rightb{
width: 183rpx;
height: 54rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 9px 0px 46px 0px;
color: #FFFFFF;
font-size:.8rem;
line-height: 54rpx;
text-align: center;
}
.fline{
width: 100%;
height: 1rpx;
border: 1px solid #999999;
opacity: 0.15;
}
</style>

@ -0,0 +1,157 @@
<template>
<view class="peixunbanpage">
<view class="nodata" v-if="!useList.length">
暂无数据
</view>
<view class="boxuser" v-else>
<view class="items" v-for="it in useList">
<view class="toptitle">
<view class="skill">
技能要求{{it.service}}
</view>
<view class="peonum">
{{it.peopleNum}}
</view>
</view>
<view class="bottominfo">
<view class="beizhu">
备注{{it.remark}}
</view>
<view v-if="it.status == 0 " class="btninfo nored">
处理中
</view>
<view v-else class="btninfo yesred">
已处理
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
useList: []
}
},
onLoad() {
this.getList()
},
methods: {
async getList() {
const id = uni.getStorageSync('wxUserInfo').userId
const {
data
} = await this.http.quickGet(`/labor/my/demand/${id}`, true)
console.log(data)
if (data.code == 200) {
this.useList = data.rows
} else {
uni.showToast({
title: '获取数据失败'
})
}
},
gozixun() {
uni.navigateTo({
url: '/pages/index/test'
})
}
}
}
</script>
<style scoped>
.peixunbanpage {
height: 100%;
width: 100%;
background: #f5f7fa;
}
.boxuser {
box-sizing: border-box;
padding: 40rpx;
}
.items {
width: 100%;
min-height: 200rpx;
margin-bottom: 30rpx;
background: #FFFFFF;
border-radius: 10rpx;
box-sizing: border-box;
padding: 10rpx 20rpx;
}
.toptitle {
display: flex;
justify-content: space-between;
align-items: center;
height: 75rpx;
border-bottom: 1px solid rgba(153, 153, 153, 0.2);
}
.skill {
font-weight: 500;
font-size: 28rpx;
color: #1A1A1A;
}
.peonum {
font-weight: 500;
font-size: 28rpx;
color: #1F80F2;
}
.bottominfo {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
}
.nodata {
display: flex;
justify-content: center;
align-items: center;
font-size: 46rpx;
font-weight: bold;
color: #9D9D9D;
text-align: center;
margin-top: 100px
}
.beizhu {
font-weight: 500;
font-size: 22rpx;
color: #808080;
width: 70%;
padding-right: 20rpx;
box-sizing: border-box;
}
.btninfo {
width: 170rpx;
height: 40rpx;
border-radius: 20rpx;
font-weight: 500;
font-size: 24rpx;
color: #FFFFFF;
line-height: 40rpx;
text-align: center;
width: 30%;
}
.nored {
background: #FBA02A;
}
.yesred {
background: #28D17C;
}
</style>

@ -0,0 +1,381 @@
<template>
<view class="navTab">
<p style="font-size: 18px;text-align: center;font-weight: bold;margin-bottom:15px;">关键测试宝用户服务协议</p>
<p>发布日期2024年3月05日</p>
<p style="margin: 10px 0;">生效日期2024年3月05日</p>
<p style='text-indent:30px;font-weight: bold;margin:5px 0;'>
为使用北京关键科技股份有限公司以下简称我方运营的关键测试宝在线网络提供的相关服务以下简称我方平台服务
您应当阅读并遵守用户服务协议以下简称本协议建议您仔细阅读本协议的全部内容尤其是以加粗形式展示的
与您的权益可能存在重大关系的条款包括相关约定免除或者限制责任的条款法律适用和争议解决等条款请您务必审慎阅读
充分理解个条款内容各条款标题仅为帮助您理解该条款表达的主旨之用不影响或限制本协议条款的含义或解释
</p>
<p style='text-indent:30px;font-weight: bold;'>
您点击同意或您使用我方平台服务使用行为指包括但不限于使用浏览注册登录等行为中的一种或多种下同
即表示您已阅读并同意签署本协议所有内容本协议即在您与我方之间产生法律效力成为对双方均具有约束力的法律文件
如您不同意我方不时对本协议的修改或补充内容您应放弃注册停止使用或主动取消本服务
服务协议将帮助您了解以下内容
</p>
<p style='font-weight: bold;margin: 5px 0;'>1. 定义</p>
<p style='text-indent:30px;'>
<span style='font-weight: bold;'>1.1 我方</span>是指北京关键科技股份有限公司及其相关服务可能存在的运营关联单位
但不包括第三方功能及相关服务的实际提供方
</p>
<p style='text-indent:30px;'>
<span style='font-weight: bold;'>1.2 我方平台</span>包括但不限于关键测试宝官方网站www.keyitest.cn关键测试宝小程序
关键测试公众号及/或其他任何由我方直接所有或运营的任何网页平台及软硬件客户端平台适用终端包括但不限于PC平板手机等
</p>
<p style='text-indent:30px;'>
<span style='font-weight: bold;'>1.3 平台规则</span>包括在所有我方平台内已经发布及后续发布的全部规则解读
公告等内容以及各平台在功能模块用户页面帮助中心等发布的各类规则实施细则产品说明等
</p>
<p style='text-indent:30px;'>
<span style='font-weight: bold;'>1.4 用户</span>包括注册用户及未注册用户凡未注册我方平台的用户
自开始使用我方平台服务时即成为我们的未注册用户在使用过程中须遵循本协议中除注册用户专属约定以外的其他所有条款
需要特别提醒您的是由于我方平台服务较多为您提供服务内容也有所不同本协议为统一适用的一般性用户服务条款
针对我们的某些特定服务我们还将制定特定用户服务协议以便更具体地向您阐明该等产品及/或服务的服务内容服务规则等内容
您应在充分阅读并同意特定用户服务协议的全部内容后再使用该特定服务
如您在我们平台上使用第三方提供的服务时除遵守本协议约定外还应遵守第三方的服务条款
</p>
<p style='text-indent:30px;'>
<span style='font-weight: bold;'>1.5 同一用户</span>使用同一身份认证信息或经我方平台排查认定多
个用户账户的实际控制人为同一人的均视为同一用户
</p>
<p style="font-weight: bold;margin: 5px 0;">2. 协议范围</p>
<p style='text-indent:30px;'>
2.1 签约主体本协议由您与我方共同缔结本协议对您与我方均具有合同效力
<span style='font-weight: bold;'>本协议项下我方可能根据我方平台的业务调整而发生变更
变更后的平台经营者与您共同履行本协议并向您提供服务我方的变更不会影响您本协议项下的权益</span>
</p>
<p style='text-indent:30px;'>
2.2 补充协议我方平台规则为本协议的补充协议与本协议不可分割并具有同等法律效力
</p>
<p style="font-weight: bold;margin: 5px 0;">3. 账号注册与使用</p>
<p style='font-weight: bold;text-indent:30px;'>3.1 用户资格</p>
<p style='font-weight: bold;text-indent:30px;'>您确认在您开始使用/注册程序使用我方平台服务前您应当具备中华人民共和国
法律规定的与您行为相适应的民事行为能力</p>
<p style="font-weight: bold;">若您不具备前述与您行为相适应的民事行为能力则应获得监护人的知情同意您及您的监护人应依照法律规定承担
因此而导致的相应的责任特别地如果您是未成年人请在您的监护人的同意和指导下访问和/或使用我方平台</p>
<p style='font-weight: bold;text-indent:30px;'>3.2 账户说明</p>
<p style='text-indent:30px;'>3.2.1账户获得当您按照注册页面提示填写信息阅读并同意本协议且完成全部注册程序后
您可获得我方平台账户关键测试宝账户并成为我方平台用户</p>
<p style='text-indent:30px;'>3.2.2账户使用您有权使用您设置或确认的我方用户名邮箱手机号码以下简称账户名称
及您设置的密码账户名称及密码合称账户登录我方平台由于您的账户关联您的个人信息及我方平台商业信息
您的关键测试宝账户仅限您本人使用未经我方平台同意您直接或间接授权第三方使用您关键测试宝账户行为无效
如我方平台根据平台规则中约定的违约认定程序及标准判断您关键测试宝账户的使用可能危及您的账户安全及/或我方平台信息安全的
我方平台有权对用户行为及应适用的规则进行认定并据此处理暂停或停止提供相应的服务</p>
<p style='text-indent:30px;'>3.2.3账户转让由于用户账户关联用户信息仅当有法律明文规定司法裁定或经我方同意
并符合我方平台规则规定的用户账户转让流程的情况下您才可进行账户的转让您的账户一经转让
该账户项下权利义务一并转移
<span style="font-weight: bold;"> 除此外您的账户不得以任何方式转让否则由此产生的一切责任均由您承担</span>
</p>
<p style='text-indent:30px;'>为使您更好地使用我方平台的各项服务我方建议您按照
我方平台要求及相关法律规定完成实名认证</p>
<p style='text-indent:30px;'>3.2.4实名认证如您已存在关键测试宝用户但尚未进行实名认证如未提供手机号请您尽快绑定个人手机号
如您不进行实名认证则我方平台保留停止该账号在我方平台使用的权利如果不进行实名认证
您仍可浏览我方平台的相关内容但您将无法享有培训报名考试报名竞标任务等功能可能会影响您的部分用户权益的使用体验</p>
<p style='text-indent:30px;'>3.2.5不活跃账户回收
<span style="font-weight: bold;">
如您的账户长期未登录或符合如下条件我方有权予以注销清理并删除个人信息您的账户将不能再登录任一我方平台
相应服务同时终止我方在对此类账户进行清理前将以包括但不限于网站公告站内消息客户端推送信息等方式通知您</span></p>
<p style="font-weight: bold;">3.3 注册信息管理</p>
<p style='font-weight: bold;text-indent:30px;'>3.3.1 真实合法</p>
<p style='text-indent:30px;'>信息真实在使用我方平台服务时您应当按我方平台页面的提示准确完整地提供您的信息
包括但不限于您的联系电话等以便我方在必要时与您联系
<span style="font-weight: bold;">您了解并同意您有义务保持您提供信息的真实性及有效性</span>
</p>
<p style='text-indent:30px;'>用户名昵称简介头像的合法性
<span style="font-weight: bold;">您所设置的账户名昵称头像图片不得违反国家法律法规及我方平台规则关于账户名的管理规定
否则我方可对您的账户名进行暂停使用或注销等处理并向主管机关报告</span>
</p>
<p style='font-weight: bold;text-indent:30px;'>您理解并承诺您的账户名称昵称头像和简介等注册信息中不得出现违法和不良信息没有冒用关联机构或社会名人
您在账户注册过程中需遵守法律法规社会主义制度国家利益公民合法权益公共秩序社会道德风尚和信息真实性等七条底线</p>
<p style='text-indent:30px;'>实名认证查询
<span style="font-weight: bold;">您同意并授权为了更好的为您提供服务以及确保您的账户安全我方可以根据您提供的手机号码身份证号码等信息向全国公民身份号码查询服务中心电信运营商
金融服务机构等可靠单位发起用户身份真实性用户征信记录用户手机号码有效性状态等情况的查询</span>
</p>
<p style='font-weight: bold;text-indent:30px;'>3.3.2 更新维护</p>
<p style='text-indent:30px;'>您应当及时更新您提供的信息在法律有明确规定要求我方对部分用户的信息进行核实的情况下
我方将依法不时地对您的信息进行检查核实您应当配合提供最新真实完整的信息</p>
<p style="font-weight: bold;text-indent:30px;">如我方按您最后一次提供的信息与您联系未果您未按照我方的要求及时提供信息您提供的信息存在明显不实的您将承担因此对您自身
他人及我方造成的全部损失与不利后果我方平台在法律有明确规定的情况下承担相应的责任</p>
<p style="font-weight: bold;">3.4 账户安全规范</p>
<p style='text-indent:30px;'>账户安全保管义务您的账户为您自行设置并由您保管
我方平台任何时候均不会主动要求您提供您的账户密码建议您务必保管好您的账户
<span style="font-weight: bold;">并确保您在每个上网时段结束时退出登录并以正确步骤离开我方平台</span>
</p>
<p style='font-weight: bold;text-indent:30px;'>账户行为责任自负账户因您主动泄露或遭受他人攻击诈骗等行为导致的损失及后果
依据法律规定双方各自承担风险及责任我方平台在法律有明确规定的情况下承担相应的责任</p>
<p style='font-weight: bold;text-indent:30px;'>您的账户只限您本人使用包括但不限于不得以转让出租借用分享出售等方式等使用因上述行为导致账号遗失
泄露被篡改被盗等损失的或因多终端登录异地登录等情况触发关键测试宝安全风控导致账号异常账号被封的损失的
亦应当由您自行承担且我方有权根据您的违约情况决定是否中止或终止为您提供服务当您的账户遭到未经授权的使用时
您应当立即通知我方平台否则未经授权的使用行为均视为您本人的行为
您将自行承担所有由此导致的损失及后果除我方存在过错外您应对您账户项下的所有行为结果负责</p>
<p style='text-indent:30px;'>日常维护须知如发现任何未经授权使用您账户登录我方平台或其他可能导致您账户遭窃遗失的情况建议您立即通知我方
您理解我方对您的任何请求采取行动均需要合理时间除我方存在法定过错外我方对在采取行动前已经产生的后果不承担任何责任</p>
<p style="font-weight: bold;margin: 5px 0;">4. 我方平台服务及规范</p>
<p style='font-weight: bold;text-indent:30px;'>4.1 我方平台服务</p>
<p style='text-indent:30px;'>4.1.1服务概况我方平台服务是指我方向用户提供的使用我方平台的培训服务
众包服务工具服务人才服务以及搜索查看等功能而提供的产品或/及服务我方平台服务均仅限于您在我方平台使用
任何以恶意破解等非法手段将我方服务与我方平台分离的行为
均不属于本协议中约定的我方服务由此引起的一切法律后果由行为人负责我方将依法追究行为人的法律责任</p>
<p style='text-indent:30px;'>建议您从我方平台官方公布的方式下载注册登录使用我方服务若您非法取得我方服务
我方一经发现有权立即做出删除取消清零封号等处理任何因此导致的一切不利后果均由您自行承担</p>
<p style='text-indent:30px;'>4.1.2软件升级
<span style="font-weight: bold;">
我方有权向您公告包括但不限于弹出页面网站公告站内消息等方式以修改替换
升级与我方平台服务相关的任何软件如果您不同意或者不接受我方平台服务相关软件的修改替换
升级请直接拒绝停止取消否则视为您同意并接受我方平台相关软件的修改替代升级
同时该同意并接受的行为仍受本协议约束</span></p>
<p style='text-indent:30px;'>4.1.3服务衍生品使用
<span style="font-weight: bold;">
您理解并认可您使用我方平台或我方平台账户所获得的使用记录您确认对其不享有所有权除非我方平台另有公告说明
我方许可您按照我方平台规则进行使用我方平台在法律有明确规定的情况下承担相应的责任</span></p>
<p>您同意并保证不得利用我方平台服务进行倒卖转手置换抵押有价交易等方式非法牟利
您不会利用我方平台服务侵犯他人的合法权益禁止通过网络漏洞恶意软件或其他非法手段窃取盗用他人的账户等</p>
<p style='text-indent:30px;'>4.1.4第三方支付工具风险您理解并认可如果您通过第三方支付工具在我方平台账户支付或充值后可能
产生的任何商业风险包括但不限于不法分子利用您账户或银行卡等有价卡等进行违法活动第三方代为充值后再
退款导致您的用户权益无法实现采用第三方黑产渠道代为充值或通过第三方非正规渠道购买远低于市场价值的
关键测试宝平台用户权益等该等风险均有可能给您造成相应的经济损失
我方在充分履行其在本协议项下义务和符合法律规定的前提下
<span style="font-weight: bold;">在法律有明确规定的情况和范围内承担相应的责任</span>
</p>
<p>4.2 服务规范</p>
<p style='text-indent:30px;'>4.2.1用户内容上传您可通过我方平台服务在我方平台上传发布或传输相关内容包括但不限于文档文字数字公式图形图片
链接等信息或其他资料下称内容但您需对此内容承担相关的法律责任
<span style="font-weight: bold;">我方平台在法律有明确规定的情况下承担相应的责任</span>
<p style='text-indent:30px;'>4.2.2授权使用
<span style="font-weight: bold;">除非有相反证明您使用我方平台服务上传发布或传输内容即视为您是在
我方平台上传发布或传输的内容的知识产权拥有人除双方另有约定外您使用我方平台服务上传发布或传输内容即代表
了您有权且同意在全世界范围内永久性的除非您主动删除或要求我方平台下线上述文档试题免费的授予
我方对该内容的存储使用发布复制修改改编翻译据以创作衍生作品传播使用和展示等权利
将内容的全部或部分编入其他任何形式的作品媒体技术中的权利对您的上传发布的内容进行商业开发的权利
通过有线或无线网络向您的计算机终端移动通讯终端包括但不限于便携式通讯设备如手机和智能平板电脑等
等提供信息的存储下载数据传输及其相关的宣传和推广等服务的权利
以及在先告知并征求您的明示同意的情况下将相关上传的内容再授权给其他第三方以上述方式使用的权利</span>
</p>
<p style='text-indent:30px;'>4.2.3用户上传内容免责
<span style="font-weight: bold;">您理解并知晓在使用我方平台服务时所接触的内容和信息来源广泛
我方无法对该内容和信息的准确性真实性可用性安全性完整性和正当性负责
您理解并认可您可能会接触到不正确的令人不快的不适当的内容和信息
您不会以此追究我方的相关责任我方不对用户在我方平台上传发布或传输的任何内容和信息背书
推荐或表达观点也不对任何内容和信息的错误瑕疵及产生的损失或损害承担任何责任
您对内容和信息的任何使用需自行承担相关的风险我方平台在法律有明确规定的情况下承担相应的责任</span>
</p>
<p style='text-indent:30px;'>4.2.4网络传输加速
为提高信息传输效率提升用户体验您同意我方采用除服务器-
客户端传输技术以外的新技术并知晓我方为此可能会使用您的终端设备信息和内容访问信息
</p>
<p style="font-weight: bold;">4.3 禁止的内容</p>
<p style="font-weight: bold;text-indent:30px;">4.3.1 您理解并保证您在我方平台上传
发布或传输的内容包括您的账户名称等信息应当遵守宪法法律和行政法规坚持为人民服务
为社会主义服务的方向坚持正确舆论导向发挥舆论监督作用促进形成积极健康向上向善的网络文化
维护国家利益和公共利益我方平台有权对您上传发布或传输的信息进行管理发现法律行政法规禁止发布或者传输的信息的
或含有以下内容的我方平台将立即停止传输该信息
采取消除等处置措施防止信息扩散保存有关记录并向有关主管部门报告</p>
<p>1反对宪法确定的基本原则的</p>
<p>2危害国家统一主权和领土完整的</p>
<p>3泄露国家秘密危害国家安全或者损害国家荣誉和利益的</p>
<p>4煽动民族仇恨民族歧视破坏民族团结或者侵害民族风俗习惯的</p>
<p>5宣扬邪教迷信的</p>
<p>6扰乱社会秩序破坏社会稳定的</p>
<p>7诱导未成年人违法犯罪和渲染暴力色情赌博恐怖活动的</p>
<p>8侮辱或者诽谤他人侵害公民个人名誉隐私知识产权和其他合法权益的</p>
<p>9危害社会公德损害民族优秀文化传统的</p>
<p>10有关法律行政法规和国家规定禁止的其他内容</p>
<p style="font-weight: bold;text-indent:30px;">4.3.2 上传非法及侵权内容的后果如果您上传
发布或传输的内容含有以上违反法律法规的信息或内容的或者侵犯任何第三方的合法权益
您将直接承担以上导致的一切不利后果我方平台仅在法律有明确规定的情况下承担相应的责任
如因此给我方造成不利后果的您应负责消除影响并且赔偿我方因此导致的一切损失包括且不限于财产损害赔偿
名誉损害赔偿律师费交通费等因维权而产生的合理费用或其他所有平台要求的合理费用</p>
<p style="font-weight: bold;">4.4 禁止的行为</p>
<p style="font-weight: bold;text-indent:30px;">您理解并保证不就我方平台服务进行下列的禁止的行为
也不允许任何人利用您的账户进行下列行为</p>
<p>1 在注册账户时或使用我方平台服务时冒充他人或您讹称与任何人或实体有
联系包括设置失实的账户名称或接入另一用户的账户</p>
<p>2伪造标题或以其他方式操控内容使他人误认为该内容为我方所传输</p>
<p>3将无权传输的内容例如涉及国家秘密的资料进行上传发布或以其他方式传输</p>
<p>4发送任何未获邀约或未经授权的广告或宣传资料或任何其他商业通讯</p>
<p>5未经我方明确许可使用我方平台服务用于任何商业用途或为任何第三方的利</p>
<p>6跟踪或以其他方式骚扰他人</p>
<p>7参与任何非法或有可能非法我方有权对用户行为及应适用的规则进行认定并据此处理
的活动或交易包括传授犯罪方法出售任何非法药物洗钱活动诈骗等</p>
<p>8赌博提供赌博数据或透过任何方法诱使他人参与赌博活动</p>
<p>9使用或利用我方知识产权包括我们的文字图标用户界面可视界面图片商标标识声音音乐
美术作品及计算机编码或在其他方面侵犯我方任何知识产权包括试图对我方平台客户端或所使用的软件进行逆向工程</p>
<p>10通过使用任何自动化程序软件引擎
网络爬虫网页分析工具数据挖掘工具或类似工具接入我方平台服务收集或处理通过我方平台服务所提供的内容</p>
<p>11参与任何框架镜像或其他技术目的是模仿我方平台服务的外观和功能</p>
<p>12干预或试图干预任何用户或任何其他方接入我方平台服务</p>
<p>13故意散播病毒网络蠕虫特洛伊木马病毒已损毁的档案或其他恶意代码或项目</p>
<p>14未经他人明确同意分享或发布该等人士可识别个人身份的资料</p>
<p>15探究或测试我方平台服务系统或其他用户的系统是
否容易入侵攻击或在其他方面规避或试图规避我方平台服务系统或其他用户的系统的任何安全功能</p>
<p>16对我方平台服务所用的软件进行解编反向编译或逆向工程或试图作出上述事项</p>
<p>17为破坏或滥用的目的开设多个账户或恶意上传重复的无效的大容量数据和信息</p>
<p>18利用网络从事侵害他人名誉隐私知识产权和其他合法权益等活动</p>
<p>19故意或非故意违反任何相关的中国法律法规规章条例等其他具有法律效力的规范</p>
<p>20对我方平台服务及相关功能进行修改篡改屏蔽或部分屏蔽广告如屏蔽网站页面中的Banner广告弹窗广告等</p>
<p>21破坏我方平台的版权技术保护措施未经许可盗用我方平台内容如复制后再分发使他人获取和享有仅付费会员享有的权益</p>
<p style="font-weight: bold;margin: 5px 0;">5. 个人信息保护</p>
<p style="text-indent:30px;">5.1 我方深知个人信息对您的重要性因此我方非常重视保护您的隐私和个人信息亦将您的个人信息以高度审慎的义务对待和处理
在您使用我方平台服务的过程中我方将采用相关技术措施及其他安全措施来保护您的个人信息</p>
<p style="text-indent:30px;">5.2 我方非常注重未成年人的保护</p>
<p style="text-indent:30px;">5.2.1 若您为未成年人应在监护人监护指导下阅读本协议
并且使用我方平台服务已经得到监护人的同意</p>
<p style="text-indent:30px;">5.2.2 监护人应指导子女上网应该注意的安全问题防患于未然
若监护人同意未成年人使用我方平台服务必须以监护人名义申请消费如涉及并对未成年人使用我方平台服务进行正确引导
监督未成年人使用我方平台服务以及行使和履行本协议项下的权利和义务即视为已获得了监护人的认可</p>
<p style="text-indent:30px;">5.3 更多关于个人信息处理和保护规则
用户对个人信息的控制权等内容请您查阅我方平台的隐私政策链接为XXXXXXXXXXX</p>
<p style="font-weight: bold;margin: 5px 0;">6. 第三方链接</p>
<p style="text-indent:30px;">我方平台服务可能会包含与第三方其他网站或资源的链接
我方对于前述网站或资源的内容隐私政策和活动无权控制审查或修改一般情况下除法律有明确规定外
我方对我方平台服务链接过去其他网站服务或资源内容
无需承担责任我方建议您在离开我方平台访问其他网站或资源前仔细阅读其服务条款和隐私权政策</p>
<p style="font-weight: bold;margin: 5px 0;">7. 知识产权</p>
<p>7.1 关键测试宝知识产权</p>
<p style="text-indent:30px;">除非另有约定或我方另行声明我方平台内的所有内容
用户依法享有知识产权的内容除外技术软件程序数据及其他信息包括但不限于文字
图标用户界面可视界面图片商标标识声音音乐美术作品及计算机编码的所有知识产权
包括但不限于著作权商标权专利权商业秘密等及相关权利均归我方或我方关联公司所有
未经我方许可任何人不得擅自使用包括但不限于复制传播展示镜像上载下载修改出租</p>
<p style="text-indent:30px;">我方平台的Logo关键测试宝等文字图形及其组合以及我方平台的其他标识徵记
产品和服务名称均为我方或我方关联公司在中国或其它国家的商标
未经我方书面授权任何人不得以任何方式展示使用或作其他处理也不得向他人表明您有权展示使用或作其他处理</p>
<p style="text-indent:30px;">我方对我方专有内容原创内容和其他通过授权取得的独占或独家内容享有完全知识产权未经我方许可任何单位和个人不得私自转载
使用和提供使用服务或者有其他侵犯我方知识产权的行为否则将承担所有相关的法律责任</p>
<p>7.2 用户知识产权管理</p>
<p>1基本申明</p>
<p style="text-indent:30px;">在为用户提供高质量相关服务的同时关键测试宝始终非常重视知识产权及其他用户权益的保护</p>
<p style="text-indent:30px;">A.由于我们无法对用户上传的作品涉及或包含的权利信息进行甄别若您认为关键测试宝平台上的内容侵犯了您的合法权益
请按通知删除规则提交材料通知关键测试宝关键测试宝将根据权利人提供的材料遵循相关法律在审查核实后删除侵权内容</p>
<p style="text-indent:30px;">B.若被删除方认为上传的文档等相关内容并未侵害他人权利的请按恢复删除规则提交材料通知关键测试宝关键测试宝将根据被删除方提供的材料遵循相关法律在审查核实后恢复被删除的作品或被断开的文档或试题链接>B.若被删除方认为上传的文档等相关内容并未侵害他人权利的请按恢复删除规则提交材料通知关键测试宝
关键测试宝将根据被删除方提供的材料遵循相关法律在审查核实后恢复被删除的作品或被断开的文档或试题链接 </p>
<p>2通知删除规则</p>
<p style="text-indent:30px;">为了确保通知删除的有效性权利人应尽量提供下列材料的原件不能提供原件的应在提供的复印件上签章</p>
<p style="text-indent:30px;">A.填写完整的申请删除表单</p>
<p style="text-indent:30px;">通知书需由权利人或其合法授权的代理人亲笔签名若为单位则需加盖单位公章</p>
<p style="text-indent:30px;">B.权利人主体信息材料</p>
<p style="text-indent:30px;">包括权利人的姓名名称联系方式地址及营业执照法人身份证个人相关授权证明等证明权利人主体资格的材料</p>
<p style="text-indent:30px;">C.构成侵权的初步证明材料</p>
<p style="text-indent:30px;">权利人应在通知书中写明请求删除或断开的链接的确切名称链接地址以及上传者ID等信息</p>
<p style="text-indent:30px;">若是知识产权侵权则应提供权属证明材料包括但不限于有权机构颁发的版权证书商标权证书计算机软件著作权证书等及侵权事实的举证</p>
<p style="text-indent:30px;">若是其他权利侵权名誉权荣誉权隐私权等应提供相应的证明材料</p>
<p style="text-indent:30px;">D.权利人保证</p>
<p style="text-indent:30px;">权利人应当保证其在通知书中的陈述和提供的相关材料都是真实合法的
并保证承担和赔偿因根据权利人的通知书而删除或者断开有关侵权内容的链接而给关键测试宝造成的任何损失</p>
<p style="text-indent:30px;">E.其他材料</p>
<p style="text-indent:30px;">若权利人已向相关政府部门或法院提起行政投诉或诉讼的可将受理证明及其他证据材料一并提交关键测试宝这将有利于权利人的投诉的处理</p>
<p>3联系方式</p>
<p style="text-indent:30px;">针对存在知识产权争议的文档或相关产品您可就申请删除或申请恢复与关键测试宝
平台上产品功能页面的在线客服联系或者在线提交意见反馈官方网站www.keyitest.com</p>
<p style="text-indent:30px;">因各种情况不尽相同在收到权利人的材料后关键测试宝会尽快核实处理</p>
<p style="font-weight: bold;margin: 5px 0;">8. 用户的违约及处理</p>
<p style="text-indent:30px;">8.1 违约认定发生如下情形之一的视为您违约</p>
<p style="text-indent:30px;">1使用我方平台服务时违反有关法律法规规定的</p>
<p style="text-indent:30px;">2违反本协议或本协议补充协议见本协议第2.2约定的</p>
<p style="text-indent:30px;">为适应互联网行业发展和满足海量用户对高效优质服务的需求您理解并同意
<span style="font-weight: bold;">我方可在我方平台规则中约定违约认定的程序和标准我方可依据您的用户数据与海量用户数据的关系来认
定您是否构成违约您有权利对您的数据异常现象进行充分举证和合理解释否则将被认定为违约</span>
</p>
<p>8.2 违约处理措施 </p>
<p style="text-indent:30px;">8.2.1信息处理您在我方平台上发布的内容和信息构成违约的
<span style="font-weight: bold;">我方 </span>平台有权根据相应规则立即对相应内容和信息进行删除
屏蔽等处理或对您的账户进行暂停使用查封注销等处理
<span style="font-weight: bold;">我方平台在法律有明确规定的情况下承担相应的责任 </span>
</p>
<p style="text-indent:30px;">8.2.2行为限制您在我方平台上实施的行为或虽未在我方平台上实施但对我方
平台及其用户产生影响的行为构成违约的我方<span style="font-weight: bold;">可依据相应规则对您的账户执行限制参加活动中止向您提供部分或全部服务等处理措施
扣划违约金如您的行为构成根本违约的我方可查封您的账户终止向您提供服务</span> </p>
<p style="text-indent:30px;">8.2.3违规违法信息和行为报告主管部门如果您在我方平台上的行为违反相关的法律法规
我方可依法向相关主管机关报告并提交您的使用记录和其他信息 </p>
<p style="font-weight: bold;"> 8.3 赔偿责任</p>
<p style="font-weight: bold;text-indent:30px;"> 如您的行为使我方及/或其关联公司遭受损失包括自身的直接经济损失商誉损失及对外支付的赔偿金
和解款律师费诉讼费等间接经济损失您应赔偿我方及/或其关联公司的上述全部损失</p>
<p style="font-weight: bold;text-indent:30px;">如您的行为使我方及/或其关联公司遭受第三人主张权利
我方及/或其关联公司可在对第三人承担金钱给付等义务后就全部损失向您追偿 </p>
<p style="font-weight: bold;">8.4 特别约定</p>
<p style="text-indent:30px;">8.4.1不可抗力我方负责按现状可得到的状态向您提供我方平台服务
我方依法律规定承担相应义务但对由于信息网络设备维护连接故障电脑通讯或其他系统的故障黑客活动
计算机病毒电力故障罢工暴乱火灾洪水风暴爆炸战争疫情政府行为
司法行政机关的命令或因第三方原因而给您造成的损害结果我方不承担法律有明确规定之外的责任</p>
<p style="text-indent:30px;">8.4.2域外行为<span style="font-weight: bold;">我方通过中华人民共和国境内的设施控制和提供我方平台服务我方不担保控制或提供的服务在其他国家或地区是适当的可行的
任何在其他司法辖区使用我方平台服务的用户应自行确保其遵守当地的法律法规
我方平台在法律有明确规定的情况下承担相应的责任</span></p>
<p style="font-weight: bold;"> 9. 协议的变更</p>
<p style="text-indent:30px;">我方根据国家法律法规变化及我方平台服务变化的需要可能随时更新本用户服务协议
该等更新构成该协议的一部分修改补充本协议补充或变更后的协议下称变更事项
将在本协议生效前通过发布页面通知弹窗站内信或以其他方式通知您在您继续使用我方服务前
请仔细阅读本协议的更新版本若您不同意变更后的内容您可以选择停止使用我方服务若您继续使用我方服务
即表示您充分阅读理解并同意接受经修订的用户服务协议的约束更新后的协议于协议首页约定生效之日起生效</p>
<p style="text-indent:30px;font-weight: bold;">如您对变更事项不同意的您应当于变更事项确定的生效之日起停止使用我方平台服务
如您在变更事项生效后仍继续使用我方平台服务则视为您同意已生效的变更事项</p>
<p style="font-weight: bold;">10. 通知</p>
<p style="font-weight: bold;">10.1 有效联系方</p>
<p style="text-indent:30px;">您同意我方以以下合理的方式向您送达各类通知</p>
<p style="text-indent:30px;">1公示的文案</p>
<p style="text-indent:30px;">2站内消息弹出消息推送的消息</p>
<p style="text-indent:30px;">3根据您预留于我方平台的联系方式发出的手机短信函件等</p>
<p style="text-indent:30px;">您在注册成为我方平台用户并接受我方平台服务时
您应该向我方提供真实有效的联系方式包括您的联系电话等
对于联系方式发生变更的您有义务及时更新有关信息并保持可被联系的状态</p>
<p style="text-indent:30px;">您在注册我方平台用户时生成的用于登陆我方平台接收站内信
系统消息的用户账号也作为您的有效联系方式</p>
<p style="text-indent:30px;">我方将向您的上述联系方式的其中之一或其中若干向您送达各类通知
而此类通知的内容可能对您的权利义务产生重大的有利或不利影响请您务必及时关注</p>
<p style="font-weight: bold;">11. 协议的终止</p>
<p >11.1 终止的情形</p>
<p style="text-indent:30px;">11.1.1用户发起的终止<span style="font-weight: bold;">您有权通过以下任一方式终止本协议</span> </p>
<p style="text-indent:30px;font-weight: bold;">1在满足我方平台网站公示的账户注销等清理条件时您通过网站注销您的账户的</p>
<p style="text-indent:30px;font-weight: bold;">2变更事项生效前您停止使用并明示不愿接受变更事项的</p>
<p style="text-indent:30px;font-weight: bold;">3您明示不愿继续使用我方平台服务且符合我方平台终止条件的</p>
<p style="text-indent:30px;">11.1.2平台发起的终止出现以下情况时我方可以本协议第10条的所列的方式通知您终止本协议</p>
<p>1您违反本协议约定我方依据违约条款终止本协议的</p>
<p>2您转让本人账户盗用他人账户发布违禁内容和信息骗取他人财物采取不正当手段谋利等行为我方依据我方平台规则对您的账户予以查封的</p>
<p>3除上述情形外因您多次违反我方平台规则相关规定且情节严重我方依据我方平台规则对您的账户予以查封的</p>
<p>4您的账户被我方依据本协议进行注销等清理的</p>
<p>5您在我方平台有侵犯他人合法权益或其他严重违法违约行为的</p>
<p>6其它根据相关法律法规我方应当终止服务的情况</p>
<p style="font-weight: bold;">11.2 协议终止后的处理</p>
<p style="text-indent:30px;font-weight: bold;">11.2.1用户信息披露本协议终止后除法律有明确规定外原则上
我方无义务向您或您指定的第三方披露您账户中的任何信息</p>
<p style="text-indent:30px;">11.2.2我方平台权利本协议终止后我方享有下列权利</p>
<p>1我们可根据适用法律的要求删除您的个人信息或使其匿名化处理
也可依照法律规定的期限和方式继续保存您留存于我方平台的其他内容和信息</p>
<p>2对于您过往的违约行为我方仍可依据本协议向您追究违约责任</p>
<p style="text-indent:30px;">11.2.3交易处理本协议终止后对于您在本协议存续期间产生的交易订单
我方平台可关闭该等交易订单我方可自行决定退回费用或扣除相关费用作为违约金</p>
<p style="font-weight: bold;">12. 法律适用管辖与其他 </p>
<p style="text-indent:30px;">12.1法律适用<span style="font-weight: bold;">本协议之订立生效解释修订补充终止
执行与争议解决均适用中华人民共和国法律如法律无相关规定的参照商业惯例及/或行业惯例</span></p>
<p style="text-indent:30px;">12.2管辖<span style="font-weight: bold;">您因使用我方平台服务所产生及与我方平台服务有关的争议由我方与您协商解决
协商不成时任何一方均可向被告所在地人民法院提起诉讼</span></p>
<p style="text-indent:30px;">12.3可分割性<span style="font-weight: bold;">本协议之订立生效解释修订补充终止
执行与争议解决均适用中华人民共和国法律如法律无相关规定的参照商业惯例及/或行业惯例</span></p>
<p style="text-indent:30px;">12.1法律适用本协议任一条款被视为废止无效或不可执行该条应视为可分的且并不影响本协议其余条款的有效性及可执行性
</p>
<view style="height: 20px;"></view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
.navTab{
padding:15px 20px 13px 20px;
font-size: 14px;
line-height:23px;
color: #333333;
}
</style>

@ -0,0 +1,378 @@
<template>
<view>
<view class="contendt">
<!-- <view class="bureau">
<img src="http://image.keyitest.cn/static/shopping/shop.png" alt="">
<p>购物车竟然是空的</p>
<view class="button-g" @click="toinde">去首页逛逛</view>@change="checkboxChange(item)"
</view> -->
<!-- <view></view>@change="checkboxChange(item)"-->
<view v-if="cartrows&&cartrows.length>0">
<checkbox-group @change="checkboxChange">
<view class="catall" v-for="(item,key) of cartrows" :key="key" >
<u-swipe-action :show="item.show" :index="key" @click="rightclick(item.toolId)" btn-width="150" @open="delopen" :options="options">
<view style="display: flex;align-items: center;justify-content: space-between;margin-left: 15px;">
<checkbox :value="item.name" :checked="item.isselect" >
</checkbox>
<!-- @click="tooldetils(item.toolId)" -->
<view style="display: flex;justify-content: space-between;align-items: center;width:78vw;margin: 18px 10px 18px 0;">
<img class="deyalimg" :src="item.imgs" alt="">
<view style="color:#808080;font-size:22rpx;width:70%;margin-right:10px;">
<p style="color: #1A1A1A;font-size:32rpx;font-weight: bold;margin:-3px 0 10px 0;">{{item.name}}</p>
<view style="display: flex;margin:3px 0 10px 0;">
<u-tag v-if="item.toolType==1" text="规格:按次" plain bgColor='transparent' style="margin-right:10px" size='mini'> </u-tag>
<u-tag v-if="item.toolType==2" text="规格:按月" plain bgColor='transparent' style="margin-right:10px" size='mini'> </u-tag>
<u-tag :text="'交付方式:'+item.deliverType" plain bgColor='transparent' type="warning" size='mini'> </u-tag>
</view>
<view style="display: flex;justify-content: space-between;">
<p style="color: #FD461A;">
<span style="font-size: 13px;">¥</span>
<span style="font-size: 18px;">{{item.price}}</span>
</p>
<!-- <u-number-box v-model="item.amount" @change="valChange(item)"></u-number-box> -->
<uni-number-box v-model="item.amount" :min="1" :max="999" @change.stop="valChange(item)" @minus.native.stop='minuschange(item,$event)' @plus.native.stop="pluschange(item,$event)"/>
</view>
</view>
</view>
</view>
</u-swipe-action>
</view>
</checkbox-group>
<view style="height:70px;"></view>
</view>
<view v-else class="bureau">
<img src="http://image.keyitest.cn/static/shopping/shop.png" alt="">
<p>购物车竟然是空的</p>
<view class="button-g" @click="toinde">去首页逛逛</view>
</view>
</view>
<view v-if="cartrows.length>0" class="submitt">
<checkbox-group @change="allcheckboxChange">
<checkbox :checked="allselect" >全选</checkbox>
</checkbox-group>
<view style="display: flex;align-items: center;">
<p>合计</p>
<p style="color: #FD461A;font-size: 18px;">¥{{allperice}}</p>
<view class="button-g" style="width:25vw;" @click="popcilk('determine')">去下单</view>
</view>
</view>
<u-toast ref="uToast" />
</view>
</template>
<script>
export default {
data() {
return {
cartrows: [],
cartnumber:'1',
allselect:false,
allperice:0,
allselectdata:[],//
options: [
{
text: '删除',
style: {
backgroundColor: '#dd524d',
// backgroundImage: 'url("/static/index/index.png")'
}
}
]
}
},
onShow() {
let wxUserInfo = uni.getStorageSync('wxUserInfo');
if(wxUserInfo){
this.getcartlist();
// console.log('onShow')
}else{
this.cartrows=[]
}
},
onLoad() {
this.getcartlist();
// console.log('onLoad')
},
mounted() {
},
methods: {
//
getcartlist(){
this.http.quickGet(`/my/shoppingCart`,true).then(res => {
console.log('购物车',res)
this.cartrows=res.data.rows
if(this.cartrows&&this.cartrows.length>0){
this.cartrows.forEach(item=>{
item.show=false
if(item.name=='代码静态分析工具'){
item.imgs='http://image.keyitest.cn/static/index/11.png'
}else if(item.name=='源代码安全检测工具'){
item.imgs='http://image.keyitest.cn/static/index/5.png'
}else if(item.name=='C/C++单元测试工具'){
item.imgs='http://image.keyitest.cn/static/index/2.png'
}else if(item.name=='接口测试工具'){
item.imgs='http://image.keyitest.cn/static/index/12.png'
}else if(item.name=='JAVA单元测试工具'){
item.imgs='http://image.keyitest.cn/static/index/tool/1.png'
}else if(item.name=='功能测试工具AutoFun'){
item.imgs='http://image.keyitest.cn/static/index/3.png'
}else if(item.name=='代码组成分析平台'){
item.imgs='http://image.keyitest.cn/static/index/tool/4.png'
}else if(item.name=='性能测试工具'){
item.imgs='http://image.keyitest.cn/static/index/6.png'
}else if(item.name=='自鉴-交互式应用安全测试系统IAST'){
item.imgs='http://image.keyitest.cn/static/index/tool/3.png'
}else if(item.name=='Web应用安全测试工具'){
item.imgs='http://image.keyitest.cn/static/index/tool/2.png'
}else if(item.name=='资产识别及漏洞管理工具'){
item.imgs='http://image.keyitest.cn/static/index/zc.png'
}else if(item.name=='性能测试工具AutoLoad'){
item.imgs='http://image.keyitest.cn/static/index/xn.png'
}
})
this.getallperice();
}
})
},
//
delopen(index){
console.log('odc---',index)
this.cartrows[index].show = true;
this.cartrows.map((val, idx) => {
console.log('idx---',idx)
if(index != idx){
this.cartrows[idx].show = false;
}
this.cartrows= JSON.parse(JSON.stringify(this.cartrows));
})
console.log('this.cartrows---',this.cartrows)
},
//
rightclick(index){
console.log('index---',index)
this.http.quickDelete(`/my/shoppingCart/${index}`,true).then(res=>{
console.log('购物车删除',res)
this.getcartlist();
})
},
//
tooldetils(id){
uni.showToast({ title: '该功能开发中', icon: 'none', duration: 1000 });
// uni.navigateTo({
// url: `/pages/index/toolleasing/tooldetails?id=${id}`
// })
},
toinde(){
uni.switchTab({
url: '../index/index'
})
},
//
checkboxChange(e) {
this.allperice=0
// console.log('change',e,this.cartrows);
var items = this.cartrows,
values = e.detail.value;
for (var i = 0, lenI = items.length; i < lenI; ++i) {
const item = items[i]
if(values.includes(item.name)){
this.$set(item,'isselect',true)
}else{
this.$set(item,'isselect',false)
}
}
console.log('合计:---,',this.allperice)
//
var offcartrows = []
this.cartrows.forEach(item => item.isselect == true? offcartrows.push(item): '')
// let allChecks = offcartrows.every(item => item.isselect == true)
// if(offcartrows.length>0){
// offcartrows.forEach(items=>{
// this.allperice+=parseFloat(items.price*items.amount)
// })
// }
console.log('当前勾选的---,',offcartrows)
this.allselectdata=offcartrows
this.getallperice();
if(offcartrows.length==this.cartrows.length){
this.allselect=true
}else{
this.allselect=false
}
},
//
allcheckboxChange(e){
console.log('全选',e,this.cartrows)
this.allperice=0
if(e.detail.value.length == 0){
this.cartrows.map(item => this.$set(item, 'isselect', false))
this.allselect=false
this.allselectdata=[]
}else{
this.cartrows.map(item => this.$set(item, 'isselect', true))
this.allselect=true
this.allselectdata=this.cartrows
this.cartrows.forEach(item=>{
this.allperice+=parseFloat(item.price*item.amount)
})
}
console.log('总价',this.allperice)
},
//
getallperice(){
// console.log('',this.allselectdata)
this.allselectdata.forEach(items=>{
this.allperice+=parseFloat(items.price*items.amount)
})
},
//-
minuschange(item,e){
if(item.amount==1){
console.log('您好数量不能在减少了')
uni.showToast({ title: '您好数量不能在减少了', icon: 'none', duration:3000 });
}
if(item.isselect){
this.allperice-=item.price
}
// console.log('-: ',item,e)
},
//+
pluschange(item,e){
if(item.isselect){
this.allperice+=item.price
}
// console.log('+: ',item,e,this.allselectdata)
//
},
//
valChange(val){
this.allperice=0
// console.log('val: ',val,)
if(val.isselect){
// console.log('---',this.allselectdata)
this.allselectdata.forEach(items=>{
this.allperice+=parseFloat(items.price*items.amount)
})
}
},
popcilk(){
console.log('this.allselectdata--',this.allselectdata)
if(this.allselectdata.length==0){
this.$refs.uToast.show({
title: '请选择要下单的商品',
type: 'warning',
duration: 2000,
})
return;
}else{
this.$refs.uToast.show({
title: '功能暂未开放',
type: 'info',
duration: 2000,
})
}
}
}
}
</script>
<style>
.contendt{
width:100vw;
padding: 13px;
/* margin:16px 5vw 20px 5vw; */
}
.bureau{
width: 49%;
/* height: 210rpx; */
border-radius: 10rpx;
text-align: center;
padding: 10px 5px;
margin: 23vh auto;
}
.bureau img{
width:28vw;
height:28vw;
margin:10px auto;
}
.bureau p{
font-size:30rpx;
color: #969494;
margin:10px 0 15px 0px
}
.button-g{
width:280rpx;
height:75rpx;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius:43rpx;
text-align: center;
line-height:75rpx;
color: #FFFFFF;
font-size: 33rpx;
margin-left:13px;
}
.catall{
width: 100%;
/* height: 20vw; */
background: #FFFFFF;
border-radius: 10rpx;
/* padding:35rpx 25rpx; */
margin-bottom: 20px;
}
.deyalimg{
width: 15vw;
height: 15vw;
margin: 0 7px;
}
.submitt {
height:70px;
/* font-size: 20px; */
background: #FFFFFF;
box-shadow: -4px 7px 18px 0px rgba(248, 164, 54, 0.33);
margin-top:60px;
position: fixed;
bottom: 0;
width: 100vw;
padding: 10px 20px;
display: flex;
justify-content: space-between;
align-items: center;
z-index: 99;
}
/* .u-checkbox__label{
margin-right: 0;
} */
checkbox .wx-checkbox-input {
width: 30rpx;
height: 30rpx;
/* border-radius: 50%; */
}
checkbox .wx-checkbox-input.wx-checkbox-input-checked {
background: #1578ED;
border-color:transparent;
}
checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
width: 20rpx;
height: 20rpx;
line-height: 20rpx;
text-align: center;
font-size: 22rpx;
color: #FFFFFF;
background: transparent;
transform: translate(-50%, -50%) scale(1);
-webkit-transform: translate(-50%, -50%) scale(1);
}
</style>

@ -0,0 +1,56 @@
<template>
<view>
<view class="bureau">
<img src="http://image.keyitest.cn/static/shopping/shop.png" alt="">
<p>购物车竟然是空的</p>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
onShow() {
uni.login({
success(res) {
console.log(res);
}
})
},
}
</script>
<style>
.contendt{
width:100vw;
padding: 13px;
/* margin:16px 5vw 20px 5vw; */
}
.bureau{
width: 49%;
/* height: 210rpx; */
border-radius: 10rpx;
text-align: center;
padding: 10px 5px;
margin: 23vh auto;
}
.bureau img{
width:28vw;
height:28vw;
margin:10px auto;
}
.bureau p{
font-size:30rpx;
color: #969494;
margin:10px 0 15px 0px
}
</style>

@ -0,0 +1,33 @@
{
"appid": "wx0606cba78611e49b",
"compileType": "miniprogram",
"libVersion": "3.2.2",
"packOptions": {
"ignore": [],
"include": []
},
"setting": {
"ignoreDevUnusedFiles": false,
"ignoreUploadUnusedFiles": false,
"coverView": true,
"es6": true,
"postcss": true,
"minified": true,
"enhance": true,
"showShadowRootInWxmlPanel": true,
"packNpmRelationList": [],
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"condition": false
},
"miniprogramRoot": "unpackage/dist/dev/mp-weixin/",
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",
"tabSize": 2
},
"srcMiniprogramRoot": "unpackage/dist/dev/mp-weixin/"
}

@ -0,0 +1,7 @@
{
"description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"projectname": "keysaas-app",
"setting": {
"compileHotReLoad": true
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 986 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 887 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 996 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

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

Loading…
Cancel
Save