广告
This commit is contained in:
parent
3e645eeeda
commit
2f262acff4
2
App.vue
2
App.vue
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
<style>
|
<style>
|
||||||
/*每个页面公共css */
|
/*每个页面公共css */
|
||||||
@import "./static/style/icons.css";
|
@import "./common/style/icons.css";
|
||||||
|
|
||||||
/* 每个页面公共css */
|
/* 每个页面公共css */
|
||||||
/* 解决小程序和app滚动条的问题 */
|
/* 解决小程序和app滚动条的问题 */
|
||||||
|
@ -99,6 +99,15 @@ const timeSplit = function(value) {
|
|||||||
var regex = new RegExp('-', 'g');
|
var regex = new RegExp('-', 'g');
|
||||||
return value.replace(regex, '.');
|
return value.replace(regex, '.');
|
||||||
}
|
}
|
||||||
|
const objIsEmpty = function(obj) {
|
||||||
|
if (obj === undefined) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (obj === null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return Object.keys(obj).length === 0;
|
||||||
|
}
|
||||||
export {
|
export {
|
||||||
isEmpty,
|
isEmpty,
|
||||||
status,
|
status,
|
||||||
@ -106,5 +115,6 @@ export {
|
|||||||
proType,
|
proType,
|
||||||
boderStyle,
|
boderStyle,
|
||||||
fontColor,
|
fontColor,
|
||||||
timeSplit
|
timeSplit,
|
||||||
|
objIsEmpty
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
request
|
request
|
||||||
} from "/static/utils/net/http.js";
|
} from "./http.js";
|
||||||
// 公共API
|
// 公共API
|
||||||
const apiPath = {
|
const apiPath = {
|
||||||
getSelfProjectList: '/api/proj/listpage/self', //获取我的项目列表
|
getSelfProjectList: '/api/proj/listpage/self', //获取我的项目列表
|
296
components/ad-popup.vue
Normal file
296
components/ad-popup.vue
Normal file
File diff suppressed because one or more lines are too long
152
manifest.json
152
manifest.json
@ -1,77 +1,79 @@
|
|||||||
{
|
{
|
||||||
"name": "ts_aimz",
|
"name" : "ts_aimz",
|
||||||
"appid": "__UNI__0DFAF97",
|
"appid" : "__UNI__0DFAF97",
|
||||||
"description": "",
|
"description" : "",
|
||||||
"versionName": "1.0.0",
|
"versionName" : "1.0.0",
|
||||||
"versionCode": "100",
|
"versionCode" : "100",
|
||||||
"transformPx": false,
|
"transformPx" : false,
|
||||||
/* 5+App特有相关 */
|
/* 5+App特有相关 */
|
||||||
"app-plus": {
|
"app-plus" : {
|
||||||
"usingComponents": true,
|
"usingComponents" : true,
|
||||||
"nvueStyleCompiler": "uni-app",
|
"nvueStyleCompiler" : "uni-app",
|
||||||
"compilerVersion": 3,
|
"compilerVersion" : 3,
|
||||||
"splashscreen": {
|
"splashscreen" : {
|
||||||
"alwaysShowBeforeRender": true,
|
"alwaysShowBeforeRender" : true,
|
||||||
"waiting": true,
|
"waiting" : true,
|
||||||
"autoclose": true,
|
"autoclose" : true,
|
||||||
"delay": 0
|
"delay" : 0
|
||||||
},
|
},
|
||||||
/* 模块配置 */
|
/* 模块配置 */
|
||||||
"modules": {},
|
"modules" : {},
|
||||||
/* 应用发布信息 */
|
/* 应用发布信息 */
|
||||||
"distribute": {
|
"distribute" : {
|
||||||
/* android打包配置 */
|
/* android打包配置 */
|
||||||
"android": {
|
"android" : {
|
||||||
"permissions": [
|
"permissions" : [
|
||||||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||||
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
/* ios打包配置 */
|
/* ios打包配置 */
|
||||||
"ios": {},
|
"ios" : {},
|
||||||
/* SDK配置 */
|
/* SDK配置 */
|
||||||
"sdkConfigs": {}
|
"sdkConfigs" : {}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/* 快应用特有相关 */
|
/* 快应用特有相关 */
|
||||||
"quickapp": {},
|
"quickapp" : {},
|
||||||
/* 小程序特有相关 */
|
/* 小程序特有相关 */
|
||||||
"mp-weixin": {
|
"mp-weixin" : {
|
||||||
"appid": "",
|
"appid" : "wxe17874894f7ff27b",
|
||||||
"setting": {
|
"setting" : {
|
||||||
"urlCheck": false
|
"urlCheck" : false
|
||||||
},
|
},
|
||||||
"usingComponents": true
|
"usingComponents" : true
|
||||||
},
|
},
|
||||||
"mp-alipay": {
|
"mp-alipay" : {
|
||||||
"usingComponents": true
|
"usingComponents" : true
|
||||||
},
|
},
|
||||||
"mp-baidu": {
|
"mp-baidu" : {
|
||||||
"usingComponents": true
|
"usingComponents" : true,
|
||||||
},
|
"appid" : "testid"
|
||||||
"mp-toutiao": {
|
},
|
||||||
"usingComponents": true
|
"mp-toutiao" : {
|
||||||
},
|
"usingComponents" : true,
|
||||||
"uniStatistics": {
|
"appid" : "testAppId"
|
||||||
"enable": false
|
},
|
||||||
},
|
"uniStatistics" : {
|
||||||
"vueVersion": "3",
|
"enable" : false
|
||||||
"h5": {
|
},
|
||||||
"devServer": {
|
"vueVersion" : "3",
|
||||||
"https": false
|
"h5" : {
|
||||||
}
|
"devServer" : {
|
||||||
}
|
"https" : false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
14
pages.json
14
pages.json
@ -86,6 +86,20 @@
|
|||||||
{
|
{
|
||||||
"navigationBarTitleText" : ""
|
"navigationBarTitleText" : ""
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path" : "pages/common/rule/rule",
|
||||||
|
"style" :
|
||||||
|
{
|
||||||
|
"navigationBarTitleText" : ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path" : "components/ad-popup",
|
||||||
|
"style" :
|
||||||
|
{
|
||||||
|
"navigationBarTitleText" : ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
|
93
pages/common/rule/rule.vue
Normal file
93
pages/common/rule/rule.vue
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
<template>
|
||||||
|
<view class="rule-content-box">
|
||||||
|
<text class="rule-content-title">{{title}}</text>
|
||||||
|
<rich-text class="rule-content-body" nodes="{{content}}"></rich-text>
|
||||||
|
<uni-popup type="message" ref="msg">
|
||||||
|
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
|
||||||
|
</uni-popup>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ProApi from '@/common/js/net/projectApi.js'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
msgType: 'info',
|
||||||
|
msgTxt: '',
|
||||||
|
content: "",
|
||||||
|
title: '',
|
||||||
|
id: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
this.id = options.id
|
||||||
|
uni.setNavigationBarColor({
|
||||||
|
frontColor: '#000000', // 必写项,字体颜色仅支持#ffffff和#000000
|
||||||
|
backgroundColor: '#F0F0F0', // 传递的颜色值,仅支持十六进制颜色
|
||||||
|
animation: { // 可选项
|
||||||
|
duration: 500,
|
||||||
|
timingFunc: 'easeIn'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.getDeal()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
//获取协议内容
|
||||||
|
getDeal() {
|
||||||
|
var _self = this
|
||||||
|
uni.showLoading({
|
||||||
|
title: '加载中...',
|
||||||
|
})
|
||||||
|
ProApi.doGetRuleDate(_self.id)
|
||||||
|
.then(res => {
|
||||||
|
uni.hideLoading()
|
||||||
|
if (res && res.content && res.content != '') {
|
||||||
|
_self.title = res.title
|
||||||
|
_self.content = res.content
|
||||||
|
} else {
|
||||||
|
_self.msgType = 'error'
|
||||||
|
_self.msgTxt = '很遗憾,当前服务器返回的数据有误,辛苦您过会儿再尝试。'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.navigateBack()
|
||||||
|
}, 1500);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
uni.hideLoading()
|
||||||
|
console.log(err)
|
||||||
|
_self.msgType = 'error'
|
||||||
|
_self.msgTxt = '很遗憾,当前服务器返回的数据有误,辛苦您过会儿再尝试。'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.navigateBack()
|
||||||
|
}, 1500);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.rule-content-box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rule-content-title {
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: 500;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rule-content-body {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: gray;
|
||||||
|
margin-top: 20rpx;
|
||||||
|
padding: 20rpx;
|
||||||
|
}
|
||||||
|
</style>
|
@ -74,13 +74,6 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- <view class="buy-desc-column box-bottom-options mt-20">
|
|
||||||
<checkbox-group bindchange="doUrgent">
|
|
||||||
<checkbox class="custom-wx-checkbox">
|
|
||||||
<tex style="color: #532A00;padding-left: 10rpx;font-weight: 400;">加急办理{{urgent/100}}元</tex>
|
|
||||||
</checkbox>
|
|
||||||
</checkbox-group>
|
|
||||||
</view> -->
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 写材料 -->
|
<!-- 写材料 -->
|
||||||
@ -163,7 +156,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ProApi from '../../../static/utils/net/projectApi.js'
|
import ProApi from '@/common/js/net/projectApi.js'
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -245,10 +238,9 @@
|
|||||||
uni.setClipboardData({
|
uni.setClipboardData({
|
||||||
data: 'https://www.aimzhu.com',
|
data: 'https://www.aimzhu.com',
|
||||||
success: () => {
|
success: () => {
|
||||||
_self.setData({
|
_self.msgTxt = '复制成功'
|
||||||
successHint: '复制成功',
|
_self.msgType = 'success'
|
||||||
showSuccess: true
|
_self.$refs.msg.open()
|
||||||
})
|
|
||||||
},
|
},
|
||||||
fail: err => {
|
fail: err => {
|
||||||
console.log(err)
|
console.log(err)
|
||||||
@ -259,7 +251,7 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style>
|
||||||
.buy-container {
|
.buy-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@ -312,6 +304,12 @@
|
|||||||
border-radius: 10rpx;
|
border-radius: 10rpx;
|
||||||
background-color: #FFA900;
|
background-color: #FFA900;
|
||||||
color: white;
|
color: white;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.buy-all-btn:active {
|
||||||
|
background-color: #FFA900C0;
|
||||||
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.buy-desc-box {
|
.buy-desc-box {
|
||||||
|
@ -91,178 +91,185 @@
|
|||||||
<view class="money">
|
<view class="money">
|
||||||
<view>金额:<text class="price">{{price/100}}元</text></view>
|
<view>金额:<text class="price">{{price/100}}元</text></view>
|
||||||
<checkbox-group @change="doUrgent" v-if="isShowUrgent">
|
<checkbox-group @change="doUrgent" v-if="isShowUrgent">
|
||||||
<checkbox :checked="isUrgent" color="#FFA900" style="transform: scale(0.7);align-self: center;"
|
<checkbox :checked="isUrgent" color="#FFA900"
|
||||||
|
style="transform: scale(0.7);transform-origin: left center;margin-left: 8rpx;"
|
||||||
:disabled="isUrgentDisable">
|
:disabled="isUrgentDisable">
|
||||||
<text style="color: #532A00;padding-left: 15rpx;font-weight: 400;">加急办理{{urgent/100}}元</text>
|
<text style="color: #532A00;padding-left: 8rpx;font-weight: 400;">加急办理{{urgent/100}}元</text>
|
||||||
</checkbox>
|
</checkbox>
|
||||||
</checkbox-group>
|
</checkbox-group>
|
||||||
</view>
|
</view>
|
||||||
<view class="btn" bind:tap="doCreateProject">保存并付款</view>
|
<view class="btn" @click="doCreateProject">保存并付款</view>
|
||||||
|
</view>
|
||||||
|
<view>
|
||||||
|
<!-- 推荐项目名称 -->
|
||||||
|
<uni-popup ref="commendDialog" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
|
||||||
|
<view class="bottom-dialog-box">
|
||||||
|
<view class="bottom-title-box">
|
||||||
|
<view class="icon-close close-icon" @click="closeCommendDialog"></view>
|
||||||
|
<view class="bottom-title-txt">项目名称</view>
|
||||||
|
</view>
|
||||||
|
<textarea @input="inputProjectName" placeholder="请简单介绍您想创建的系统,我们会根据您的描述为您推荐系统全称"
|
||||||
|
class="commend-text-area"></textarea>
|
||||||
|
<scroll-view scroll-y style="height: 300rpx;">
|
||||||
|
<view class="project-box">
|
||||||
|
<block v-for="(item,index) in projectNameList" :key="index">
|
||||||
|
<view class="project-item" @click="doSelectProjectName" :data-value="item">{{item}}
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<view class="confirm-btn" @click="doCreateFullName">生成</view>
|
||||||
|
</view>
|
||||||
|
</uni-popup>
|
||||||
|
<!-- 新建联系人 -->
|
||||||
|
<uni-popup ref="createContactDialog" type="bottom" background-color="#fff"
|
||||||
|
border-radius="15rpx 15rpx 0rpx 0rpx">
|
||||||
|
<view class="bottom-dialog-box">
|
||||||
|
<view class="bottom-title-box">
|
||||||
|
<view class="icon-close close-icon" @click="closeCreateContact"></view>
|
||||||
|
<view class="bottom-title-txt">新建联系人</view>
|
||||||
|
</view>
|
||||||
|
<view class="form-box">
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-item-title">姓名</view>
|
||||||
|
<input :adjust-position="true" :cursor-spacing="50" :value="contactName" placeholder="请输入姓名"
|
||||||
|
class="form-item-content" @input="inputContactName" />
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-item-title">联系电话</view>
|
||||||
|
<input :adjust-position="true" :cursor-spacing="50" :value="contactPhone"
|
||||||
|
placeholder="请输入联系电话" class="form-item-content" @input="inputContactPhone" />
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-item-title no-after" style="padding-left: 16rpx;">联系邮箱</view>
|
||||||
|
<input :adjust-position="true" :cursor-spacing="50" :value="contactEmail"
|
||||||
|
placeholder="请输入联系邮箱" class="form-item-content" @input="inputContactEmail" />
|
||||||
|
</view>
|
||||||
|
<view class="form-item">
|
||||||
|
<view class="form-item-title no-after" style="padding-left: 16rpx;">公司</view>
|
||||||
|
<input :adjust-position="true" :cursor-spacing="50" :value="contactCompany"
|
||||||
|
placeholder="请输入公司名称" class="form-item-content" @input="inputContactCompany" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="confirm-btn" @click="doCreateFullName">生成</view>
|
||||||
|
</view>
|
||||||
|
</uni-popup>
|
||||||
|
<!-- 语言选择 -->
|
||||||
|
<uni-popup ref="selectLangDialog" type="bottom" background-color="#fff"
|
||||||
|
border-radius="15rpx 15rpx 0rpx 0rpx">
|
||||||
|
<view class="bottom-dialog-box">
|
||||||
|
<view class="bottom-title-box">
|
||||||
|
<view class="icon-close close-icon" @click="closeLangDialog"></view>
|
||||||
|
<view class="bottom-title-txt">系统语言</view>
|
||||||
|
</view>
|
||||||
|
<view class="coupons-list-box">
|
||||||
|
<radio-group style="display: flex;flex-direction: column;width: 100vw;" @change="changeLang">
|
||||||
|
<block v-for="(item,index) in langList" :key="index">
|
||||||
|
<radio color="#FFA900" style="transform:scale(0.9);" :checked="selectLang==item"
|
||||||
|
:value="item">
|
||||||
|
<view style="margin-left: 20rpx;text-align: center;">{{item}}</view>
|
||||||
|
</radio>
|
||||||
|
</block>
|
||||||
|
</radio-group>
|
||||||
|
</view>
|
||||||
|
<view class="confirm-btn" @click="doConfirmLang">确定</view>
|
||||||
|
</view>
|
||||||
|
</uni-popup>
|
||||||
|
<!-- 套餐包弹窗 -->
|
||||||
|
<uni-popup ref="selPackageDialog" type="bottom" background-color="#fff"
|
||||||
|
border-radius="15rpx 15rpx 0rpx 0rpx">
|
||||||
|
<view class="bottom-dialog-box">
|
||||||
|
<view class="bottom-title-box">
|
||||||
|
<view class="icon-close close-icon" @click="closePackage"></view>
|
||||||
|
<view class="bottom-title-txt">套餐包</view>
|
||||||
|
</view>
|
||||||
|
<scroll-view scroll-y style="height: 500rpx;">
|
||||||
|
<view class="coupons-list-box">
|
||||||
|
<radio-group @change="radioSelPackage">
|
||||||
|
<block v-for="(item,index) in packageList" :key="index">
|
||||||
|
<view class="tickets" @click="choosePackage" :data-value="item">
|
||||||
|
<view class="l-tickets">
|
||||||
|
<view class="ticket-title">
|
||||||
|
<view>套餐包</view>
|
||||||
|
<view>剩余{{item.packageTotalSurplusCount}}件</view>
|
||||||
|
</view>
|
||||||
|
<view class="ticket-content">{{item.packageInfoAppDTO.packageName}}</view>
|
||||||
|
<view class="ticket-desc">{{item.packageInfoAppDTO.packageDescription}}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="r-tickets">
|
||||||
|
<radio color="#FFA900" style="margin-left: 5px;transform:scale(0.8)"
|
||||||
|
:value="index+''"
|
||||||
|
:checked="tempPackage.packageInfoId==item.packageInfoId">
|
||||||
|
</radio>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
</radio-group>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<view class="confirm-btn" @click="doConfirmPackage">确定</view>
|
||||||
|
</view>
|
||||||
|
</uni-popup>
|
||||||
|
|
||||||
|
<!-- 优惠卷弹窗 -->
|
||||||
|
<uni-popup ref="selCouponsDialog" type="bottom" background-color="#fff"
|
||||||
|
border-radius="15rpx 15rpx 0rpx 0rpx">
|
||||||
|
<view class="bottom-dialog-box">
|
||||||
|
<view class="bottom-title-box">
|
||||||
|
<view class="icon-close close-icon" @click="closeCoupons"></view>
|
||||||
|
<view class="bottom-title-txt">优惠卷</view>
|
||||||
|
</view>
|
||||||
|
<scroll-view scroll-y style="height: 500rpx;">
|
||||||
|
<view class="coupons-list-box">
|
||||||
|
<radio-group @change="radioSelCoupons">
|
||||||
|
<block v-for="(item,index) in couponsList" :key="index">
|
||||||
|
<view class="tickets" @click="chooseCoupons" :data-value="item">
|
||||||
|
<view class="l-tickets">
|
||||||
|
<view class="ticket-title">
|
||||||
|
<view
|
||||||
|
style="display: flex;flex-direction: row;justify-content: center;align-items: center;">
|
||||||
|
<view class="coupons-icon" style="width: 24px;height: 24px;">
|
||||||
|
</view>
|
||||||
|
<text>优惠卷</text>
|
||||||
|
</view>
|
||||||
|
<view>减{{item.coupon.amount/100}}元</view>
|
||||||
|
</view>
|
||||||
|
<view class="ticket-content">{{item.coupon.title}}</view>
|
||||||
|
<view class="ticket-desc">
|
||||||
|
有效期:{{item.coupon.useGmtStart}}至{{item.coupon.useGmtEnd}}</view>
|
||||||
|
</view>
|
||||||
|
<view class="r-tickets">
|
||||||
|
<radio color="#FFA900" style="margin-left: 5px;transform: scale(0.8);"
|
||||||
|
:value="index+''" :checked="tempCoupons.couponId==item.couponId">
|
||||||
|
</radio>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</block>
|
||||||
|
</radio-group>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<view class="confirm-btn" @click="doConfirmCoupons">确定</view>
|
||||||
|
</view>
|
||||||
|
</uni-popup>
|
||||||
|
<uni-popup type="message" ref="msg">
|
||||||
|
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
|
||||||
|
</uni-popup>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 各类弹窗 -->
|
|
||||||
<view>
|
|
||||||
<!-- 推荐项目名称 -->
|
|
||||||
<uni-popup ref="commendDialog" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
|
|
||||||
<view class="bottom-dialog-box">
|
|
||||||
<view class="bottom-title-box">
|
|
||||||
<view class="icon-close close-icon" @click="closePopup"></view>
|
|
||||||
<view class="bottom-title-txt">项目名称</view>
|
|
||||||
</view>
|
|
||||||
<textarea @input="inputProjectName" placeholder="请简单介绍您想创建的系统,我们会根据您的描述为您推荐系统全称"
|
|
||||||
class="commend-text-area"></textarea>
|
|
||||||
<scroll-view scroll-y style="height: 300rpx;">
|
|
||||||
<view class="project-box">
|
|
||||||
<block v-for="(item,index) in projectNameList" :key="index">
|
|
||||||
<view class="project-item" @click="doSelectProjectName" :data-value="item">{{item}}
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
<view class="confirm-btn" @click="doCreateFullName">生成</view>
|
|
||||||
</view>
|
|
||||||
</uni-popup>
|
|
||||||
<!-- 新建联系人 -->
|
|
||||||
<uni-popup ref="createContactDialog" type="bottom" background-color="#fff"
|
|
||||||
border-radius="15rpx 15rpx 0rpx 0rpx">
|
|
||||||
<view class="bottom-dialog-box">
|
|
||||||
<view class="bottom-title-box">
|
|
||||||
<view class="icon-close close-icon" @click="closeCreateContact"></view>
|
|
||||||
<view class="bottom-title-txt">新建联系人</view>
|
|
||||||
</view>
|
|
||||||
<view class="form-box">
|
|
||||||
<view class="form-item">
|
|
||||||
<view class="form-item-title">姓名</view>
|
|
||||||
<input :adjust-position="true" :cursor-spacing="50" :value="contactName" placeholder="请输入姓名"
|
|
||||||
class="form-item-content" @input="inputContactName" />
|
|
||||||
</view>
|
|
||||||
<view class="form-item">
|
|
||||||
<view class="form-item-title">联系电话</view>
|
|
||||||
<input :adjust-position="true" :cursor-spacing="50" :value="contactPhone" placeholder="请输入联系电话"
|
|
||||||
class="form-item-content" @input="inputContactPhone" />
|
|
||||||
</view>
|
|
||||||
<view class="form-item">
|
|
||||||
<view class="form-item-title no-after" style="padding-left: 16rpx;">联系邮箱</view>
|
|
||||||
<input :adjust-position="true" :cursor-spacing="50" :value="contactEmail" placeholder="请输入联系邮箱"
|
|
||||||
class="form-item-content" @input="inputContactEmail" />
|
|
||||||
</view>
|
|
||||||
<view class="form-item">
|
|
||||||
<view class="form-item-title no-after" style="padding-left: 16rpx;">公司</view>
|
|
||||||
<input :adjust-position="true" :cursor-spacing="50" :value="contactCompany"
|
|
||||||
placeholder="请输入公司名称" class="form-item-content" @input="inputContactCompany" />
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="confirm-btn" @click="doCreateFullName">生成</view>
|
|
||||||
</view>
|
|
||||||
</uni-popup>
|
|
||||||
<!-- 语言选择 -->
|
|
||||||
<uni-popup ref="selectLangDialog" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
|
|
||||||
<view class="bottom-dialog-box">
|
|
||||||
<view class="bottom-title-box">
|
|
||||||
<view class="icon-close close-icon" @click="closeLangDialog"></view>
|
|
||||||
<view class="bottom-title-txt">系统语言</view>
|
|
||||||
</view>
|
|
||||||
<view class="coupons-list-box">
|
|
||||||
<radio-group style="display: flex;flex-direction: column;width: 100vw;" @change="changeLang">
|
|
||||||
<block v-for="(item,index) in langList" :key="index">
|
|
||||||
<radio color="#FFA900" style="transform:scale(0.9);" :checked="selectLang==item"
|
|
||||||
:value="item">
|
|
||||||
<view style="margin-left: 20rpx;text-align: center;">{{item}}</view>
|
|
||||||
</radio>
|
|
||||||
</block>
|
|
||||||
</radio-group>
|
|
||||||
</view>
|
|
||||||
<view class="confirm-btn" @click="doConfirmLang">确定</view>
|
|
||||||
</view>
|
|
||||||
</uni-popup>
|
|
||||||
<!-- 套餐包弹窗 -->
|
|
||||||
<uni-popup ref="selPackageDialog" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
|
|
||||||
<view class="bottom-dialog-box">
|
|
||||||
<view class="bottom-title-box">
|
|
||||||
<view class="icon-close close-icon" @click="closePackage"></view>
|
|
||||||
<view class="bottom-title-txt">套餐包</view>
|
|
||||||
</view>
|
|
||||||
<scroll-view scroll-y style="height: 500rpx;">
|
|
||||||
<view class="coupons-list-box">
|
|
||||||
<radio-group>
|
|
||||||
<block v-for="(item,index) in packageList" :key="index">
|
|
||||||
<view class="tickets" @click="choosePackage" :data-value="item">
|
|
||||||
<view class="l-tickets">
|
|
||||||
<view class="ticket-title">
|
|
||||||
<view>套餐包</view>
|
|
||||||
<view>剩余{{item.packageTotalSurplusCount}}件</view>
|
|
||||||
</view>
|
|
||||||
<view class="ticket-content">{{item.packageInfoAppDTO.packageName}}</view>
|
|
||||||
<view class="ticket-desc">{{item.packageInfoAppDTO.packageDescription}}</view>
|
|
||||||
</view>
|
|
||||||
<view class="r-tickets">
|
|
||||||
<radio color="#FFA900" style="margin-left: 5px;transform:scale(0.8)"
|
|
||||||
:value="index+''" :checked="tempPackage.packageInfoId==item.packageInfoId">
|
|
||||||
</radio>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
</radio-group>
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
<view class="confirm-btn" @click="doConfirmPackage">确定</view>
|
|
||||||
</view>
|
|
||||||
</uni-popup>
|
|
||||||
|
|
||||||
<!-- 优惠卷弹窗 -->
|
|
||||||
<uni-popup ref="selCouponsDialog" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
|
|
||||||
<view class="bottom-dialog-box">
|
|
||||||
<view class="bottom-title-box">
|
|
||||||
<view class="icon-close close-icon" @click="closeCoupons"></view>
|
|
||||||
<view class="bottom-title-txt">优惠卷</view>
|
|
||||||
</view>
|
|
||||||
<scroll-view scroll-y style="height: 500rpx;">
|
|
||||||
<view class="coupons-list-box">
|
|
||||||
<radio-group>
|
|
||||||
<block v-for="(item,index) in couponsList" :key="index">
|
|
||||||
<view class="tickets" @click="chooseCoupons" :data-value="item">
|
|
||||||
<view class="l-tickets">
|
|
||||||
<view class="ticket-title">
|
|
||||||
<view
|
|
||||||
style="display: flex;flex-direction: row;justify-content: center;align-items: center;">
|
|
||||||
<view class="coupons-icon" style="width: 24px;height: 24px;">
|
|
||||||
</view>
|
|
||||||
<text>优惠卷</text>
|
|
||||||
</view>
|
|
||||||
<view>减{{item.coupon.amount/100}}元</view>
|
|
||||||
</view>
|
|
||||||
<view class="ticket-content">{{item.coupon.title}}</view>
|
|
||||||
<view class="ticket-desc">
|
|
||||||
有效期:{{item.coupon.useGmtStart}}至{{item.coupon.useGmtEnd}}</view>
|
|
||||||
</view>
|
|
||||||
<view class="r-tickets">
|
|
||||||
<radio color="#FFA900" style="margin-left: 5px;transform: scale(0.8);"
|
|
||||||
:checked="tempCoupons.couponId==item.couponId"></radio>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</block>
|
|
||||||
</radio-group>
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
<view class="confirm-btn" @click="doConfirmCoupons">确定</view>
|
|
||||||
</view>
|
|
||||||
</uni-popup>
|
|
||||||
<uni-popup type="message" ref="msg">
|
|
||||||
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
|
|
||||||
</uni-popup>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ProApi from '../../../static/utils/net/projectApi.js'
|
import ProApi from '@/common/js/net/projectApi.js'
|
||||||
import UserApi from '../../../static/utils/net/UserApi.js'
|
import UserApi from '@/common/js/net/UserApi.js'
|
||||||
import {
|
import {
|
||||||
formatDate
|
formatDate
|
||||||
} from '../../../static/utils/util.js'
|
} from '@/common/js/util.js'
|
||||||
import {
|
import {
|
||||||
isEmpty
|
isEmpty,
|
||||||
} from '../../../static/utils/conver.js'
|
objIsEmpty
|
||||||
|
} from '@/common/js/conver.js'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -580,6 +587,10 @@
|
|||||||
choosePackage(e) {
|
choosePackage(e) {
|
||||||
this.tempPackage = e.currentTarget.dataset.value
|
this.tempPackage = e.currentTarget.dataset.value
|
||||||
},
|
},
|
||||||
|
//点击radio
|
||||||
|
radioSelPackage(e) {
|
||||||
|
this.tempPackage = this.packageList[e.detail.value]
|
||||||
|
},
|
||||||
//确定选中的套餐包
|
//确定选中的套餐包
|
||||||
doConfirmPackage() {
|
doConfirmPackage() {
|
||||||
this.selectPackage = this.tempPackage
|
this.selectPackage = this.tempPackage
|
||||||
@ -589,7 +600,7 @@
|
|||||||
this.tempCoupons = {}
|
this.tempCoupons = {}
|
||||||
this.isUrgent = false //取消加急
|
this.isUrgent = false //取消加急
|
||||||
this.isUrgentDisable = true //加急不能选择
|
this.isUrgentDisable = true //加急不能选择
|
||||||
this.price = 0
|
this.countPrice()
|
||||||
this.$refs.selPackageDialog.close()
|
this.$refs.selPackageDialog.close()
|
||||||
},
|
},
|
||||||
//请空选中的套餐包或优惠卷
|
//请空选中的套餐包或优惠卷
|
||||||
@ -602,7 +613,7 @@
|
|||||||
this.canSelPackage = true
|
this.canSelPackage = true
|
||||||
this.isUrgent = false //取消加急
|
this.isUrgent = false //取消加急
|
||||||
this.isUrgentDisable = false //加急可以选择
|
this.isUrgentDisable = false //加急可以选择
|
||||||
this.price = this.proPrice //重置价格
|
this.countPrice()
|
||||||
},
|
},
|
||||||
//显示优惠卷弹窗
|
//显示优惠卷弹窗
|
||||||
doShowCoupons() {
|
doShowCoupons() {
|
||||||
@ -620,25 +631,108 @@
|
|||||||
_self.canSelPackage = false
|
_self.canSelPackage = false
|
||||||
_self.selectPackage = {}
|
_self.selectPackage = {}
|
||||||
_self.tempPackage = {}
|
_self.tempPackage = {}
|
||||||
var newPrice = Number(_self.price) - Number(_self.selectCoupons.coupon.amount)
|
_self.countPrice()
|
||||||
_self.price = newPrice > 0 ? newPrice : 0
|
|
||||||
this.$refs.selCouponsDialog.close()
|
this.$refs.selCouponsDialog.close()
|
||||||
},
|
},
|
||||||
//切换优惠卷
|
//切换优惠卷
|
||||||
chooseCoupons(e) {
|
chooseCoupons(e) {
|
||||||
this.tempCoupons = e.currentTarget.dataset.value
|
this.tempCoupons = e.currentTarget.dataset.value
|
||||||
},
|
},
|
||||||
|
//radio点击
|
||||||
|
radioSelCoupons(e) {
|
||||||
|
this.tempCoupons = this.couponsList[e.detail.value]
|
||||||
|
},
|
||||||
//是否加急
|
//是否加急
|
||||||
doUrgent() {
|
doUrgent() {
|
||||||
const _self = this
|
const _self = this
|
||||||
_self.isUrgent = !_self.isUrgent
|
_self.isUrgent = !_self.isUrgent
|
||||||
var newPrice = Number(_self.price)
|
_self.countPrice()
|
||||||
if (_self.isUrgent) {
|
},
|
||||||
newPrice = Number(_self.price) + Number(_self.urgent)
|
//计算价格
|
||||||
|
countPrice() {
|
||||||
|
const _self = this;
|
||||||
|
const trPrice = Number(_self.proPrice);
|
||||||
|
let newPrice;
|
||||||
|
|
||||||
|
if (!objIsEmpty(_self.selectPackage)) {
|
||||||
|
newPrice = 0;
|
||||||
} else {
|
} else {
|
||||||
newPrice = Number(_self.price) - Number(_self.urgent)
|
const isAllType = _self.type === 'ALL';
|
||||||
|
const hasCoupon = !objIsEmpty(_self.selectCoupons);
|
||||||
|
const isUrgent = _self.isUrgent;
|
||||||
|
|
||||||
|
const couponAmount = hasCoupon ? Number(_self.selectCoupons.coupon.amount) : 0;
|
||||||
|
const urgentFee = isAllType && isUrgent ? Number(_self.urgent) : 0;
|
||||||
|
|
||||||
|
newPrice = trPrice + urgentFee - couponAmount;
|
||||||
|
}
|
||||||
|
_self.price = Math.max(0, newPrice);
|
||||||
|
},
|
||||||
|
//校验参数
|
||||||
|
doCheckProjectParams() {
|
||||||
|
const _self = this
|
||||||
|
if (_self.projectName == '') {
|
||||||
|
_self.msgTxt = '请输入项目名称'
|
||||||
|
_self.msgType = 'error'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (Object.keys(_self.selectContact).length <= 0) {
|
||||||
|
_self.msgTxt = '请选中产权联系人'
|
||||||
|
_self.msgType = 'error'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
//提交新建项目信息
|
||||||
|
doCreateProject() {
|
||||||
|
//校验参数
|
||||||
|
const _self = this
|
||||||
|
const isLegal = _self.doCheckProjectParams()
|
||||||
|
if (isLegal) {
|
||||||
|
uni.showLoading({
|
||||||
|
title: '创建中...',
|
||||||
|
})
|
||||||
|
//构建参数
|
||||||
|
var list = []
|
||||||
|
if (_self.isUrgent != '') {
|
||||||
|
list = [_self.isUrgent]
|
||||||
|
}
|
||||||
|
const data = {
|
||||||
|
applyContactCsaNo: _self.selectContact.csaNo, // 联系人客服编号
|
||||||
|
applyContactId: _self.selectContact.projContactId, //联系人ID
|
||||||
|
applyContactName: _self.selectContact.name, //联系人姓名
|
||||||
|
applyContactPhone: _self.selectContact.phone, //联系人手机
|
||||||
|
projDevCompleteDate: _self.completeDate, //开发完成日期
|
||||||
|
projName: _self.projectName, //项目简称
|
||||||
|
projVersion: _self.version, //项目版本
|
||||||
|
backendCodeLang: _self.selectLang,
|
||||||
|
projChargeType: _self.type, //项目收费类型 ALL,FREE,MATERIAL,MATERIAL_AGENT,MATERIAL_AGENT_URGENT
|
||||||
|
listProjChargeAdditional: list,
|
||||||
|
packageOrderId: _self.selectPackage.packageOrderId ? _self.selectPackage.packageOrderId :
|
||||||
|
'', //套餐包ID
|
||||||
|
couponId: _self.selectCoupons.couponId ? _self.selectCoupons.couponId : '', //优惠卷ID
|
||||||
|
}
|
||||||
|
ProApi.doCreateProject(data)
|
||||||
|
.then(res => {
|
||||||
|
console.log(res)
|
||||||
|
uni.hideLoading()
|
||||||
|
_self.msgType = 'success'
|
||||||
|
_self.msgTxt = '项目创建流程圆满完成,系统正在生成配套材料,请您耐心等候。'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.navigateBack()
|
||||||
|
}, 1500);
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
uni.hideLoading()
|
||||||
|
console.log(err)
|
||||||
|
_self.msgTxt = err.msg ? err.msg : '网络错误,请稍后重试'
|
||||||
|
_self.msgType = 'error'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
_self.price = newPrice
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -702,6 +796,7 @@
|
|||||||
align-self: center;
|
align-self: center;
|
||||||
width: 85vw;
|
width: 85vw;
|
||||||
margin-top: 20rpx;
|
margin-top: 20rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-box {
|
.info-box {
|
||||||
@ -733,6 +828,7 @@
|
|||||||
padding: 5rpx 40rpx;
|
padding: 5rpx 40rpx;
|
||||||
color: white;
|
color: white;
|
||||||
border-radius: 10rpx;
|
border-radius: 10rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-box {
|
.content-box {
|
||||||
@ -868,7 +964,6 @@
|
|||||||
background-color: white;
|
background-color: white;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -888,6 +983,8 @@
|
|||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.price {
|
.price {
|
||||||
|
@ -40,26 +40,26 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<scroll-view scroll-x="true" class="mt-20 scroll-view_H" show-scrollbar="false">
|
<scroll-view :scroll-x="true" class="mt-20 scroll-view_H" show-scrollbar="false">
|
||||||
<view class="list-tabs">
|
<view class="list-tabs">
|
||||||
<block v-for="(item,index) in typeList" :key="index">
|
<block v-for="(item,index) in typeList" :key="index">
|
||||||
<view :class="currentType==item.value? 'tab-select' :'tab-normal'" class="item-margin"
|
<view :class="currentType==item.value? 'tab-select' :'tab-normal'" class="item-margin"
|
||||||
@click="doChangeType(item.value)">
|
@click="doChangeType(item.value)">
|
||||||
<view>{{item.label}}</view>
|
{{item.label}}
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
<view class="divider-h"></view>
|
<view class="divider-h"></view>
|
||||||
<block v-for="(item,index) in expandList" :key="index">
|
<block v-for="(item,index) in expandList" :key="index">
|
||||||
<view :class="currentExpand==item.value? 'tab-select' :'tab-normal'" class="item-margin"
|
<view :class="currentExpand==item.value? 'tab-select' :'tab-normal'" class="item-margin"
|
||||||
@click="doChangeExpand(item.value)">
|
@click="doChangeExpand(item.value)">
|
||||||
<view>{{item.label}}</view>
|
{{item.label}}
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
<view class="divider-h"></view>
|
<view class="divider-h"></view>
|
||||||
<block v-for="(item,index) in tagList" :key="index">
|
<block v-for="(item,index) in tagList" :key="index">
|
||||||
<view :class="currentTag==item.key? 'tab-select' :'tab-normal'" class="item-margin"
|
<view :class="currentTag==item.key? 'tab-select' :'tab-normal'" class="item-margin"
|
||||||
@click="doChangeTag(item.key)">
|
@click="doChangeTag(item.key)">
|
||||||
<view>{{item.value}}</view>
|
{{item.value}}
|
||||||
</view>
|
</view>
|
||||||
</block>
|
</block>
|
||||||
</view>
|
</view>
|
||||||
@ -116,93 +116,99 @@
|
|||||||
</ContainerLoading>
|
</ContainerLoading>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
<uni-popup ref="downloadPopup" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
|
||||||
<uni-popup ref="downloadPopup" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
|
<view class="bottom-dialog-box">
|
||||||
<view class="bottom-dialog-box">
|
<view style="font-size: 16px;font-weight: bold;align-self: center;">资料下载</view>
|
||||||
<view style="font-size: 16px;font-weight: bold;align-self: center;">资料下载</view>
|
<view style="margin-top: 10px;padding-bottom: 80rpx;">
|
||||||
<view style="margin-top: 10px;padding-bottom: 80rpx;">
|
<view class="download-desc">
|
||||||
<view class="download-desc">
|
<view class="link-title">项目预览链接</view>
|
||||||
<view class="link-title">项目预览链接</view>
|
<text class="link" @click="copyLink">{{sysPreviewUrl}}</text>
|
||||||
<text class="link" @click="copyLink">{{sysPreviewUrl}}</text>
|
|
||||||
</view>
|
|
||||||
<view class="download-item">
|
|
||||||
<view class="download-title">
|
|
||||||
<view class="icon-table"></view>
|
|
||||||
<view class="download-title-txt">申请表</view>
|
|
||||||
</view>
|
</view>
|
||||||
<view class="download-btn-box">
|
<view class="download-item">
|
||||||
<view class="download-btn" @click="download" data-path="/route/proj/download/apply/">
|
<view class="download-title">
|
||||||
<view class="ic-doc" style="width: 20px;height: 20px;"></view>
|
<view class="icon-table"></view>
|
||||||
<view class="download-btn-txt">Word格式下载</view>
|
<view class="download-title-txt">申请表</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="download-btn" @click="download" data-path="/route/proj/download/apply-txt/">
|
<view class="download-btn-box">
|
||||||
<view class="ic-txt" style="width: 20px;height: 20px;"></view>
|
<view class="download-btn" @click="download" data-path="/route/proj/download/apply/">
|
||||||
<view class="download-btn-txt">TXT格式下载</view>
|
<view class="ic-doc" style="width: 20px;height: 20px;"></view>
|
||||||
|
<view class="download-btn-txt">Word格式下载</view>
|
||||||
|
</view>
|
||||||
|
<view class="download-btn" @click="download" data-path="/route/proj/download/apply-txt/">
|
||||||
|
<view class="ic-txt" style="width: 20px;height: 20px;"></view>
|
||||||
|
<view class="download-btn-txt">TXT格式下载</view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="download-item">
|
<view class="download-item">
|
||||||
<view class="download-title">
|
<view class="download-title">
|
||||||
<view class="icon-source"></view>
|
<view class="icon-source"></view>
|
||||||
<view class="download-title-txt">操作手册</view>
|
<view class="download-title-txt">操作手册</view>
|
||||||
</view>
|
|
||||||
<view class="download-btn-box">
|
|
||||||
<view class="download-btn" @click="download" data-path="/route/proj/download/manual/">
|
|
||||||
<view class="ic-doc" style="width: 20px;height: 20px;"></view>
|
|
||||||
<view class="download-btn-txt">Word格式下载</view>
|
|
||||||
</view>
|
</view>
|
||||||
<view class="download-btn" @click="download" data-path="/route/proj/download/manual/pdf/">
|
<view class="download-btn-box">
|
||||||
<view class="ic-pdf" style="width: 20px;height: 20px;"></view>
|
<view class="download-btn" @click="download" data-path="/route/proj/download/manual/">
|
||||||
<view class="download-btn-txt">PDF格式下载</view>
|
<view class="ic-doc" style="width: 20px;height: 20px;"></view>
|
||||||
|
<view class="download-btn-txt">Word格式下载</view>
|
||||||
|
</view>
|
||||||
|
<view class="download-btn" @click="download" data-path="/route/proj/download/manual/pdf/">
|
||||||
|
<view class="ic-pdf" style="width: 20px;height: 20px;"></view>
|
||||||
|
<view class="download-btn-txt">PDF格式下载</view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="download-item">
|
||||||
|
<view class="download-title">
|
||||||
|
<view class="icon-tool"></view>
|
||||||
|
<view class="download-title-txt">源代码</view>
|
||||||
|
</view>
|
||||||
|
<view class="download-btn-box">
|
||||||
|
<view class="download-btn" @click="download" data-path="/route/proj/download/code/">
|
||||||
|
<view class="ic-doc" style="width: 20px;height: 20px;"></view>
|
||||||
|
<view class="download-btn-txt">Word格式下载</view>
|
||||||
|
</view>
|
||||||
|
<view class="download-btn" @click="download" data-path="/route/proj/download/code/pdf/">
|
||||||
|
<view class="ic-pdf" style="width: 20px;height: 20px;"></view>
|
||||||
|
<view class="download-btn-txt">PDF格式下载</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="hint mt-10">温馨提示:若您想把下载的文件留存到本地,打开预览页面后,在界面右上角操作栏内,选择使用其他软件打开或者保存文件功能就能实现。</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="download-item">
|
|
||||||
<view class="download-title">
|
|
||||||
<view class="icon-tool"></view>
|
|
||||||
<view class="download-title-txt">源代码</view>
|
|
||||||
</view>
|
|
||||||
<view class="download-btn-box">
|
|
||||||
<view class="download-btn" @click="download" data-path="/route/proj/download/code/">
|
|
||||||
<view class="ic-doc" style="width: 20px;height: 20px;"></view>
|
|
||||||
<view class="download-btn-txt">Word格式下载</view>
|
|
||||||
</view>
|
|
||||||
<view class="download-btn" @click="download" data-path="/route/proj/download/code/pdf/">
|
|
||||||
<view class="ic-pdf" style="width: 20px;height: 20px;"></view>
|
|
||||||
<view class="download-btn-txt">PDF格式下载</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="hint mt-10">温馨提示:若您想把下载的文件留存到本地,打开预览页面后,在界面右上角操作栏内,选择使用其他软件打开或者保存文件功能就能实现。</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</uni-popup>
|
||||||
</uni-popup>
|
<DownloadProgress :isShow="downloading" :progress="downloadProgress"></DownloadProgress>
|
||||||
<DownloadProgress :isShow="downloading" :progress="downloadProgress"></DownloadProgress>
|
<!-- 通知消息 -->
|
||||||
<!-- 通知消息 -->
|
<AdPopup :coupons="tempCoupons" @ad-close="doCloseAd" @ad-furl="doFurlCoupons" :visible="showAd"></AdPopup>
|
||||||
<uni-popup ref="msg" type="message">
|
<uni-popup ref="msg" type="message">
|
||||||
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
|
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
|
||||||
</uni-popup>
|
</uni-popup>
|
||||||
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import AdPopup from '@/components/ad-popup.vue'
|
||||||
import ContainerLoading from '@/components/container-loading.vue'
|
import ContainerLoading from '@/components/container-loading.vue'
|
||||||
import DownloadProgress from '@/components/download-progress.vue'
|
import DownloadProgress from '@/components/download-progress.vue'
|
||||||
import ProApi from '../../static/utils/net/projectApi.js'
|
import ProApi from '@/common/js/net/projectApi.js'
|
||||||
|
import UserApi from '@/common/js/net/UserApi.js'
|
||||||
import {
|
import {
|
||||||
previewUrl,
|
previewUrl,
|
||||||
copyrightUrl
|
copyrightUrl
|
||||||
} from '../../static/utils/net/http.js'
|
} from '@/common/js/net/http.js'
|
||||||
|
|
||||||
import {
|
import {
|
||||||
status
|
status
|
||||||
} from '../../static/utils/conver.js'
|
} from '@/common/js/conver.js'
|
||||||
import {
|
import {
|
||||||
get
|
get,
|
||||||
} from '../../static/utils/cache/storage.js';
|
set
|
||||||
|
} from '@/common/js/cache/storage.js';
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
ContainerLoading,
|
ContainerLoading,
|
||||||
DownloadProgress
|
DownloadProgress,
|
||||||
|
AdPopup
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -260,6 +266,9 @@
|
|||||||
downloading: false, //下载文件中
|
downloading: false, //下载文件中
|
||||||
msgType: 'success', //消息类型 success error warn info
|
msgType: 'success', //消息类型 success error warn info
|
||||||
msgTxt: '', //消息内容
|
msgTxt: '', //消息内容
|
||||||
|
showAd: false, //显示优惠卷广告
|
||||||
|
tempCoupons: null, //优惠卷
|
||||||
|
isNoShowToday: false, //今日不再显示
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoad() {
|
onLoad() {
|
||||||
@ -268,12 +277,51 @@
|
|||||||
_self.doGetTagList() //获取Tag
|
_self.doGetTagList() //获取Tag
|
||||||
const params = _self.buildParams(1, true)
|
const params = _self.buildParams(1, true)
|
||||||
_self.doGetSelfList(params, true)
|
_self.doGetSelfList(params, true)
|
||||||
|
const noShowToday = get('noShowToday')
|
||||||
|
const currentDate = new Date().toLocaleDateString();
|
||||||
|
if (noShowToday && noShowToday === currentDate) {
|
||||||
|
this.isNoShowToday = true
|
||||||
|
} else {
|
||||||
|
_self.doGetClaimsCoupons()
|
||||||
|
}
|
||||||
|
//计算状态栏等高度
|
||||||
|
this.countBarHeight()
|
||||||
},
|
},
|
||||||
onReady() {
|
onReady() {
|
||||||
this.calculateRemainingHeight()
|
this.calculateRemainingHeight()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
status,
|
status,
|
||||||
|
//计算状态栏等高度
|
||||||
|
countBarHeight() {
|
||||||
|
//#ifdef MP-WEIXIN || H5
|
||||||
|
const windowInfo = uni.getWindowInfo()
|
||||||
|
const deviceInfo = uni.getDeviceInfo()
|
||||||
|
this.statusBarHeight = windowInfo.statusBarHeight
|
||||||
|
this.totalHeight = deviceInfo.osName.toLowerCase() == 'ios' ? 48 : 50 // 导航栏总高度
|
||||||
|
//#endif
|
||||||
|
//#ifdef MP-ALIPAY ||MP-BAIDU||MP-TOUTIAO || MP-KUAISHOU || MP-XHS
|
||||||
|
const deviceInfo = uni.getSystemInfoSync()
|
||||||
|
console.log('设备信息', deviceInfo);
|
||||||
|
this.statusBarHeight = deviceInfo.statusBarHeight
|
||||||
|
this.totalHeight = deviceInfo.osName.toLowerCase() == 'ios' ? 48 : 50 // 导航栏总高度
|
||||||
|
console.log('系统平台', deviceInfo.osName);
|
||||||
|
//#endif
|
||||||
|
},
|
||||||
|
//获取可以申领的优惠卷
|
||||||
|
doGetClaimsCoupons() {
|
||||||
|
const _self = this
|
||||||
|
UserApi.doGetClaimsCouponsList()
|
||||||
|
.then(res => {
|
||||||
|
if (res && res.length > 0) {
|
||||||
|
this.tempCoupons = res[0]
|
||||||
|
this.showAd = true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log(err)
|
||||||
|
})
|
||||||
|
},
|
||||||
// 获取通知信息
|
// 获取通知信息
|
||||||
doGetNotice() {
|
doGetNotice() {
|
||||||
const _self = this
|
const _self = this
|
||||||
@ -412,16 +460,20 @@
|
|||||||
// 获取窗口高度
|
// 获取窗口高度
|
||||||
const systemInfo = uni.getSystemInfoSync();
|
const systemInfo = uni.getSystemInfoSync();
|
||||||
const windowHeight = systemInfo.windowHeight;
|
const windowHeight = systemInfo.windowHeight;
|
||||||
console.log(windowHeight);
|
|
||||||
// bg-title container-title
|
// bg-title container-title
|
||||||
// 获取已占用元素的高度
|
// 获取已占用元素的高度
|
||||||
const query = uni.createSelectorQuery().in(this);
|
const query = uni.createSelectorQuery().in(this);
|
||||||
query.select('#up-box').boundingClientRect(data => {
|
query.select('#up-box').boundingClientRect(data => {
|
||||||
if (data) {
|
if (data) {
|
||||||
const occupiedHeight = data.height;
|
const occupiedHeight = data.height;
|
||||||
console.log(occupiedHeight);
|
|
||||||
// 计算剩余高度
|
// 计算剩余高度
|
||||||
this.contentHeight = windowHeight - occupiedHeight - 50;
|
this.contentHeight = windowHeight - occupiedHeight - this.totalHeight - this
|
||||||
|
.statusBarHeight;
|
||||||
|
console.log('窗口高度', windowHeight);
|
||||||
|
console.log('内容高度', this.contentHeight)
|
||||||
|
console.log('头布局高度', occupiedHeight);
|
||||||
|
} else {
|
||||||
|
console.log('未获取到高度');
|
||||||
}
|
}
|
||||||
}).exec();
|
}).exec();
|
||||||
},
|
},
|
||||||
@ -494,7 +546,8 @@
|
|||||||
if (fileName) {
|
if (fileName) {
|
||||||
console.log('下载的文件路径:', downloadRes.tempFilePath + fileName);
|
console.log('下载的文件路径:', downloadRes.tempFilePath + fileName);
|
||||||
uni.getFileSystemManager().saveFile({
|
uni.getFileSystemManager().saveFile({
|
||||||
tempFilePath: downloadRes.tempFilePath + fileName,
|
tempFilePath: res.tempFilePath,
|
||||||
|
filePath: uni.env.USER_DATA_PATH + '/' + fileName,
|
||||||
success: saveRes => {
|
success: saveRes => {
|
||||||
//打开文件
|
//打开文件
|
||||||
console.log('打开文件', saveRes.savedFilePath);
|
console.log('打开文件', saveRes.savedFilePath);
|
||||||
@ -552,12 +605,55 @@
|
|||||||
_self.showDownload = false
|
_self.showDownload = false
|
||||||
_self.downloading = false
|
_self.downloading = false
|
||||||
_self.downloadProgress = 0
|
_self.downloadProgress = 0
|
||||||
}
|
_self.$refs.msg.open()
|
||||||
|
},
|
||||||
|
//关闭广告
|
||||||
|
doCloseAd(e) {
|
||||||
|
const isShow = e
|
||||||
|
console.log('关闭广告', e);
|
||||||
|
if (isShow) {
|
||||||
|
const currentDate = new Date().toLocaleDateString();
|
||||||
|
set('noShowToday', currentDate)
|
||||||
|
this.isNoShowToday = true
|
||||||
|
}
|
||||||
|
this.showAd = false
|
||||||
|
},
|
||||||
|
//收下优惠卷
|
||||||
|
doFurlCoupons(e) {
|
||||||
|
console.log('收下优惠卷')
|
||||||
|
const _self = this
|
||||||
|
const isShow = e
|
||||||
|
// isShow=true 今日不再显示
|
||||||
|
if (isShow) {
|
||||||
|
const currentDate = new Date().toLocaleDateString();
|
||||||
|
set('noShowToday', currentDate)
|
||||||
|
_slef.isNoShowToday = true
|
||||||
|
}
|
||||||
|
uni.showLoading({
|
||||||
|
title: '领取中...',
|
||||||
|
})
|
||||||
|
const coupons = {
|
||||||
|
couponId: _self.tempCoupons.couponId
|
||||||
|
}
|
||||||
|
UserApi.doSaveCoupons(coupons)
|
||||||
|
.then(res => {
|
||||||
|
uni.hideLoading()
|
||||||
|
_self.msgType = 'success'
|
||||||
|
_self.msgTxt = '本次领取操作已成功,您可以在 “我的” 页面查看相关信息。'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
uni.hideLoading()
|
||||||
|
_self.msgType = 'error'
|
||||||
|
_self.msgTxt = err.msg ? err.msg : '本次领取操作未成功,请重新进入小程序后再次尝试。'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
})
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
scroll-view ::-webkit-scrollbar {
|
scroll-view ::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
width: 0 !important;
|
width: 0 !important;
|
||||||
@ -778,6 +874,7 @@
|
|||||||
color: rgba(93, 57, 0, 1);
|
color: rgba(93, 57, 0, 1);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,6 +885,7 @@
|
|||||||
color: rgba(154, 154, 154, 1);
|
color: rgba(154, 154, 154, 1);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
padding: 2px 5px;
|
padding: 2px 5px;
|
||||||
}
|
}
|
||||||
@ -961,18 +1059,21 @@
|
|||||||
|
|
||||||
.marquee-text {
|
.marquee-text {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
animation: marquee 9s linear infinite;
|
|
||||||
color: rgba(85, 0, 0, 1);
|
color: rgba(85, 0, 0, 1);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
|
white-space: nowrap;
|
||||||
|
transform: translateX(100%);
|
||||||
|
animation: marquee 10s linear infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes marquee {
|
@keyframes marquee {
|
||||||
0% {
|
0% {
|
||||||
transform: translateX(0);
|
transform: translateX(100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
100% {
|
100% {
|
||||||
|
/* 滚动到容器左侧外部 */
|
||||||
transform: translateX(-100%);
|
transform: translateX(-100%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,9 +8,9 @@
|
|||||||
iconColor="#FE9944">
|
iconColor="#FE9944">
|
||||||
阅读并同意</checkbox>
|
阅读并同意</checkbox>
|
||||||
</checkbox-group>
|
</checkbox-group>
|
||||||
<text class="link">《用户服务协议》</text>
|
<text class="link" @click="showServiceDeal">《用户服务协议》</text>
|
||||||
<text>和</text>
|
<text>和</text>
|
||||||
<text class="link">《隐私条款》</text>
|
<text class="link" @click="showPrivacyDeal">《隐私条款》</text>
|
||||||
</view>
|
</view>
|
||||||
<button :class="isActive?'btn-login-disable':'btn-login'" open-type="getPhoneNumber"
|
<button :class="isActive?'btn-login-disable':'btn-login'" open-type="getPhoneNumber"
|
||||||
@getphonenumber="decryptPhoneNumber" :disabled="isActive">授权登录</button>
|
@getphonenumber="decryptPhoneNumber" :disabled="isActive">授权登录</button>
|
||||||
@ -19,13 +19,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {
|
|
||||||
isReactive
|
|
||||||
} from 'vue';
|
|
||||||
import {
|
import {
|
||||||
set
|
set
|
||||||
}
|
}
|
||||||
from '../../static/utils/cache/storage.js'
|
from '@/common/js/cache/storage.js'
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -33,21 +30,32 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoad() {
|
onLoad() {
|
||||||
|
// #ifdef MP-WEIXIN || MP-TOUTIAO
|
||||||
|
uni.login({
|
||||||
|
success: res => {
|
||||||
|
console.log('登录成功', res)
|
||||||
|
uni.switchTab({
|
||||||
|
url: '/pages/index/home'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
fail: err => {
|
||||||
|
console.log('登录失败', err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// #endif
|
||||||
|
// #ifdef H5 || MP-BAIDU
|
||||||
set('token',
|
set('token',
|
||||||
'NjBIOFRORDcraDc4U1RsUTI4a3B5em50VVVzclp2QjdFWDV2dVJJc0VLL3Fhazd0bjZPaU9Tc3E1cHc2cmYyZTc0Y2FITTdRR0pMTk1xaVRHM0I1d0NiTnJ4b1BVSVNtUFl4SlFtR1g2M0tCQTc2TXM4L3d4ZVhwM09VREN0bDMrTXNoa0trWDR1eG5PdG84OXZ4UVE0dDhRUDdQRk1Qd2N0ZWVLSzJaZzBjcC82NXdueGQvUkZNSm1vZ2doQmFncnRQN0pFQ240enZHaEdFcGpVTDZqY3VpdHRUZERUS2Y5RG5BdXZmeE1kNVVyM29icTZTV054RzNYdURDa2lvR3dIbi9nNmJLOHduNUl4Snp3Qm1qTDRkYXFXZ2plaGNQRmw3ZXBZTlgxV3cwZkVuaGxHZlhRb0ZZMlEveEJhQS9zeWE5NnpxRlUxTmJWYkRmMitvMTZXRnExVytHNEhEb1JPZkE4TG5UVzc0PQ=='
|
'NjBIOFRORDcraDc4U1RsUTI4a3B5em50VVVzclp2QjdFWDV2dVJJc0VLL3Fhazd0bjZPaU9Tc3E1cHc2cmYyZTc0Y2FITTdRR0pMTk1xaVRHM0I1d0NiTnJ4b1BVSVNtUFl4SlFtR1g2M0tCQTc2TXM4L3d4ZVhwM09VREN0bDMrTXNoa0trWDR1eG5PdG84OXZ4UVE0dDhRUDdQRk1Qd2N0ZWVLSzJaZzBjcC82NXdueGQvUkZNSm1vZ2doQmFncnRQN0pFQ240enZHaEdFcGpVTDZqY3VpdHRUZERUS2Y5RG5BdXZmeE1kNVVyM29icTZTV054RzNYdURDa2lvR3dIbi9nNmJLOHduNUl4Snp3Qm1qTDRkYXFXZ2plaGNQRmw3ZXBZTlgxV3cwZkVuaGxHZlhRb0ZZMlEveEJhQS9zeWE5NnpxRlUxTmJWYkRmMitvMTZXRnExVytHNEhEb1JPZkE4TG5UVzc0PQ=='
|
||||||
)
|
)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
console.log('调用');
|
|
||||||
uni.switchTab({
|
uni.switchTab({
|
||||||
url: '/pages/index/home',
|
url: '/pages/index/home'
|
||||||
success() {
|
|
||||||
console.log('成功');
|
|
||||||
},
|
|
||||||
fail(err) {
|
|
||||||
console.log('失败', err);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}, 2000)
|
}, 1000)
|
||||||
|
// #endif
|
||||||
|
},
|
||||||
|
onUnload() {
|
||||||
|
console.log('页面卸载');
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
//是否勾选服务协议
|
//是否勾选服务协议
|
||||||
@ -56,12 +64,24 @@
|
|||||||
},
|
},
|
||||||
decryptPhoneNumber(e) {
|
decryptPhoneNumber(e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
}
|
},
|
||||||
|
//用户服务协议
|
||||||
|
showServiceDeal() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/common/rule/rule?id=68eee8f5-33d3-4246-aeee-a33956677101',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
//隐私条款
|
||||||
|
showPrivacyDeal() {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/common/rule/rule?id=93679af4-e264-4d1c-bd49-538028daa95d'
|
||||||
|
})
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
.content {
|
.content {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@ -118,7 +138,7 @@
|
|||||||
font-family: PingFangSC-regular;
|
font-family: PingFangSC-regular;
|
||||||
}
|
}
|
||||||
|
|
||||||
..btn-login-disable::before {
|
.btn-login-disable::before {
|
||||||
border: none !important;
|
border: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
<view class="body-container">
|
<view class="body-container">
|
||||||
<view class="search-box">
|
<view class="search-box">
|
||||||
<view class="search-container">
|
<view class="search-container">
|
||||||
|
<view class="search-input-icon"></view>
|
||||||
<input class="search-input" :value="keywords" @input="inputKeywords" @confirm="doSearchKeyWord"
|
<input class="search-input" :value="keywords" @input="inputKeywords" @confirm="doSearchKeyWord"
|
||||||
type="text" confirm-type="search" placeholder="搜索" />
|
type="text" confirm-type="search" placeholder="搜索" />
|
||||||
<view v-if="keywords !=''" @click="clearSearch" class="icon-clear" style="width: 20px;height: 20px;">
|
<view v-if="keywords !=''" @click="clearSearch" class="icon-clear" style="width: 20px;height: 20px;">
|
||||||
@ -9,34 +10,33 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="add-btn" @click="showCreateDialog">创建联系人</view>
|
<view class="add-btn" @click="showCreateDialog">创建联系人</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="content-container">
|
<ContainerLoading :loadingVisible="loadingState" style="height: 83vh;margin-top: 30rpx;"
|
||||||
<ContainerLoading :loadingVisible="loadingState" style="height: 85vh;" @doRefresh="doRefreshList">
|
@doRefresh="doRefreshList">
|
||||||
<scroll-view scroll-y style="height: 85vh;padding-bottom: 40px;" refresher-enabled
|
<scroll-view scroll-y style="height: 83vh;" refresher-enabled :refresher-triggered="listRefreshTrig"
|
||||||
:refresher-triggered="listRefreshTrig" :refresher-threshold="100" :lower-threshold="100"
|
:refresher-threshold="100" :lower-threshold="100" refresher-background="#FFFFFF00"
|
||||||
refresher-background="#FFFFFF00" @refresherrefresh="doRefreshList" @scrolltolower="doLoadMore">
|
@refresherrefresh="doRefreshList" @scrolltolower="doLoadMore">
|
||||||
<view class="order-box">
|
<view class="order-box">
|
||||||
<block v-for="(item,index) in contactList" :key="index">
|
<block v-for="(item,index) in contactList" :key="index">
|
||||||
<view class="order-item">
|
<view class="order-item">
|
||||||
<view class="contact-desc">
|
<view class="contact-desc">
|
||||||
<view class="contact-icon">
|
<view class="contact-icon">
|
||||||
<view class="ic-user" style="width: 24px;height: 24px;"></view>
|
<view class="ic-user" style="width: 24px;height: 24px;"></view>
|
||||||
<view class="ml-10 name">{{item.name}}</view>
|
<view class="ml-10 name">{{item.name}}</view>
|
||||||
</view>
|
</view>
|
||||||
<view>{{item.phone}}</view>
|
<view>{{item.phone}}</view>
|
||||||
<view class="options-box">
|
<view class="options-box">
|
||||||
<view class="edit" @click="showEditDialog" :data-value="item">编辑</view>
|
<view class="edit" @click="showEditDialog" :data-value="item">编辑</view>
|
||||||
<view class="del" @click="showDelDialog" :data-value="item">删除</view>
|
<view class="del" @click="showDelDialog" :data-value="item">删除</view>
|
||||||
</view>
|
|
||||||
</view>
|
</view>
|
||||||
<view class="service-desc ml-10">{{item.company}}</view>
|
|
||||||
<view class="service-desc ml-10">专属客服 : {{item.csaNo}}</view>
|
|
||||||
</view>
|
</view>
|
||||||
</block>
|
<view class="service-desc ml-10">{{item.company}}</view>
|
||||||
<uni-load-more :status="loadMore"></uni-load-more>
|
<view class="service-desc ml-10">专属客服 : {{item.csaNo}}</view>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</block>
|
||||||
</ContainerLoading>
|
<uni-load-more :status="loadMore"></uni-load-more>
|
||||||
</view>
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
</ContainerLoading>
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
<!-- 确认弹窗 -->
|
<!-- 确认弹窗 -->
|
||||||
@ -88,11 +88,11 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ContainerLoading from '@/components/container-loading.vue'
|
import ContainerLoading from '@/components/container-loading.vue'
|
||||||
import UserApi from '../../../../static/utils/net/UserApi'
|
import UserApi from '@/common/js/net/UserApi'
|
||||||
import {
|
import {
|
||||||
isValidPhone,
|
isValidPhone,
|
||||||
isValidEmail
|
isValidEmail
|
||||||
} from '../../../../static/utils/validator.js'
|
} from '@/common/js/validator.js'
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
ContainerLoading
|
ContainerLoading
|
||||||
@ -399,7 +399,7 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
.ic-user {
|
.ic-user {
|
||||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQzOTg4MzkwNjkwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM0MDkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiAxMDI0QzIyOS4yMDUzMzMgMTAyNCAwIDc5NC43OTQ2NjcgMCA1MTJTMjI5LjIwNTMzMyAwIDUxMiAwczUxMiAyMjkuMjA1MzMzIDUxMiA1MTItMjI5LjIwNTMzMyA1MTItNTEyIDUxMnogbTAtNDk2LjQ2OTMzM2ExNzAuNjY2NjY3IDE3MC42NjY2NjcgMCAxIDAgMC0zNDEuMzMzMzM0IDE3MC42NjY2NjcgMTcwLjY2NjY2NyAwIDAgMCAwIDM0MS4zMzMzMzR6IG0yNjMuNzY1MzMzIDI2My43MjI2NjZhMjYzLjc2NTMzMyAyNjMuNzY1MzMzIDAgMSAwLTUyNy41MzA2NjYgMGg1MjcuNTMwNjY2eiIgcC1pZD0iMzQxMCIgZmlsbD0iIzEyOTZkYiI+PC9wYXRoPjwvc3ZnPg==');
|
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQzOTg4MzkwNjkwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM0MDkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiAxMDI0QzIyOS4yMDUzMzMgMTAyNCAwIDc5NC43OTQ2NjcgMCA1MTJTMjI5LjIwNTMzMyAwIDUxMiAwczUxMiAyMjkuMjA1MzMzIDUxMiA1MTItMjI5LjIwNTMzMyA1MTItNTEyIDUxMnogbTAtNDk2LjQ2OTMzM2ExNzAuNjY2NjY3IDE3MC42NjY2NjcgMCAxIDAgMC0zNDEuMzMzMzM0IDE3MC42NjY2NjcgMTcwLjY2NjY2NyAwIDAgMCAwIDM0MS4zMzMzMzR6IG0yNjMuNzY1MzMzIDI2My43MjI2NjZhMjYzLjc2NTMzMyAyNjMuNzY1MzMzIDAgMSAwLTUyNy41MzA2NjYgMGg1MjcuNTMwNjY2eiIgcC1pZD0iMzQxMCIgZmlsbD0iIzEyOTZkYiI+PC9wYXRoPjwvc3ZnPg==');
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
@ -408,30 +408,22 @@
|
|||||||
|
|
||||||
|
|
||||||
.search-box {
|
.search-box {
|
||||||
position: fixed;
|
|
||||||
top: 100rpx;
|
|
||||||
left: 0;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
align-self: center;
|
|
||||||
width: 96vw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-container {
|
.search-container {
|
||||||
position: relative;
|
|
||||||
align-self: center;
|
align-self: center;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
background-color: rgba(255, 255, 255, 1);
|
background-color: rgba(255, 255, 255, 1);
|
||||||
font-family: -regular;
|
font-family: -regular;
|
||||||
margin: 10px 15px;
|
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: baseline;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
margin-right: 15rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-input {
|
.search-input {
|
||||||
@ -442,19 +434,16 @@
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-input::after {
|
.search-input-icon {
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
|
||||||
left: 10px;
|
|
||||||
top: 50%;
|
|
||||||
transform: translateY(-50%);
|
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
margin-top: -1px;
|
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSI2NCA2NCA4OTYgODk2IiB3aWR0aD0iMTQiIGhlaWdodD0iMTkiIHN0eWxlPSIiIGZpbHRlcj0ibm9uZSI+CiAgICAKICAgIDxnPgogICAgPHBhdGggZD0iTTkwOS42IDg1NC41TDY0OS45IDU5NC44QzY5MC4yIDU0Mi43IDcxMiA0NzkgNzEyIDQxMmMwLTgwLjItMzEuMy0xNTUuNC04Ny45LTIxMi4xLTU2LjYtNTYuNy0xMzItODcuOS0yMTIuMS04Ny45cy0xNTUuNSAzMS4zLTIxMi4xIDg3LjlDMTQzLjIgMjU2LjUgMTEyIDMzMS44IDExMiA0MTJjMCA4MC4xIDMxLjMgMTU1LjUgODcuOSAyMTIuMUMyNTYuNSA2ODAuOCAzMzEuOCA3MTIgNDEyIDcxMmM2NyAwIDEzMC42LTIxLjggMTgyLjctNjJsMjU5LjcgMjU5LjZhOC4yIDguMiAwIDAgMCAxMS42IDBsNDMuNi00My41YTguMiA4LjIgMCAwIDAgMC0xMS42ek01NzAuNCA1NzAuNEM1MjggNjEyLjcgNDcxLjggNjM2IDQxMiA2MzZzLTExNi0yMy4zLTE1OC40LTY1LjZDMjExLjMgNTI4IDE4OCA0NzEuOCAxODggNDEyczIzLjMtMTE2LjEgNjUuNi0xNTguNEMyOTYgMjExLjMgMzUyLjIgMTg4IDQxMiAxODhzMTE2LjEgMjMuMiAxNTguNCA2NS42UzYzNiAzNTIuMiA2MzYgNDEycy0yMy4zIDExNi4xLTY1LjYgMTU4LjR6IiBmaWxsPSJyZ2JhKDIwNCwyMDQsMjA0LDEpIj48L3BhdGg+CiAgICA8L2c+CiAgPC9zdmc+');
|
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSI2NCA2NCA4OTYgODk2IiB3aWR0aD0iMTQiIGhlaWdodD0iMTkiIHN0eWxlPSIiIGZpbHRlcj0ibm9uZSI+CiAgICAKICAgIDxnPgogICAgPHBhdGggZD0iTTkwOS42IDg1NC41TDY0OS45IDU5NC44QzY5MC4yIDU0Mi43IDcxMiA0NzkgNzEyIDQxMmMwLTgwLjItMzEuMy0xNTUuNC04Ny45LTIxMi4xLTU2LjYtNTYuNy0xMzItODcuOS0yMTIuMS04Ny45cy0xNTUuNSAzMS4zLTIxMi4xIDg3LjlDMTQzLjIgMjU2LjUgMTEyIDMzMS44IDExMiA0MTJjMCA4MC4xIDMxLjMgMTU1LjUgODcuOSAyMTIuMUMyNTYuNSA2ODAuOCAzMzEuOCA3MTIgNDEyIDcxMmM2NyAwIDEzMC42LTIxLjggMTgyLjctNjJsMjU5LjcgMjU5LjZhOC4yIDguMiAwIDAgMCAxMS42IDBsNDMuNi00My41YTguMiA4LjIgMCAwIDAgMC0xMS42ek01NzAuNCA1NzAuNEM1MjggNjEyLjcgNDcxLjggNjM2IDQxMiA2MzZzLTExNi0yMy4zLTE1OC40LTY1LjZDMjExLjMgNTI4IDE4OCA0NzEuOCAxODggNDEyczIzLjMtMTE2LjEgNjUuNi0xNTguNEMyOTYgMjExLjMgMzUyLjIgMTg4IDQxMiAxODhzMTE2LjEgMjMuMiAxNTguNCA2NS42UzYzNiAzNTIuMiA2MzYgNDEycy0yMy4zIDExNi4xLTY1LjYgMTU4LjR6IiBmaWxsPSJyZ2JhKDIwNCwyMDQsMjA0LDEpIj48L3BhdGg+CiAgICA8L2c+CiAgPC9zdmc+');
|
||||||
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.add-btn {
|
.add-btn {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
background-color: rgba(50, 112, 255, 1);
|
background-color: rgba(50, 112, 255, 1);
|
||||||
@ -472,7 +461,7 @@
|
|||||||
|
|
||||||
.content-container {
|
.content-container {
|
||||||
height: 86vh;
|
height: 86vh;
|
||||||
margin-top: 130rpx;
|
margin-top: 30rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -624,6 +613,4 @@
|
|||||||
.confirm-btn:active {
|
.confirm-btn:active {
|
||||||
background-color: rgba(7, 193, 96, 0.5);
|
background-color: rgba(7, 193, 96, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
@ -57,13 +57,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ContainerLoading from '../../../../components/container-loading.vue';
|
import ContainerLoading from '@/components/container-loading.vue';
|
||||||
import ProApi from '../../../../static/utils/net/projectApi.js'
|
import ProApi from '@/common/js/net/projectApi.js'
|
||||||
import {
|
import {
|
||||||
boderStyle,
|
boderStyle,
|
||||||
fontColor,
|
fontColor,
|
||||||
timeSplit
|
timeSplit
|
||||||
} from '../../../../static/utils/conver.js'
|
} from '@/common/js/conver.js'
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
ContainerLoading
|
ContainerLoading
|
||||||
@ -197,7 +197,7 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
.list-title-btns {
|
.list-title-btns {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 45px;
|
top: 45px;
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="body-container">
|
<view class="body-container">
|
||||||
<view class="info-container">
|
<view class="user-info-container">
|
||||||
<view class="item">
|
<view class="user-item">
|
||||||
<view class="item-title">姓名</view>
|
<view class="user-item-title">姓名</view>
|
||||||
<view class="item-content">
|
<view class="user-item-content">
|
||||||
<input :value="userInfo.userInfoName" @input="inputName" placeholder="请输入姓名" />
|
<input :value="userInfo.userInfoName" @input="inputName" placeholder="请输入姓名" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="item">
|
<view class="user-item">
|
||||||
<view class="item-title">联系电话</view>
|
<view class="user-item-title">联系电话</view>
|
||||||
<view class="item-content">
|
<view class="user-item-content">
|
||||||
<input :value="userInfo.contactPhone" @input="inputPhone" type="number" placeholder="请输入联系电话" />
|
<input :value="userInfo.contactPhone" @input="inputPhone" type="number" placeholder="请输入联系电话" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="bottom-box">
|
<view class="user-bottom-box">
|
||||||
<view class="green-bottom-btn" @click="doUpdateInfo">保存</view>
|
<view class="user-green-bottom-btn" @click="doUpdateInfo">保存</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<uni-popup ref="msg" type="message">
|
<uni-popup ref="msg" type="message">
|
||||||
@ -26,8 +26,8 @@
|
|||||||
<script>
|
<script>
|
||||||
import {
|
import {
|
||||||
isValidPhone
|
isValidPhone
|
||||||
} from '../../../../static/utils/validator.js'
|
} from '@/common/js/validator.js'
|
||||||
import UserApi from '../../../../static/utils/net/UserApi.js'
|
import UserApi from '@/common/js/net/UserApi.js'
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -136,15 +136,15 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style scoped>
|
||||||
.info-container {
|
.user-info-container {
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
background-color: white;
|
background-color: white;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.user-item {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: flex-start;
|
justify-content: flex-start;
|
||||||
@ -152,16 +152,16 @@
|
|||||||
padding: 10px 5px;
|
padding: 10px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-title {
|
.user-item-title {
|
||||||
flex: .3;
|
flex: .3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-content {
|
.user-item-content {
|
||||||
flex: .7;
|
flex: .7;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom-box {
|
.user-bottom-box {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 0;
|
left: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
@ -172,7 +172,7 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.green-bottom-btn {
|
.user-green-bottom-btn {
|
||||||
height: 42px;
|
height: 42px;
|
||||||
width: 90vw;
|
width: 90vw;
|
||||||
line-height: 42px;
|
line-height: 42px;
|
||||||
@ -186,7 +186,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.green-bottom-btn:active {
|
.user-green-bottom-btn:active {
|
||||||
background-color: rgba(255, 169, 0, 0.3);
|
background-color: rgba(255, 169, 0, 0.3);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
@ -7,11 +7,11 @@
|
|||||||
<view v-if="keywords !=''" @click="clearSearch" class="icon-clear icon-position"></view>
|
<view v-if="keywords !=''" @click="clearSearch" class="icon-clear icon-position"></view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<ContainerLoading :loadingVisible="loadingState" style="height: 85vh;margin-top: 100rpx;"
|
<ContainerLoading :loadingVisible="loadingState" style="height: 85vh;margin-top: 30rpx;"
|
||||||
@doRefresh="doRefreshList">
|
@doRefresh="doRefreshList">
|
||||||
<scroll-view scroll-y style="height: 85vh;" refresher-enabled :refresher-triggered="listRefreshTrig"
|
<scroll-view scroll-y style="height: 85vh;" refresher-enabled :refresher-triggered="listRefreshTrig"
|
||||||
:refresher-threshold="100" :lower-threshold="100" @refresherrefresh="doRefreshList" refresher-background="#FFFFFF00"
|
:refresher-threshold="100" :lower-threshold="100" @refresherrefresh="doRefreshList"
|
||||||
@scrolltolower="doLoadMore">
|
refresher-background="#FFFFFF00" @scrolltolower="doLoadMore">
|
||||||
<view class="order-box">
|
<view class="order-box">
|
||||||
<block v-for="(item,index) in orderList" :key="index">
|
<block v-for="(item,index) in orderList" :key="index">
|
||||||
<view class="order-item">
|
<view class="order-item">
|
||||||
@ -49,11 +49,11 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ContainerLoading from '@/components/container-loading.vue'
|
import ContainerLoading from '@/components/container-loading.vue'
|
||||||
import UserApi from '../../../../static/utils/net/UserApi.js'
|
import UserApi from '@/common/js/net/UserApi.js'
|
||||||
import {
|
import {
|
||||||
orderStatus,
|
orderStatus,
|
||||||
proType
|
proType
|
||||||
} from '../../../../static/utils/conver.js'
|
} from '@/common/js/conver.js'
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
ContainerLoading
|
ContainerLoading
|
||||||
@ -161,12 +161,10 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
.search-box {
|
.search-box {
|
||||||
position: fixed;
|
display: flex;
|
||||||
top: 100rpx;
|
flex-direction: row;
|
||||||
left: 0;
|
|
||||||
width: 100vw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-container {
|
.search-container {
|
||||||
@ -175,12 +173,12 @@
|
|||||||
border-radius: 5rpx;
|
border-radius: 5rpx;
|
||||||
background-color: rgba(255, 255, 255, 1);
|
background-color: rgba(255, 255, 255, 1);
|
||||||
font-family: -regular;
|
font-family: -regular;
|
||||||
margin: 20rpx 30rpx;
|
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
width: 100vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-input {
|
.search-input {
|
||||||
|
@ -65,9 +65,9 @@
|
|||||||
<script>
|
<script>
|
||||||
import {
|
import {
|
||||||
copyrightUrl
|
copyrightUrl
|
||||||
} from '../../../static/utils/net/http.js'
|
} from '@/common/js/net/http.js'
|
||||||
import UserApi from '../../../static/utils/net/UserApi.js'
|
import UserApi from '@/common/js/net/UserApi.js'
|
||||||
import ProApi from '../../../static/utils/net/projectApi.js'
|
import ProApi from '@/common/js/net/projectApi.js'
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -112,6 +112,7 @@
|
|||||||
});
|
});
|
||||||
this.animation = animation
|
this.animation = animation
|
||||||
this.doGetPrice()
|
this.doGetPrice()
|
||||||
|
this.countBarHeight()
|
||||||
},
|
},
|
||||||
onReady() {
|
onReady() {
|
||||||
this.calculateRemainingHeight()
|
this.calculateRemainingHeight()
|
||||||
@ -121,6 +122,21 @@
|
|||||||
this.getMinePackageCount()
|
this.getMinePackageCount()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
//计算状态栏等高度
|
||||||
|
countBarHeight() {
|
||||||
|
//#ifdef MP-WEIXIN || H5
|
||||||
|
const windowInfo = uni.getWindowInfo()
|
||||||
|
const deviceInfo = uni.getDeviceInfo()
|
||||||
|
this.statusBarHeight = windowInfo.statusBarHeight
|
||||||
|
this.totalHeight = deviceInfo.osName.toLowerCase() == 'ios' ? 48 : 50 // 导航栏总高度
|
||||||
|
//#endif
|
||||||
|
//#ifdef MP-ALIPAY ||MP-BAIDU||MP-TOUTIAO || MP-KUAISHOU || MP-XHS
|
||||||
|
const deviceInfo = uni.getSystemInfoSync()
|
||||||
|
this.statusBarHeight = deviceInfo.statusBarHeight
|
||||||
|
this.totalHeight = deviceInfo.osName.toLowerCase() == 'ios' ? 48 : 50 // 导航栏总高度
|
||||||
|
console.log('手机平台', deviceInfo.osName)
|
||||||
|
//#endif
|
||||||
|
},
|
||||||
//计算高度
|
//计算高度
|
||||||
calculateRemainingHeight() {
|
calculateRemainingHeight() {
|
||||||
// 获取窗口高度
|
// 获取窗口高度
|
||||||
@ -133,9 +149,15 @@
|
|||||||
query.select('#func-box').boundingClientRect(data => {
|
query.select('#func-box').boundingClientRect(data => {
|
||||||
if (data) {
|
if (data) {
|
||||||
const occupiedHeight = data.height;
|
const occupiedHeight = data.height;
|
||||||
console.log(occupiedHeight);
|
console.log('头布局高度', occupiedHeight);
|
||||||
// 计算剩余高度
|
// 计算剩余高度
|
||||||
this.contentHeight = windowHeight - occupiedHeight - 40;
|
|
||||||
|
this.contentHeight = windowHeight - occupiedHeight - this.totalHeight - this
|
||||||
|
.statusBarHeight;
|
||||||
|
console.log('内容高度', this.contentHeight)
|
||||||
|
console.log('窗口高度', windowHeight)
|
||||||
|
} else {
|
||||||
|
console.log('未获取到高度');
|
||||||
}
|
}
|
||||||
}).exec();
|
}).exec();
|
||||||
},
|
},
|
||||||
@ -155,7 +177,16 @@
|
|||||||
},
|
},
|
||||||
//跳转创建
|
//跳转创建
|
||||||
openCreate(e) {
|
openCreate(e) {
|
||||||
const type = e.currentTarget.dataset.type
|
const _self = this;
|
||||||
|
const type = e.currentTarget.dataset.type;
|
||||||
|
const count = type === 'ALL' ? _self.allCount : _self.materialCount;
|
||||||
|
if (count > 0) {
|
||||||
|
_self.doGetPackage(type);
|
||||||
|
} else {
|
||||||
|
_self.msgType = 'error';
|
||||||
|
_self.msgTxt = '您的账户当前无套餐包,为正常使用请及时充值。';
|
||||||
|
_self.$refs.msg.open();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
//跳转优惠卷
|
//跳转优惠卷
|
||||||
doCoupons() {
|
doCoupons() {
|
||||||
@ -249,6 +280,41 @@
|
|||||||
_self.$refs.msg.open()
|
_self.$refs.msg.open()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
//获取套餐包详情
|
||||||
|
doGetPackage(type) {
|
||||||
|
const _self = this
|
||||||
|
uni.showLoading({
|
||||||
|
title: '加载中...'
|
||||||
|
})
|
||||||
|
const data = {
|
||||||
|
page: 1,
|
||||||
|
rows: 10,
|
||||||
|
packageType: type,
|
||||||
|
keyong: 1,
|
||||||
|
}
|
||||||
|
ProApi.doGetPackageList(data)
|
||||||
|
.then(res => {
|
||||||
|
uni.hideLoading()
|
||||||
|
console.log(res.rows)
|
||||||
|
if (res.rows && res.rows.length > 0) {
|
||||||
|
const packageId = res.rows[0].packageInfoId
|
||||||
|
const price = type == 'ALL' ? _self.allPrice : _self.materialPrice
|
||||||
|
uni.navigateTo({
|
||||||
|
url: `/pages/copyright/createProjectInfo/createProjectInfo?type=${type}&price=${price}&isUrgent=false&pId=${packageId}`
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
_self.msgTxt = '您的账户当前无套餐包,为正常使用请及时充值。'
|
||||||
|
_self.msgType = 'error'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
uni.hideLoading()
|
||||||
|
_self.msgTxt = '获取套餐包失败,请稍后重试'
|
||||||
|
_self.msgType = 'error'
|
||||||
|
_self.$refs.msg.open()
|
||||||
|
})
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
page {
|
page {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
}
|
}
|
||||||
|
@ -86,7 +86,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import ContainerLoading from '@/components/container-loading.vue';
|
import ContainerLoading from '@/components/container-loading.vue';
|
||||||
import PayService from '../../../static/utils/net/payApi.js';
|
import PayService from '@/common/js/net/payApi.js';
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
ContainerLoading
|
ContainerLoading
|
||||||
@ -285,7 +285,7 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
.input-money {
|
.input-money {
|
||||||
font-size: 48rpx;
|
font-size: 48rpx;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -91,11 +91,11 @@
|
|||||||
<script>
|
<script>
|
||||||
import {
|
import {
|
||||||
get
|
get
|
||||||
} from '../../../static/utils/cache/storage.js'
|
} from '@/common/js/cache/storage.js'
|
||||||
import PayApi from '../../../static/utils/net/payApi'
|
import PayApi from '@/common/js/net/payApi'
|
||||||
import {
|
import {
|
||||||
uploadImgUrl
|
uploadImgUrl
|
||||||
} from '../../../static/utils/net/http.js'
|
} from '@/common/js/net/http.js'
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
@ -333,7 +333,7 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style lang="scss">
|
||||||
.container-box {
|
.container-box {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@ -482,7 +482,8 @@
|
|||||||
width: 50rpx !important;
|
width: 50rpx !important;
|
||||||
height: 4rpx !important;
|
height: 4rpx !important;
|
||||||
}
|
}
|
||||||
:deep(.uni-datetime-picker--btn){
|
|
||||||
|
:deep(.uni-datetime-picker--btn) {
|
||||||
background-color: rgba(255, 169, 0, 0.3) !important;
|
background-color: rgba(255, 169, 0, 0.3) !important;
|
||||||
color: white !important;
|
color: white !important;
|
||||||
}
|
}
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
// components/container-loading/container-loading.js
|
|
||||||
Component({
|
|
||||||
/**
|
|
||||||
* 组件的属性列表
|
|
||||||
*/
|
|
||||||
properties: {
|
|
||||||
loadingState: {
|
|
||||||
type: String,
|
|
||||||
value: 'loading'
|
|
||||||
},
|
|
||||||
widgetHeight: {
|
|
||||||
type: Number,
|
|
||||||
value: 200
|
|
||||||
}
|
|
||||||
},
|
|
||||||
observers: {
|
|
||||||
'loadingState': function (newVal) {
|
|
||||||
this.setData({
|
|
||||||
loadingVisible: newVal
|
|
||||||
});
|
|
||||||
},
|
|
||||||
'widgetHeight': function (newVal) {
|
|
||||||
this.setData({
|
|
||||||
height: newVal
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data: {
|
|
||||||
loadingVisible: 'loading',
|
|
||||||
height: 200
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 组件的方法列表
|
|
||||||
*/
|
|
||||||
methods: {
|
|
||||||
notifyParentToRefresh() {
|
|
||||||
// 触发自定义事件 'parentRefresh',并可以传递数据(这里传递一个空对象)
|
|
||||||
this.triggerEvent('refresh', {});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"component": true,
|
|
||||||
"usingComponents": {}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
<view class="container">
|
|
||||||
<view v-if="loadingVisible=='loading'" class="loading"></view>
|
|
||||||
<view v-elif="loadingVisible=='error'" class="error-box" @click="notifyParentToRefresh">
|
|
||||||
<image src="/static/images/load_err.png" class="loading_err"></image>
|
|
||||||
<text style="align-self: center;margin-top: 10px;color: #cecece;font-size: 14px;">加载失败</text>
|
|
||||||
</view>
|
|
||||||
<view v-elif="loadingVisible=='empty'" class="error-box" @click="notifyParentToRefresh">
|
|
||||||
<image src="/static/images/load_err.png" class="loading_err"></image>
|
|
||||||
<text style="align-self: center;margin-top: 10px;color: #cecece;font-size: 14px;">暂无数据</text>
|
|
||||||
</view>
|
|
||||||
<block v-else="loadingVisible=='success'">
|
|
||||||
<slot></slot>
|
|
||||||
</block>
|
|
||||||
</view>
|
|
@ -1,85 +0,0 @@
|
|||||||
.container {
|
|
||||||
/* display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
width: 100%;
|
|
||||||
min-height: 200rpx; */
|
|
||||||
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
box-sizing: border-box;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading {
|
|
||||||
position: relative;
|
|
||||||
width: 40px;
|
|
||||||
border-radius: 20px;
|
|
||||||
perspective: 500px;
|
|
||||||
align-self: center;
|
|
||||||
margin-top: 40%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading:before,
|
|
||||||
.loading:after {
|
|
||||||
position: absolute;
|
|
||||||
width: 15px;
|
|
||||||
height: 15px;
|
|
||||||
content: "";
|
|
||||||
border-radius: 20px;
|
|
||||||
animation: jumping 0.5s infinite alternate;
|
|
||||||
background: rgba(0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading:before {
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading:after {
|
|
||||||
right: 0;
|
|
||||||
animation-delay: 0.15s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.loading_err {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
justify-content: center;
|
|
||||||
width: 150px;
|
|
||||||
align-items: center;
|
|
||||||
height: 100px;
|
|
||||||
align-self: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes jumping {
|
|
||||||
|
|
||||||
0% {
|
|
||||||
transform: scale(1) translateY(0px) rotateX(0deg);
|
|
||||||
box-shadow: 0 0 0 rgba(0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
100% {
|
|
||||||
transform: scale(1.2) translateY(-25px) rotateX(45deg);
|
|
||||||
background: #FE9944;
|
|
||||||
box-shadow: 0 25px 40px #FE9944;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.error-box {
|
|
||||||
/* display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
width: 100%;
|
|
||||||
height: auto;
|
|
||||||
margin-top: 20%; */
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
align-self: center;
|
|
||||||
min-height: 200px;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user