This commit is contained in:
我是个攻城狮
2026-07-16 17:01:34 +08:00
parent c3f5f13bb3
commit ca87258846
12 changed files with 2413 additions and 788 deletions
+21 -9
View File
@@ -399,11 +399,17 @@
</el-form>
<view class="dialog-footer">
<el-button @tap="gosteps(steps-1)" v-if="steps>0">上一步</el-button>
<el-button @tap="addAsset('bc')" v-if="id==0" v-loading.fullscreen.lock="save_loading">保存</el-button>
<el-button @tap="editAsset('bc')" v-if="id>0&&status!='pending'" v-loading.fullscreen.lock="save_loading">保存</el-button>
<el-button @tap="addAsset('bc')" v-if="id==0&&is_edit==1" v-loading.fullscreen.lock="save_loading">保存</el-button>
<el-button @tap="editAsset('bc')" v-if="id>0&&status!='pending'&&is_edit==1" v-loading.fullscreen.lock="save_loading">保存</el-button>
<el-button type="primary" @tap="gosteps(steps+1)" v-if="steps<3">下一步</el-button>
<el-button type="primary" @tap="addAsset()" v-if="steps==3&&id==0" :loading="loading" >立即免费提交</el-button>
<el-button type="primary" @tap="editAsset()" v-if="steps==3&&id>0&&status!='pending'" :loading="loading" >重新提交</el-button>
<el-button type="primary" @tap="addAsset()" v-if="steps==3&&id==0&&status==''" :loading="loading" >立即免费提交</el-button>
<el-button
type="primary"
@tap="editAsset()"
v-if="steps==3 && id>0 && status!='pending'&&is_edit==1"
:loading="loading"
>重新提交</el-button>
</view>
</view>
</view>
@@ -522,7 +528,10 @@ import Layout from './part/layouts.vue';
credit_report_img:'',
file_num:0,
id:0,
status:''
status:'',
contract_status:'',
report_url:'',
is_edit:1
}
},
created(){
@@ -533,17 +542,18 @@ import Layout from './part/layouts.vue';
if(isMobile){
this.list_rows = 30;
}
},
onShow() {
this.steps = 0;
let obj = this.$Route.query;
if(obj.hasOwnProperty('id')){
this.id = Number(obj.id);
this.is_edit = Number(obj.is_edit||1);
}
if(this.id>0){
this.getdetail()
}
},
onShow() {
},
mounted() {
@@ -556,7 +566,9 @@ import Layout from './part/layouts.vue';
res=>{
console.log(res.data,3333)
this.status = res.data.status;
console.log(this.status,3333)
this.contract_status = res.data.contract_status;
this.report_url = res.data.report_url;
console.log(this.status,this.contract_status,3333)
this.form.base_info = res.data.base_info;
this.form.develop_info = res.data.develop_info;
this.form.title_info = res.data.title_info;
File diff suppressed because it is too large Load Diff
+2 -3
View File
@@ -614,7 +614,7 @@ export default {
formData.append('type', filetype);
formData.append('app_id', '10001');
formData.append('token', uni.getStorageSync('token') || '');
// uni.request暂不支持直接传formData,改用原生XMLHttpRequest优化图片上传
// uni.request暂不支持直接传formData,改用原生XMLHttpRequest优化图片上传
const xhr = new XMLHttpRequest();
xhr.open('POST', this.config.app_url+'/api/file.upload/file', true);
xhr.onreadystatechange = function () {
@@ -627,7 +627,6 @@ export default {
that.$message.error('签名上传返回异常');
return;
}
console.log(res.data.file_id,2222222222222222)
if(res.code === 1){
// 调用签约接口给后端参数
that.toqy(res.data.file_id);
@@ -658,7 +657,7 @@ export default {
this.getData();
}, err => {
uni.showToast({
icon: 'none',
icon: 'none',
title: err.data.msg
})
return;
+141 -760
View File
@@ -11,6 +11,8 @@
游戏产品评估确权
</view>
<view class="lines"></view>
<view class="asset_list_desc">
<view class="assetDesc">
<view class="assetDesc_dian"></view>
@@ -25,6 +27,8 @@
有效解决游戏数字资产价值评估标准缺失企业融资难运营风险监管不透明以及不良资产处置专业度不足等问题
</view>
</view>
<view class="content_r">
<view class="d-b-c">
<view class="adds" @tap="asset_add()">
@@ -66,7 +70,7 @@
</el-table-column>
<el-table-column
prop="username"
label="权属方"
label="存证人"
width="120">
</el-table-column>
<el-table-column
@@ -74,6 +78,7 @@
label="提交时间"
width="90">
</el-table-column>
<el-table-column
prop="status"
label="状态"
@@ -89,588 +94,174 @@
prop="tx_hash"
label="存证哈希">
</el-table-column>
<el-table-column
prop="contract_status_text"
label="签约状态"
width="90">
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="170">
width="130">
<template slot-scope="scope">
<el-button @tap="goEdit(scope.row.id)" type="text" size="small" class="asset_e" v-if="scope.row.status== 'draft'">继续填写</el-button>
<el-button @tap="goEdit(scope.row.id)" type="text" size="small" class="asset_e" v-if="scope.row.status== 'pass'">更新申请表</el-button>
<el-button @tap="goEdit(scope.row.id)" type="text" size="small" class="asset_e" v-if="scope.row.status== 'pass'">更新</el-button>
<el-button @tap="goEdit(scope.row.id)" type="text" size="small" class="asset_e" v-if="scope.row.status== 'fail'">修改</el-button>
<el-button @click="downloadPDF(scope.row.report_url)" type="text" size="small" class="asset_l" v-if="scope.row.status== 'pass'&&scope.row.report_url">查看评估报告</el-button>
<!-- <el-button @click="downloadPDF(scope.row.report_url)" type="text" size="small" class="asset_l" v-if="scope.row.status== 'pass'&&!scope.row.report_url">报告评估中</el-button> -->
<el-button @click="downloadPDF(scope.row.report_url)" type="text" size="small" class="asset_l" v-if="scope.row.status== 'pass'&&!scope.row.report_url">评估中</el-button>
<el-button @tap="finds(scope.row)" type="text" size="small" class="asset_l" v-if="scope.row.status== 'fail'">查看意见</el-button>
<el-button @tap="openAgreementDialog(scope.row)" type="text" size="small" class="asset_l" v-if="scope.row.status== 'pass'&&scope.row.contract_status=='unsigned'">评估服务签约</el-button>
<el-button @tap="openPayDialog(scope.row)" type="text" size="small" class="asset_l" v-if="scope.row.status== 'pass'&&scope.row.contract_status=='signed'">付费生产报告</el-button>
<el-button @tap="goEdit(scope.row.id)" type="text" size="small" class="asset_e" v-if="scope.row.status== 'pending'">查看申请表</el-button>
<el-button @tap="findqy(scope.row)" type="text" size="small" class="asset_l" v-if="scope.row.contract_status== 'failed'">查看意见</el-button>
<el-button @tap="openAgreementDialog(scope.row)" type="text" size="small" class="asset_l" v-if="scope.row.status== 'pass'&&scope.row.contract_status=='failed'">重新签约</el-button>
</template>
</el-table-column>
</el-table>
</view>
<el-pagination v-if="total>10" background layout="prev, pager, next" :total="total" :current-page="page" :page-size="list_rows" @size-change="handleSizeChange" @current-change="handleCurrentChange"></el-pagination>
<!-- 评估服务签约弹窗 -->
<el-dialog
:visible.sync="agreementDialogVisible"
width="657px"
:close-on-click-modal="false"
top="135px"
custom-class="agreement-dialog-custom"
v-if="!signDialogVisible"
>
<div class="agreement-dialog-header">
<span class="agreement-dialog-title">评估服务协议</span>
</div>
<div class="agreement-content" style="max-height: 470px; overflow-y: auto; text-align: left;">
<div style="font-size: 14px; color: #3D3D3D; margin-top: 10px;">
协议编号________________ <br/>
甲方委托方<br/>
统一社会信用代码______________________________<br/>
联系地址________________________________________<br/>
联系人/授权代表__________________________________<br/>
法人身份证号________________________________________<br/>
联系人电话________________________________________<br/>
乙方服务方四川数字世界文化科技有限公司<br/>
统一社会信用代码91510100MACHFBAG0L<br/>
联系地址四川省成都市高新区盛兴街518号<br/>
联系人/授权代表文本文本<br/>
法人身份证号1111111111<br/>
联系人电话12345671111<br/>
鉴于<br/>
甲方系依法设立并合法存续的游戏公司享有游戏文本名称(暂定名以游戏在上线平台实际名称为准以下简称该游戏产品的全部著作权及发行运营该游戏产品所需的所有商标权及其他合法权利或已得到合法权利人的合法完整有效及可转授权的授权拥有游戏产品的合法知识产权拟对其游戏产品进行专业评估以便向银行申请贷款等融资活动<br/>
产权信息<br/>
计算机软件著作权登记号:________________________<br/>
资产编号________________________<br/>
游戏版号:________________________<br/>
<br/>
乙方系一家具备合法资质以游戏产业为主业的国有全资国家级科技型企业以游戏数字资产管理游戏发行运营数字资产评估服务等为主要业务拥有丰富的游戏行业评估经验和专业的评估团队能够为甲方提供游戏产品评估服务并出具评估报告并上链本评估报告经上链后可溯源不可篡改作为可信数字资产应用参考有效依据<br/>
甲乙双方经平等协商在真实充分地表达各自意愿的基础上根据中华人民共和国民法典及相关法律法规的规定就该游戏产品评估服务事宜达成如下协议并由双方共同恪守<br/>
第一条 服务内容<br/>
1.1 乙方接受甲方委托为该游戏产品提供专业的评估服务并出具游戏产品评估报告以下简称评估报告<br/>
1.2 评估服务内容包括但不限于游戏产品的市场价值分析技术可行性评估商业化潜力评估游戏质量评估等专业评估内容<br/>
1.3 评估报告将作为甲方向银行等金融机构申请贷款时的参考材料之一乙方不对甲方能否成功获得贷款作出任何承诺或保证<br/>
第二条 服务费用及支付方式<br/>
2.1 本次游戏产品评估服务费用为人民币壹仟元整¥1,000.00<br/>
2.2 甲方应通过乙方COG游戏可信资产服务平台提供的二维码支付方式完成服务费用的支付<br/>
2.3 甲方完成扫码付费后本协议即生效乙方开始为甲方提供评估服务<br/>
第三条 服务期限及交付<br/>
3.1 乙方应在甲方完成付费后的1个工作日内完成评估报告的编制工作<br/>
3.2 评估报告完成后甲方可通过乙方平台个人中心游戏产品评估确权页面中进行下载<br/>
3.3 如因甲方提供的游戏产品资料不完整不准确或存在虚假陈述导致评估工作无法正常进行或评估报告无法按时交付的交付期限相应顺延乙方不承担违约责任<br/>
第四条 甲方的权利与义务<br/>
4.1 甲方有权要求乙方按照本协议约定提供评估服务并按时获取评估报告<br/>
4.2 甲方应向乙方提供评估所需的真实完整准确的游戏产品相关资料包括但不限于游戏产品说明技术文档运营数据知识产权证明等<br/>
4.3 甲方应按照本协议约定及时支付服务费用<br/>
4.4 甲方应对乙方提供的评估报告内容予以保密未经乙方书面同意不得将评估报告用于本协议约定以外的其他用途<br/>
第五条 乙方的权利与义务<br/>
5.1 乙方有权按照本协议约定收取服务费用<br/>
5.2 乙方应按照行业标准和专业规范独立客观公正地为甲方提供评估服务并出具评估报告<br/>
5.3 乙方应对甲方提供的游戏产品资料及评估过程中知悉的甲方商业秘密予以保密未经甲方书面同意不得向任何第三方披露<br/>
5.4 乙方应确保评估报告的内容真实但评估报告中的结论和意见仅供银行参考不构成对游戏产品价值的绝对保证<br/>
第六条 知识产权<br/>
6.1 甲方提供的游戏产品及相关资料的知识产权归甲方所有<br/>
6.2 乙方出具的评估报告的著作权归乙方所有甲方获得该评估报告的使用权使用范围限于向银行等金融机构申请贷款<br/>
第七条 保密条款<br/>
7.1 双方应对在履行本协议过程中知悉的对方商业秘密技术秘密及其他保密信息予以保密<br/>
7.2 保密义务不因本协议的终止而失效双方应持续承担保密义务<br/>
7.3 如因一方违反保密义务给对方造成损失的违约方应承担相应的赔偿责任<br/>
第八条 协议的变更与终止<br/>
8.1 本协议的任何变更或补充须经双方协商一致<br/>
8.2 甲方申请退款后本协议即行终止乙方不再提供评估服务<br/>
8.3 协议终止后双方应按照本协议约定履行保密义务已支付的款项将按原路退回<br/>
第九条 违约责任<br/>
9.1 任何一方违反本协议约定的应承担相应的违约责任并赔偿由此给对方造成的直接经济损失<br/>
9.2 因不可抗力导致本协议无法履行的双方互不承担违约责任但应及时通知对方并提供相关证明<br/>
第十条 争议解决<br/>
10.1 本协议的订立效力解释履行和争议解决均适用中华人民共和国法律<br/>
10.2 因本协议引起的或与本协议有关的任何争议双方应首先通过友好协商解决协商不成的任何一方均有权向乙方所在地有管辖权的人民法院提起诉讼<br/>
第十一条 其他<br/>
11.1 本协议自甲方完成扫码付费之日起生效<br/>
11.2 本协议一式两份甲乙双方各执一份具有同等法律效力<br/>
11.3 本协议未尽事宜双方可另行协商签订补充协议补充协议与本协议具有同等法律效力<br/>
<br/>
乙方盖章<br/>
授权代表签字<br/>
日期 <br/>
<br/>
甲方授权代表签字<br/>
日期 <br/>
</div>
</div>
<div class="agreement-dialog-center">
<el-checkbox v-model="agreementChecked" class="agreement-checkbox-custom">
我已阅读并同意协议内容
</el-checkbox>
<span class="dialog-footer-center" slot="footer">
<el-button
class="agreement-sign-btn"
:disabled="!agreementChecked"
@click="onSignAgreement"
type="primary"
>同意协议并签字</el-button>
</span>
</div>
</el-dialog>
<!-- END 评估服务签约弹窗 -->
<!-- 优化后的签名弹窗 调用closeSignDialog-->
<el-dialog
:visible.sync="signDialogVisible"
width="70vh"
:close-on-click-modal="false"
:before-close="closeSignDialog"
top="170px"
custom-class="sign-dialog-custom"
>
<div class="sign-content">
<div class="sign-title-text">
请在下方进行签名
</div>
<view class="signature-container signature-container-bg">
<canvas
canvas-id="signatureCanvas"
id="signatureCanvas"
class="signature-canvas"
:style="{ width: canvasWidth + 'px', height: canvasHeight + 'px'}"
@mousedown="startDrawing"
@mousemove="draw"
@mouseup="stopDrawing"
@mouseleave="stopDrawing"
></canvas>
</view>
<div class="sign-tip-text">
请用鼠标在框内签署您的名字
</div>
<view class="btn-group sign-btn-group">
<button @click="clearCanvas" class="sign-reset-btn">重置</button>
<button @click="saveSignature" class="sign-confirm-btn">确定</button>
</view>
</div>
</el-dialog>
<!-- END 优化后的签名弹窗 -->
<!-- 付费生产报告支付弹窗 -->
<el-dialog
:visible.sync="payDialogVisible"
width="70vh"
:close-on-click-modal="false"
custom-class="pay-dialog-custom"
>
<pay
v-if="payDialogVisible"
:order-id="payRow"
@pay-success="onPaySuccess"
@close="payDialogVisible = false"
/>
</el-dialog>
<!-- END 付费生产报告支付弹窗 -->
</view>
</view>
</view>
</view>
</Layout>
</template>
<script>
import Layout from './part/layouts.vue';
import memberleft from './part/member_left.vue';
import pay from './part/pay.vue';
export default {
components: {
Layout,
memberleft,
pay,
},
data() {
return {
page: 1,
list_rows: 10,
listData: [],
total: 0,
name: '',
agreementDialogVisible: false,
agreementChecked: true,
agreementRow: null,
signDialogVisible: false,
canvasWidth: 510,
canvasHeight: 350,
ctx: null,
isDrawing: false,
lastX: 0,
lastY: 0,
signatureBase64: '',
payDialogVisible: false,
payRow: null,
canvasOffsetLeft: 0,
canvasOffsetTop: 0,
devicePixelRatio: 1
};
},
created() {
let obj = this.$Route ? this.$Route.query : (this.$route ? this.$route.query : {});
if (obj && obj.hasOwnProperty('index')) {
this.category_id = Number(obj.index);
}
},
mounted() {
this.initCanvas();
},
onShow() {
this.getData();
},
watch: {
signDialogVisible(val) {
if(val) {
this.$nextTick(() => {
this.initCanvas();
});
}
}
},
methods: {
downloadPDF(e) {
if (!e) {
this.$message.error('评估报告生成中~');
} else {
window.open(e, '_blank');
import Layout from './part/layouts.vue';
import memberleft from './part/member_left.vue';
export default {
components:{
Layout,
memberleft
},
data(){
return {
page: 1,
list_rows: 10,
listData: [],
total: 0,
name:'',
}
},
goEdit(e) {
if (uni.getStorageSync('apply_status') == 3) {
this.$message.error('用户认证审核中');
return false;
created() {
const width = window.innerWidth;
const height = window.innerHeight;
const mobileWidth = 768; // 可以根据需要调整这个值
const isMobile = width <= mobileWidth || height <= mobileWidth;
if(isMobile){
this.list_rows = 30;
}
if (uni.getStorageSync('apply_status') == 2) {
this.$message.error('用户认证失败,请重新提交审核');
return false;
let obj = this.$Route.query;
if(obj.hasOwnProperty('index')){
this.category_id = Number(obj.index);
}
this.$router.push({
path: 'asset_add',
query: {
id: e,
},
});
},
finds(e) {
uni.showModal({
title: '审核意见',
content: e.auth_remark ? e.auth_remark : '无审核意见说明',
showCancel: true,
cancelText: '取消',
cancelColor: '#cccccc',
confirmText: '确定',
confirmColor: '#F78A30',
success: function (res) {
if (res.confirm) {
} else if (res.cancel) {
console.log('用户点击取消');
}
},
fail: function (err) {
console.log('调用失败:', err);
},
complete: function () {},
});
},
findqy(e) {
uni.showModal({
title: '签约审核意见',
content: e.contract_audit_remark ? e.contract_audit_remark : '无审核意见说明',
showCancel: true,
cancelText: '取消',
cancelColor: '#cccccc',
confirmText: '确定',
confirmColor: '#F78A30',
success: function (res) {
if (res.confirm) {
} else if (res.cancel) {
console.log('用户点击取消');
}
},
fail: function (err) {
console.log('调用失败:', err);
},
complete: function () {},
});
onShow() {
this.getData();
},
asset_add() {
if (uni.getStorageSync('apply_status') == 3) {
this.$message.error('用户认证审核中');
return false;
}
if (uni.getStorageSync('apply_status') == 2) {
this.$message.error('用户认证失败,请重新提交审核');
return false;
}
if (uni.getStorageSync('third_auth_status') == 0) {
this.$message.error('请提交实名认证');
return false;
}
if (uni.getStorageSync('third_auth_status') == 2) {
this.$message.error('未注册天府信用通账号,请联系管理员');
return false;
}
uni.navigateTo({
url: '/asset_add',
});
},
handleSizeChange(val) {
this.list_rows = val;
this.getData();
},
handleCurrentChange(val) {
this.page = val;
this.getData();
},
getData() {
this._get(
'asset.asset/index',
{
methods:{
downloadPDF(e) {
if(!e){
this.$message.error('评估报告生成中~');
}else{
window.open(e, '_blank');
}
// 下载
// const pdfUrl = e;
// const a = document.createElement('a');
// a.href = pdfUrl;
// a.download = '评估报告.pdf';
// a.click();
// document.body.removeChild(a);
},
goEdit(e){
if(uni.getStorageSync('apply_status')==3){
this.$message.error('用户认证审核中');
return false;
}
if(uni.getStorageSync('apply_status')==2){
this.$message.error('用户认证失败,请重新提交审核');
return false;
}
this.$router.push({
path: 'asset_add',
query: {
id: e
}
})
},
finds(e){
uni.showModal({
title: '审核意见',
content: e.auth_remark?e.auth_remark:"无审核意见说明",
showCancel: true,
cancelText: '取消',
cancelColor: '#cccccc',
confirmText: '确定',
confirmColor: '#F78A30',
success: function (res) {
if (res.confirm) {
} else if (res.cancel) {
console.log('用户点击取消');
}
},
fail: function (err) {
console.log('调用失败:', err);
},
complete: function () {
}
});
},
asset_add(){
if(uni.getStorageSync('apply_status')==3){
this.$message.error('用户认证审核中');
return false;
}
if(uni.getStorageSync('apply_status')==2){
this.$message.error('用户认证失败,请重新提交审核');
return false;
}
if(uni.getStorageSync('third_auth_status')==0){
this.$message.error('请提交实名认证');
return false;
}
if(uni.getStorageSync('third_auth_status')==2){
this.$message.error('未注册天府信用通账号,请联系管理员');
return false;
}
uni.navigateTo({
url: '/asset_add'
});
},
/*每页多少条*/
handleSizeChange(val){
this.list_rows = val;
this.getData();
},
/*选择第几页*/
handleCurrentChange(val){
this.page = val;
this.getData();
},
getData(){
this._get('asset.asset/index',{
page: this.page,
limit: this.list_rows,
name: this.name,
},
(res) => {
},res=>{
this.listData = res.data.data;
this.total = res.data.total;
},
(err) => {
}
,err=>{
uni.showToast({
icon: 'none',
title: err.data.msg,
});
icon:'none',
title: err.data.msg
})
return;
// this.$message(err.data.msg);
}
);
},
openAgreementDialog(row) {
this.agreementDialogVisible = true;
this.agreementChecked = true;
this.agreementRow = row;
},
onSignAgreement() {
this.signDialogVisible = true;
this.agreementDialogVisible = false;
},
closeSignDialog() {
this.signDialogVisible = false;
this.clearCanvas();
},
initCanvas() {
this.$nextTick(() => {
this.devicePixelRatio = window.devicePixelRatio || 1;
// 获取canvas实际显示区域的dom宽高
const canvasDom = document.getElementById('signatureCanvas');
if (canvasDom) {
const { width, height } = canvasDom.getBoundingClientRect();
this.canvasOffsetLeft = canvasDom.getBoundingClientRect().left;
this.canvasOffsetTop = canvasDom.getBoundingClientRect().top;
// 设置canvas物理分辨率,防止高DPR模糊
canvasDom.width = width * this.devicePixelRatio;
canvasDom.height = height * this.devicePixelRatio;
canvasDom.style.width = width + 'px';
canvasDom.style.height = height + 'px';
}
this.ctx = uni.createCanvasContext('signatureCanvas', this);
this.ctx.setStrokeStyle('#000000');
this.ctx.setLineWidth(3);
this.ctx.setLineCap('round');
this.ctx.setLineJoin('round');
});
},
// 获取鼠标或触摸点在canvas上的真实坐标,解决canvas缩放/高DPR错位问题
getRectAndCoords(e, cb) {
const canvasDom = document.getElementById('signatureCanvas');
let x = 0, y = 0;
if (canvasDom) {
const rect = canvasDom.getBoundingClientRect();
let clientX, clientY;
if (e.touches && e.touches.length) {
clientX = e.touches[0].clientX;
clientY = e.touches[0].clientY;
} else if (typeof e.clientX === 'number' && typeof e.clientY === 'number') {
clientX = e.clientX;
clientY = e.clientY;
} else if (typeof e.pageX === 'number' && typeof e.pageY === 'number') {
clientX = e.pageX - window.scrollX;
clientY = e.pageY - window.scrollY;
}
const dpr = this.devicePixelRatio;
x = ((clientX - rect.left) * dpr);
y = ((clientY - rect.top) * dpr);
}
cb(x, y);
},
startDrawing(e) {
e.preventDefault && e.preventDefault();
this.isDrawing = true;
this.getRectAndCoords(e, (x, y) => {
this.lastX = x;
this.lastY = y;
this.ctx.beginPath();
this.ctx.moveTo(x, y);
this.ctx.stroke();
this.ctx.draw(true);
});
},
draw(e) {
e.preventDefault && e.preventDefault();
if (!this.isDrawing) return;
this.getRectAndCoords(e, (x, y) => {
this.ctx.beginPath();
this.ctx.moveTo(this.lastX, this.lastY);
this.ctx.lineTo(x, y);
this.ctx.stroke();
this.ctx.draw(true);
this.lastX = x;
this.lastY = y;
});
},
stopDrawing(e) {
this.isDrawing = false;
},
clearCanvas() {
this.ctx.clearRect(0, 0, this.canvasWidth * this.devicePixelRatio, this.canvasHeight * this.devicePixelRatio);
this.ctx.draw();
},
saveSignature() {
const _this = this;
uni.canvasToTempFilePath({
x: 0,
y: 0,
width: this.canvasWidth * this.devicePixelRatio,
height: this.canvasHeight * this.devicePixelRatio,
destWidth: this.canvasWidth * this.devicePixelRatio,
destHeight: this.canvasHeight * this.devicePixelRatio,
canvasId: 'signatureCanvas',
success: function (res) {
_this.getBase64FromCanvas();
},
fail: function (err) {
console.error('保存失败', err);
},
}, this);
},
getBase64FromCanvas() {
const _this = this;
const query = uni.createSelectorQuery().in(this);
query
.select('#signatureCanvas')
.fields({ node: true, size: true })
.exec((res) => {
if (res[0] && res[0].node && typeof res[0].node.toDataURL === 'function') {
const canvas = res[0].node;
const base64 = canvas.toDataURL('image/png');
_this.signatureBase64 = base64;
_this.uploadToBackend(base64);
} else {
uni.canvasToTempFilePath({
canvasId: 'signatureCanvas',
success: (ret) => {
if (window && window.FileReader) {
fetch(ret.tempFilePath)
.then(res => res.blob())
.then(blob => {
const reader = new FileReader();
reader.onload = (event) => {
_this.signatureBase64 = event.target.result;
_this.uploadToBackend(event.target.result);
};
reader.readAsDataURL(blob);
});
} else {
_this.uploadToBackend(ret.tempFilePath);
}
},
}, _this);
}
});
},
uploadToBackend(base64Data) {
const that = this;
let filetype = "image";
function dataURLtoBlob(dataurl) {
let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {type:mime});
}
const blob = dataURLtoBlob(base64Data);
const formData = new FormData();
formData.append('iFile', blob, 'signature.png');
formData.append('type', filetype);
formData.append('app_id', '10001');
formData.append('token', uni.getStorageSync('token') || '');
const xhr = new XMLHttpRequest();
xhr.open('POST', this.config.app_url+'/api/file.upload/file', true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
let res;
try {
res = JSON.parse(xhr.responseText);
} catch (e) {
that.$message.error('签名上传返回异常');
return;
}
if(res.code === 1){
that.toqy(res.data.file_id);
} else {
that.$message.error(res.msg || '上传失败');
}
} else {
that.$message.error('上传失败');
}
}
};
xhr.onerror = function () {
that.$message.error('网络错误');
};
xhr.send(formData);
},
toqy(e) {
this._post('/asset.Asset/sign', {
signature_file_id: e,
id: this.agreementRow.id,
}, res => {
this.$message.success('签约提交成功!');
this.signDialogVisible = false;
this.agreementDialogVisible = false;
this.getData();
}, err => {
uni.showToast({
icon: 'none',
title: err.data.msg
})
return;
});
},
openPayDialog(row) {
this.payDialogVisible = true;
this.payRow = row.id;
},
onPaySuccess() {
this.payDialogVisible = false;
this.getData();
},
},
};
);
},
}
}
</script>
<style lang="scss">
@@ -807,7 +398,7 @@ export default {
::v-deep .el-table__fixed-right::before, .el-table__fixed::before{
background-color:#ffffff !important;
}
.asset_list_desc{
width: 908px;
height: 72px;
@@ -833,218 +424,8 @@ export default {
background-color: #3D3D3D;
margin-right: 10px;
}
.agreement-content {
white-space: pre-wrap;
}
.agreement-dialog-custom {
width: 657px !important;
height: 738px !important;
background: #FFFFFF !important;
box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.2) !important;
border-radius: 8px !important;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
padding: 0 !important;
}
.agreement-dialog-header {
width: 100%;
text-align: center;
margin-top: -35px;
}
.agreement-dialog-title {
letter-spacing: 1px;
font-family: Source Han Sans, Source Han Sans;
font-weight: 500;
font-size: 18px;
color: #3D3D3D;
}
.agreement-content {
white-space: pre-wrap;
padding: 0 42px;
width: 100%;
box-sizing: border-box;
}
.agreement-dialog-center {
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
margin-top: 20px;
}
.agreement-checkbox-custom {
margin-top: 18px !important;
display: flex;
justify-content: center;
width: 220px;
--el-checkbox-checked-icon-color: #F78A30;
--el-checkbox-checked-bg-color: #F78A30;
}
::v-deep .el-checkbox__input.is-checked .el-checkbox__inner {
background-color: #F78A30 !important;
border-color: #F78A30 !important;
}
.dialog-footer-center {
width: 100%;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
margin-top: 20px;
}
.agreement-sign-btn {
width: 236px !important;
height: 46px !important;
background: #F78A30 !important;
border: none !important;
color: #fff !important;
font-size: 16px;
border-radius: 4px !important;
display: flex;
align-items: center;
justify-content: center;
transition: background 0.2s;
}
.agreement-sign-btn[disabled], .agreement-sign-btn.is-disabled {
background: #FFDEC4 !important;
color: #fff !important;
cursor: not-allowed !important;
}
::v-deep .el-checkbox__input.is-checked+.el-checkbox__label , ::v-deep .el-checkbox__label
{
color: #3d3d3d !important;
font-size: 14px !important;
margin-top: -2px !important;
}
.sign-dialog-custom {
width: 730px !important;
height: 660px !important;
background: #FFFFFF !important;
box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.2) !important;
border-radius: 8px !important;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
padding: 0 !important;
}
.sign-content {
flex: 1;
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
box-sizing: border-box;
padding-bottom: 30px;
}
.sign-title-text {
color: #333;
font-size: 15px;
margin-bottom: 20px;
margin-top: 0;
}
.signature-container {
width: 510px;
height: 300px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 10px;
border: 1px solid #B5D4EB;
overflow: hidden;
box-sizing: border-box;
margin-bottom: 12px;
max-width: 98vw;
max-height: 60vh;
}
.signature-container-bg {
background: #F0F9FF;
}
.signature-canvas {
display: block;
margin: 0 auto;
background: transparent;
}
.sign-tip-text {
font-size: 12px;
color: #999;
margin-top: 3px;
text-align: center;
margin-bottom: 0;
}
.sign-btn-group {
display: flex;
justify-content: center;
align-items: center;
margin-top: 26px;
gap: 16px;
}
.sign-reset-btn {
width: 100px;
height: 38px;
border-radius: 4px;
border: 1px solid #F78A30;
background: #fff;
color: #F78A30;
font-size: 14px;
}
.sign-confirm-btn {
width: 100px;
height: 38px;
border-radius: 4px;
background: #F78A30 !important;
color: #fff !important;
font-size: 15px;
border: none !important;
}
.pay-dialog-custom {
width: 480px !important;
background: #fff !important;
border-radius: 10px !important;
box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.18) !important;
}
@media screen and (max-width: 950px) {
.sign-dialog-custom {
width: 98vw !important;
height: 98vh !important;
}
.signature-container {
width: 96vw !important;
max-width: 98vw !important;
height: 48vw !important;
max-height: 90vw !important;
}
}
@media screen and (max-width: 768px) {
.agreement-dialog-custom {
width: 99vw !important;
height: 98vh !important;
padding: 0 !important;
}
.sign-dialog-custom {
width: 99vw !important;
height: 98vh !important;
}
.signature-container {
width: 95vw !important;
max-width: 98vw !important;
height: 34vw !important;
max-height: 56vw !important;
}
.pay-dialog-custom {
width: 99vw !important;
}
}
</style>
+427
View File
@@ -0,0 +1,427 @@
<template>
<Layout :index="-1" :banner="0" :img="'/static/img/about.jpg'" :titles="'个人中心'" :title_content="'个人中心'">
<view class="bg ptm-80">
<view class="content">
<view class="content_left">
<memberleft :index="'2'"></memberleft>
</view>
<view class="content_right">
<view class="mtitle">
<image src="../static/img/member/iconqq.png" class="mimg"></image>
装备道具资产确权
</view>
<view class="lines"></view>
<view class="asset_list_desc">
<view class="assetDesc">
<view class="assetDesc_dian"></view>
您拥有的游戏CDkey游戏账号游戏道具装备饰品都是属于您的资产
</view>
<view class="assetDesc">
<view class="assetDesc_dian"></view>
您拥有资产的使用权或所有权您可以在我们平台把资产卖给需要的人去使用
</view>
</view>
<view class="content_r">
<view class="d-b-c">
<view class="adds" @tap="asset_add()">
<image src="../static/img/member/add.png" class="addimg"></image>
新增
</view>
<view class="search-box d-c-c">
<input type="text" v-model="name" class="search-name" name="param" placeholder="请输入资产名称" value="" placeholder-class="search-names">
<view class="adds" id="btn_sub" @tap="getData()">
<image src="../static/img/member/ss.png" class="addimgs"></image>
搜索
</view>
</view>
</view>
<view class="qqtable">
<el-table
:data="listData"
:cell-style="{ textAlign: 'center', fontSize: '12px', color: '#1D2129'}"
class="center-table"
style="width: 100%">
<el-table-column
fixed
prop="no"
label="资产编号"
width="150">
</el-table-column>
<el-table-column
prop="name"
label="资产名称"
width="140">
</el-table-column>
<el-table-column
prop="province"
label="资产类型"
width="110">
<template slot-scope="scope">
<span>数字资产</span>
</template>
</el-table-column>
<el-table-column
prop="username"
label="存证人"
width="120">
</el-table-column>
<el-table-column
prop="create_time"
label="提交时间"
width="90">
</el-table-column>
<el-table-column
prop="auth_status"
label="状态"
>
<template slot-scope="scope">
<span v-if="scope.row.auth_status == 'draft'" >未提交</span>
<span v-if="scope.row.auth_status == 'pending'" >审核中</span>
<span v-if="scope.row.auth_status == 'pass'" class="green">审核成功</span>
<span v-if="scope.row.auth_status == 'reject'" class="red">审核失败</span>
</template>
</el-table-column>
<el-table-column
prop="tx_hash"
label="存证哈希"
width="150">
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="150"
>
<template slot-scope="scope">
<!-- <el-button @tap="goEdit(scope.row.id)" type="text" size="small" class="asset_e" v-if="scope.row.auth_status== 'draft'">继续填写</el-button> -->
<el-button @tap="goEdit(scope.row.id)" type="text" size="small" class="asset_e" v-if="scope.row.auth_status!= 'reject'">查看详情</el-button>
<el-button @tap="goEdit(scope.row.id)" type="text" size="small" class="asset_e" v-if="scope.row.auth_status== 'reject'">修改</el-button>
<!-- <el-button @click="downloadPDF(scope.row.report_url)" type="text" size="small" class="asset_l" v-if="scope.row.auth_status== 'pass'&&scope.row.asset_status">查看评估报告</el-button> -->
<el-button @click="downloadPDF(scope.row.report_url)" type="text" size="small" class="asset_l" v-if="scope.row.auth_status== 'pass'&&!scope.row.asset_status== 'fail'">评估中</el-button>
<el-button @tap="finds(scope.row)" type="text" size="small" class="asset_l" v-if="scope.row.auth_status== 'reject'">查看意见</el-button>
</template>
</el-table-column>
</el-table>
</view>
<el-pagination v-if="total>10" background layout="prev, pager, next" :total="total" :current-page="page" :page-size="list_rows" @size-change="handleSizeChange" @current-change="handleCurrentChange"></el-pagination>
</view>
</view>
</view>
</view>
</Layout>
</template>
<script>
import Layout from './part/layouts.vue';
import memberleft from './part/member_left.vue';
export default {
components:{
Layout,
memberleft
},
data(){
return {
page: 1,
list_rows: 10,
listData: [],
total: 0,
name:'',
}
},
created() {
const width = window.innerWidth;
const height = window.innerHeight;
const mobileWidth = 768; // 可以根据需要调整这个值
const isMobile = width <= mobileWidth || height <= mobileWidth;
if(isMobile){
this.list_rows = 10;
}
let obj = this.$Route.query;
if(obj.hasOwnProperty('index')){
this.category_id = Number(obj.index);
}
},
onShow() {
this.getData();
},
methods:{
downloadPDF(e) {
if(!e){
this.$message.error('评估报告生成中~');
}else{
window.open(e, '_blank');
}
// 下载
// const pdfUrl = e;
// const a = document.createElement('a');
// a.href = pdfUrl;
// a.download = '评估报告.pdf';
// a.click();
// document.body.removeChild(a);
},
goEdit(e){
if(uni.getStorageSync('apply_status')==3){
this.$message.error('用户认证审核中');
return false;
}
if(uni.getStorageSync('apply_status')==2){
this.$message.error('用户认证失败,请重新提交审核');
return false;
}
this.$router.push({
path: 'digital_assets_add',
query: {
id: e
}
})
},
finds(e){
uni.showModal({
title: '审核意见',
content: e.fail_reason?e.fail_reason:"无审核意见说明",
showCancel: true,
cancelText: '取消',
cancelColor: '#cccccc',
confirmText: '确定',
confirmColor: '#F78A30',
success: function (res) {
if (res.confirm) {
} else if (res.cancel) {
console.log('用户点击取消');
}
},
fail: function (err) {
console.log('调用失败:', err);
},
complete: function () {
}
});
},
asset_add(){
if(uni.getStorageSync('apply_status')==3){
this.$message.error('用户认证审核中');
return false;
}
if(uni.getStorageSync('apply_status')==2){
this.$message.error('用户认证失败,请重新提交审核');
return false;
}
// if(uni.getStorageSync('third_auth_status')==0){
// this.$message.error('请提交实名认证');
// return false;
// }
// if(uni.getStorageSync('third_auth_status')==2){
// this.$message.error('未注册天府信用通账号,请联系管理员');
// return false;
// }
uni.navigateTo({
url: '/digital_assets_add'
});
},
/*每页多少条*/
handleSizeChange(val){
this.list_rows = val;
this.getData();
},
/*选择第几页*/
handleCurrentChange(val){
this.page = val;
this.getData();
},
getData(){
this._get('gameasset.GameAsset/index',{
page: this.page,
limit: this.list_rows,
name: this.name,
},res=>{
console.log(res.data.data,22222)
this.listData = res.data.data;
this.total = res.data.total;
}
,err=>{
uni.showToast({
icon:'none',
title: err.data.msg
})
return;
// this.$message(err.data.msg);
}
);
},
}
}
</script>
<style lang="scss">
.bg{
width: 100%;
background: #F1F1F1;
min-height: 800px;
}
.content{
width: 1290px;
margin: 0 auto;
padding-top: 14px;
display: flex;
justify-content: space-between;
}
.content_left{
width: 245px;
min-height: 789px;
background: #FFFFFF;
box-shadow: 0px 4px 10px 0px rgba(78,89,105,0.06);
border-radius: 0px 0px 0px 0px;
}
.content_right{
width: 1024px;
min-height: 789px;
background: #FFFFFF;
box-shadow: 0px 4px 10px 0px rgba(78,89,105,0.06);
border-radius: 0px 0px 0px 0px;
}
.mtitle{
font-weight: 500;
font-size: 16px;
color: #3D3D3D;
width: 985px;
margin:0 auto;
height: 48px;
line-height: 48px;
display: flex;
align-items: center;
}
.lines{
width: 985px;
height: 0px;
border: 1px solid #D8D8D8;
opacity: 0.6;
margin:0 auto;
}
.mimg{
width: 20px;
height: 20px;
margin-right: 10px;
margin-left: 23px;
}
.content_r{
padding: 34px 22px;
}
.addimg{
width: 12px;
height: 12px;
margin-left: 5px;
}
.addimgs{
width: 16px;
height: 16px;
margin-left: 8px;
}
.adds{
width: 80px;
height: 32px;
background: #F78A30;
border-radius: 4px 4px 4px 4px;
font-weight: 400;
font-size: 14px;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.search-box{
display: flex;
align-items: center;
justify-content: space-between;
width: 358px;
}
.search-name{
width: 232px;
height: 32px;
background: #F7F8FA;
padding: 0 12px;
font-size: 14px;
color: #333333;
line-height: 32px;
}
.search-names{
font-weight: 400;
font-size: 14px;
color: #86909C;
}
.qqtable{
margin-top: 30px;
}
::v-deep .el-table__header th {
background-color: #F2F3F5;
font-weight: 400;
font-size: 14px;
color: #1D2129;
text-align: center;
}
.green{
font-weight: 400;
font-size: 12px;
color: #20BC30;
}
.red{
font-weight: 400;
font-size: 12px;
color: #EA3B3B;
}
.center-table .el-table__header th,
.center-table .el-table__body td {
color: #EA3B3B !important;
}
.asset_e{
font-weight: 400;
font-size: 12px;
color: #F6773C;
}
.asset_l{
font-weight: 400;
font-size: 12px;
color: #165DFF;
}
::v-deep .el-table__fixed-right::before, .el-table__fixed::before{
background-color:#ffffff !important;
}
.asset_list_desc{
width: 908px;
height: 48px;
background: rgba(255,247,241,0.6);
border-radius: 8px 8px 8px 8px;
border: 1px solid #F78A30;
margin: 24px auto;
padding: 24px;
}
.assetDesc{
display: flex;
align-items: center;
font-weight: 400;
font-size: 14px;
color: #3D3D3D;
line-height: 24px;
text-align: left;
}
.assetDesc_dian{
width: 6px;
height: 6px;
border-radius: 100%;
background-color: #3D3D3D;
margin-right: 10px;
}
@media screen and (max-width: 768px) {
}
</style>
+509
View File
@@ -0,0 +1,509 @@
<template>
<Layout :index="-1" :banner="0" :img="'/'" :titles="'登录'" :title_content="'登录'">
<view class="bg d-b-c">
<view class="bgl d-c-c">
<image class="limg" src="../static/img/login/bgl.png" ></image>
</view>
<view class="bgr d-b-c d-c">
<image class="logo_img" src="../static/img/login/logo.png" ></image>
<view class="login_type">
<text class="login_text" :class="{'check':l_type==1}" @tap="check(1)">密码登录</text>
<text class="login_text1" :class="{'check':l_type==2}" @tap="check(2)">验证码登录</text>
</view>
<view class="input-wrap" >
<view class="login_input">
<image src="../static/img/login/phone.png" mode="widthFix" class="icons"></image>
<input class="linput" v-model="formData.mobile" type="text" placeholder="请输入注册手机号" maxlength="16" placeholder-class="placeholder-class" >
</view>
<view class="login_code" v-if="l_type==2">
<image src="../static/img/login/yzicon.png" mode="widthFix" class="icons"></image>
<input class="linput2" v-model="formData.code" type="text" placeholder="请输入短信验证码" maxlength="8" placeholder-class="placeholder-class" />
<view class="dynacode" @click="sendMobileCode">{{dynacodeData.codeText }}</view>
</view>
<view class="login_input" v-if="l_type==1">
<image src="../static/img/login/licon.png" mode="widthFix" class="icons"></image>
<!-- <el-input class="minput" placeholder="请输入密码" v-model="formData.password" placeholder-class="placeholder-class" show-password></el-input> -->
<input class="minput" v-model="formData.password" type="password" placeholder="请输入密码" placeholder-class="placeholder-class" >
</view>
<!-- 新增图形验证码 start -->
<view class="login_code login_code2">
<image src="../static/img/login/yzicon.png" mode="widthFix" class="icons"></image>
<input class="linput" v-model="formData.captcha" type="text" placeholder="请输入图形验证码" maxlength="6" placeholder-class="placeholder-class" >
<image :src="captcha_img" mode="widthFix" class="captcha_img" @tap="getCaptcha()"></image>
</view>
</view>
<!-- <view class="d-b-c agreement"> -->
<!-- <view class="login_checks" >
<label class="radio"><radio value="r1" :checked="checked" @tap="select()" activeBackgroundColor="#F78B32" borderColor="#F78B32" color="#F78B32" style="transform:scale(0.65);border-radius: 100%;" /></label>
注册需要同意并接受<text style="color: #F6773C;cursor: pointer;" @tap="active({url:'https://cogapi.scszsj.com/service.html'})">平台用户协议</text>
</view>
<view class="login_checks" >
<label class="radio"><radio value="r2" :checked="checkeds" @tap="selects()" activeBackgroundColor="#F78B32" borderColor="#F78B32" color="#F78B32" style="transform:scale(0.65);border-radius: 100%;" /></label>
同意同步注册天府信用通
</view>
</view> -->
<view class="login_bt" @tap="dologin()" v-if="l_type==1">
登录
</view>
<view class="login_bt" @tap="smslogin()" v-if="l_type==2">
登录
</view>
<view class="d-b-c gourls" >
<view class="go_login" @tap="register()">注册账号</view>
<view class="go_forget" @tap="active({url: 'forget'})">忘记密码</view>
</view>
</view>
</view>
</Layout>
</template>
<script>
import Layout from './part/layoutNoh.vue';
export default {
components:{
Layout
},
data(){
return {
page: 1,
list_rows: 10,
listData: [],
total: 0,
detail: [],
nextdetail: [],
id: '',
category_id:2,
checkeds:false,
checked:true,
formData:[],
dynacodeData: {
seconds: 120,
timer: null,
codeText: '发送验证码',
isSend: false
},
captcha_img:'',
l_type:1
}
},
created() {
this.getCaptcha();
},
watch: {
'dynacodeData.seconds': {
handler(newValue, oldValue) {
if (newValue == 0) {
clearInterval(this.dynacodeData.timer);
this.dynacodeData = {
seconds: 120,
timer: null,
codeText: '获取验证码',
isSend: false
};
}
},
immediate: true,
deep: true
}
},
methods:{
getCaptcha(){
this._get('user.Useropen/generateCaptcha',{
},res=>{
console.log(res,33)
if(res.code==1){
this.captcha_img = res.data.img;
this.formData.captchaKey = res.data.key;
}
})
},
check(e){
this.l_type=e;
},
register(){
this.$router.replace({
path: 'register'
});
},
select(){
if(this.checked==true){
this.checked=false;
}else{
this.checked=true;
}
},
selects(){
if(this.checkeds==true){
this.checkeds=false;
}else{
this.checkeds=true;
}
},
active(e){
const path = this.$route.path;
// const query = this.$route.query;
if(path=='/'+e.url){
return;
}
if(e.url.includes("http")){
window.open(e.url, '_blank');
// window.location.href = '';
}
else{
this.$router.replace({
path: e.url
});
}
},
sendMobileCode(){
if(this.checked==false){
uni.showToast({
icon:'none',
title: '请同意用户协议',
duration:1500
})
return;
}
if(!this.formData.mobile){
uni.showToast({
icon:'none',
title: '请输入手机号',
duration:1500
})
return;
}
this._post('user.Useropen/sendCode',{
mobile: this.formData.mobile,
type: 'login',
},res=>{
this.dynacodeData.timer = setInterval(() => {
this.dynacodeData.seconds--;
this.dynacodeData.codeText = this.dynacodeData.seconds + 's后重发';
}, 1000);
uni.showToast({
icon:'none',
title: '发送成功',
duration:1500
})
}
,err=>{
uni.showToast({
icon:'none',
title: err.data.msg
})
return;
// this.$message(err.data.msg);
}
);
},
smslogin(){
if(this.checked==false){
uni.showToast({
icon:'none',
title: '请同意用户协议',
duration:1500
})
return;
}
if(this.formData.mobile==''){
uni.showToast({
icon:'none',
title: '请输入手机号',
duration:1500
})
return;
}
if(this.formData.password==''){
uni.showToast({
icon:'none',
title: '请输入密码',
duration:1500
})
return;
}
if(this.formData.captcha==''){
uni.showToast({
icon:'none',
title: '请输入图形验证码',
duration:1500
})
return;
}
this._post('user.Useropen/smslogin',{
mobile: this.formData.mobile,
code: this.formData.code,
captcha: this.formData.captcha,
captchaKey: this.formData.captchaKey,
},res=>{
uni.setStorageSync('token',res.data.token)
uni.showToast({
icon:'none',
title: '登录成功',
duration:1500
})
this.token =res.data.token;
setTimeout(() => {
uni.reLaunch({
url: '/pages/index' // 替换为你实际的首页路径
});
}, 2000);
}
,err=>{
uni.showToast({
icon:'none',
title: err.data.msg
})
return;
// this.$message(err.data.msg);
}
);
},
dologin(){
if(this.checked==false){
uni.showToast({
icon:'none',
title: '请同意用户协议',
duration:1500
})
return;
}
if(this.formData.mobile==''){
uni.showToast({
icon:'none',
title: '请输入手机号',
duration:1500
})
return;
}
if(this.formData.password==''){
uni.showToast({
icon:'none',
title: '请输入密码',
duration:1500
})
return;
}
if(this.formData.captcha==''){
uni.showToast({
icon:'none',
title: '请输入图形验证码',
duration:1500
})
return;
}
this._post('user.Useropen/phonelogin',{
mobile: this.formData.mobile,
password: this.formData.password,
captcha: this.formData.captcha,
captchaKey: this.formData.captchaKey,
},res=>{
uni.setStorageSync('token',res.data.token)
uni.showToast({
icon:'none',
title: '登录成功',
duration:1500
})
this.token =res.data.token;
setTimeout(() => {
uni.reLaunch({
url: '/pages/index' // 替换为你实际的首页路径
});
// this.$router.replace({
// path: '/'
// });
}, 2000);
}
,err=>{
uni.showToast({
icon:'none',
title: err.data.msg
})
return;
// this.$message(err.data.msg);
}
);
},
}
}
</script>
<style lang="scss">
.bg{
width: 1920px;
height: 100vh;
background-image: url('../static/img/login/bgs.png');
background-size: 100% 100%;
}
.bgl ,.bgr{
width: 50%;
}
.bgl .limg{
width: 752px;
height: 760px;
}
.logo_img{
width: 471px;
height: 66px;
margin-bottom: 54px;
}
.input-wrap{
min-height: 152px;
}
.login_input{
width: 468px;
height: 54px;
border-radius: 8px 8px 8px 8px;
border: 1px solid rgba(102,102,102,0.35);
display: flex;
align-items: center;
margin-bottom: 20px;
// padding: 0 20px;
}
.login_code{
width: 468px;
height: 56px;
border-radius: 8px 8px 8px 8px;
border: 1px solid rgba(102,102,102,0.35);
display: flex;
align-items: center;
margin-bottom: 20px;
}
.icons{
width: 24px;
height: 24px;
margin-left: 20px;
}
.placeholder-class{
font-size: 18px;
color: #939393; /* 你想要的颜色 */
line-height: 56px;
}
.placeholder-class::placeholder {
color: red; /* 你想要的颜色 */
}
.linput{
width: 80%;
height: 54px;
display: flex;
align-items: center;
margin-top: 2px;
margin-left: 4px;
font-size: 16px;
}
.linput2{
width: 60%;
height: 54px;
display: flex;
align-items: center;
margin-top: 2px;
margin-left: 4px;
font-size: 16px;
}
.minput{
width: 87% !important;
height: 54px !important;
display: flex;
align-items: center;
margin-top: 2px;
margin-left: 4px;
font-size: 16px;
}
.dynacode{
width: 154px;
height: 56px;
background-image: url('../static/img/login/yzbg.png');
background-size: 100% 100%;
text-align: center;
font-size: 16px;
color: #3B3B3B;
line-height: 56px;
cursor: pointer;
}
::v-deep .el-input__inner{
background-color: transparent !important;
border: none !important;
padding: 0 !important;
font-size: 18px;
// color: #939393; /* 你想要的颜色 */
line-height: 56px;
}
::v-deep .uni-radio-input{
border-radius: unset !important;
}
.login_checks{
font-size: 14px;
color: #3D3D3D;
}
.login_bt{
width: 468px;
height: 64px;
background: #F78A30;
border-radius: 8px 8px 8px 8px;
color: #ffffff;
text-align: center;
line-height: 64px;
font-weight: 500;
font-size: 22px;
cursor: pointer;
margin-top: 20px;
}
.gourls{
width: 468px;
margin-top: 22px;
}
.go_login{
text-align: left;
font-weight: 400;
font-size: 16px;
color: #F6773C;
cursor: pointer;
}
.go_forget{
font-weight: 400;
font-size: 16px;
color: #3D3D3D;
cursor: pointer;
}
.agreement{
margin-top: 2px;
margin-bottom: 54px;
}
.login_type{
display: flex;
width: 49%;
margin-bottom: 44px;
}
.login_text{
font-size: 22px;
color: #3B3B3B;
line-height: 32px;
cursor: pointer;
}
.login_text1{
font-size: 22px;
color: #3B3B3B;
line-height: 32px;
margin-left: 30px;
cursor: pointer;
}
.check{
color: #FF8622;
border-bottom: 2px solid #FF8622;
}
.login_code2{
justify-content: space-between;
}
.captcha_img{
width: 115px !important;
height: 54px !important;
float: right;
}
</style>
+56 -7
View File
@@ -17,7 +17,7 @@
</view>
<view class="login_code" v-if="l_type==2">
<image src="../static/img/login/yzicon.png" mode="widthFix" class="icons"></image>
<input class="linput2" v-model="formData.code" type="text" placeholder="请输入短验证码" maxlength="8" placeholder-class="placeholder-class" />
<input class="linput2" v-model="formData.code" type="text" placeholder="请输入短验证码" maxlength="8" placeholder-class="placeholder-class" />
<view class="dynacode" @click="sendMobileCode">{{dynacodeData.codeText }}</view>
</view>
<view class="login_input" v-if="l_type==1">
@@ -25,6 +25,14 @@
<!-- <el-input class="minput" placeholder="请输入密码" v-model="formData.password" placeholder-class="placeholder-class" show-password></el-input> -->
<input class="minput" v-model="formData.password" type="password" placeholder="请输入密码" placeholder-class="placeholder-class" >
</view>
<!-- 新增图形验证码 start -->
<view class="login_code login_code2">
<image src="../static/img/login/yzicon.png" mode="widthFix" class="icons"></image>
<input class="linput" v-model="formData.captcha" type="text" placeholder="请输入图形验证码" maxlength="6" placeholder-class="placeholder-class" >
<image :src="captcha_img" mode="widthFix" class="captcha_img" @tap="getCaptcha()"></image>
</view>
</view>
<!-- <view class="d-b-c agreement"> -->
<!-- <view class="login_checks" >
@@ -77,11 +85,12 @@
codeText: '发送验证码',
isSend: false
},
captcha_img:'',
l_type:1
}
},
created() {
this.getCaptcha();
},
watch: {
'dynacodeData.seconds': {
@@ -101,6 +110,18 @@
}
},
methods:{
getCaptcha(){
this._get('user.Login/generateCaptcha',{
timestamp: '1784172260',
signature: '1547f362dca32f7f7cbacb1b0c4661906b2d5e6a5bac3b322331f11d8ae7d7cd',
},res=>{
console.log(res,33)
if(res.code==1){
this.captcha_img = res.data.img;
this.formData.captchaKey = res.data.key;
}
})
},
check(e){
this.l_type=e;
},
@@ -158,7 +179,7 @@
return;
}
this._post('user.Useropen/sendCode',{
this._post('user.Login/sendCode',{
mobile: this.formData.mobile,
type: 'login',
},res=>{
@@ -207,10 +228,19 @@
})
return;
}
this._post('user.Useropen/smslogin',{
if(this.formData.captcha==''){
uni.showToast({
icon:'none',
title: '请输入图形验证码',
duration:1500
})
return;
}
this._post('user.Login/smslogin',{
mobile: this.formData.mobile,
code: this.formData.code,
captcha: this.formData.captcha,
captchaKey: this.formData.captchaKey,
},res=>{
uni.setStorageSync('token',res.data.token)
uni.showToast({
@@ -260,10 +290,21 @@
})
return;
}
this._post('user.Useropen/phonelogin',{
if(this.formData.captcha==''){
uni.showToast({
icon:'none',
title: '请输入图形验证码',
duration:1500
})
return;
}
this._post('user.Login/phonelogin',{
mobile: this.formData.mobile,
password: this.formData.password,
captcha: this.formData.captcha,
captchaKey: this.formData.captchaKey,
timestamp: '1784172260',
signature: '1547f362dca32f7f7cbacb1b0c4661906b2d5e6a5bac3b322331f11d8ae7d7cd',
},res=>{
uni.setStorageSync('token',res.data.token)
uni.showToast({
@@ -461,4 +502,12 @@
color: #FF8622;
border-bottom: 2px solid #FF8622;
}
.login_code2{
justify-content: space-between;
}
.captcha_img{
width: 115px !important;
height: 54px !important;
float: right;
}
</style>
+2 -4
View File
@@ -28,18 +28,16 @@
<image class="zsimg" src="../../static/img/member/qqx.png" v-else></image>
<span slot="title" class="tt" :class="{'active-color':index=='3'}">游戏产品评估确权</span>
</el-menu-item>
<el-menu-item @tap="goPath({url: 'pay_list'})" >
<!-- <i class="el-icon-data-analysis" :class="{'active-color':index=='3'}"></i> -->
<!-- <el-menu-item @tap="goPath({url: 'pay_list'})" >
<image class="zsimg" src="../../static/img/member/fkx.png" v-if="index=='4'"></image>
<image class="zsimg" src="../../static/img/member/fk.png" v-else></image>
<span slot="title" class="tt" :class="{'active-color':index=='4'}">付款记录</span>
</el-menu-item>
<el-menu-item @tap="goPath({url: 'notice_list'})" >
<!-- <i class="el-icon-data-analysis" :class="{'active-color':index=='3'}"></i> -->
<image class="zsimg" src="../../static/img/member/tz.png" v-if="index=='5'"></image>
<image class="zsimg" src="../../static/img/member/tzx.png" v-else></image>
<span slot="title" class="tt" :class="{'active-color':index=='5'}">平台通知</span>
</el-menu-item>
</el-menu-item> -->