ts_aimz_uni/pages/copyright/createProjectInfo/createProjectInfo.vue

1317 lines
49 KiB
Vue
Raw Normal View History

2025-04-17 17:44:39 +08:00
<template>
2025-05-15 16:54:07 +08:00
<view class="page-container">
2025-04-17 17:44:39 +08:00
<view class="container-box">
<swiper indicator-dots style="height: 120rpx;" autoplay indicator-active-color="#fff">
<swiper-item>
2025-05-15 16:54:07 +08:00
<image :src="globalData.locImg+'/banner_1.png'" style="width: 100vw;height: 120rpx;"></image>
2025-04-17 17:44:39 +08:00
</swiper-item>
<swiper-item>
2025-05-15 16:54:07 +08:00
<image :src="globalData.locImg+'/banner_2.png'" style="width: 100vw;height: 120rpx;"></image>
2025-04-17 17:44:39 +08:00
</swiper-item>
</swiper>
<view class="info-box">
2025-05-15 16:54:07 +08:00
<rich-text
nodes="<span style='font-size:16px;font-weight:bold;'>系统全称</span><span style='font-size:12px;'> (软著名称)</span>"></rich-text>
2025-04-17 17:44:39 +08:00
<textarea :value="projectName" @input="inputProjectName" class="info-value"
placeholder="请输入系统全称(注:建议以'软件''平台''系统'等字眼结尾)" placeholder-style="font-size:14px;"></textarea>
<view class="info-btn" @click="doCommendProjectName">推荐</view>
</view>
<view class="content-box">
<!-- 第一部分 -->
2025-05-15 16:54:07 +08:00
<text style="box-title">基本信息</text>
<view class="item">
<text class="item-title star">产权联系人</text>
<view class="item-content">
2025-04-17 17:44:39 +08:00
<picker style="flex:1;" mode="selector" :range="contactList" range-key="name"
@change="doChangeContact">
2025-05-15 16:54:07 +08:00
<view style="display: flex;flex-direction: row;align-items: center;">
<view class="icon-user-default-blue size-48"></view>
<view style="display: flex;flex-direction: column;margin-left: 15rpx;flex:1;">
<text style="font-size: 24rpx;color:$text-color;">{{selectContact.name}}</text>
<text
style="font-size: 22rpx;margin-top: 5rpx;">{{phoneNum(selectContact.phone,3,4,'****')}}</text>
2025-04-17 17:44:39 +08:00
</view>
2025-05-15 16:54:07 +08:00
<view class="icon-arrow-solid mr-20"></view>
2025-04-17 17:44:39 +08:00
</view>
</picker>
2025-05-15 16:54:07 +08:00
<view style="display: flex;flex-direction: row;align-items: center;" @click="doCreateContact">
<view class="icon-add-circle-blue size-32"></view>
<view class="link ml-10">新建</view>
2025-04-17 17:44:39 +08:00
</view>
2025-05-15 16:54:07 +08:00
</view>
</view>
<view class="item">
<text class="item-title star">系统版本</text>
<input class="item-content" :class="version != '' ? 'v-select':''" placeholder="v1.0"
style="flex:1;" :value="version" @input="inputVersion" />
</view>
<view class="item">
<text class="item-title star">系统语言</text>
<view class="item-content">
<view class="language-sel" :class="selectLang != ''? 'v-select':''" @click="doShowLang">
{{selectLang}}
2025-04-17 17:44:39 +08:00
</view>
2025-05-15 16:54:07 +08:00
<view class="icon-arrow-solid"></view>
2025-04-17 17:44:39 +08:00
</view>
2025-05-15 16:54:07 +08:00
</view>
<view class="item">
<text class="item-title">开发完成时间</text>
<view class="item-content">
2025-04-17 17:44:39 +08:00
<picker mode="date" style="flex:1;" :value="completeDate" start="2010-01-01" end="2050-01-01"
@change="bindDateChange">
<view class="select-time" :class="completeDate ==''? 'value-hint':''">
{{completeDate != ''? completeDate:'请选择开发完成时间'}}
</view>
</picker>
<view style="display: flex;flex-direction: row;">
<view v-if="completeDate !=''" @click="clearTime" class="icon-clear"
style="height: 32rpx;width: 32rpx;margin-right: 10rpx;">
</view>
<view v-if="completeDate==''" class="icon-calendar-ind"
style="height: 32rpx;width: 32rpx;margin-right: 10rpx;">
</view>
</view>
</view>
</view>
2025-05-15 16:54:07 +08:00
</view>
<view class="content-box">
<text class="box-title">套餐与优惠</text>
<view class="item" v-if="canSelPackage">
<text class="item-title">套餐包</text>
<view class="item-content">
<text :class="!isEmpty(selectPackage) ? 'v-select':'v-normal'" style="flex: 1;"
2025-04-17 17:44:39 +08:00
@click="doShowPackage">{{selectPackage.packageName?selectPackage.packageName:'请选择套餐包'}}</text>
2025-05-15 16:54:07 +08:00
<view class="icon-arrow-solid mr-20"></view>
2025-04-17 17:44:39 +08:00
<text v-if="!isEmpty(selectPackage)" class="link" @click="clearSelectPackageOrCoupons">取消</text>
</view>
2025-05-15 16:54:07 +08:00
</view>
<view class="item" v-if="canSelCoupons">
<text class="item-title">优惠券</text>
<view class="item-content">
<text @click="doShowCoupons" style="flex: 1;"
:class="!isEmpty(selectCoupons)? 'v-select':'v-normal'">{{selectCoupons.couponId? selectCoupons.coupon.title : '请选择优惠券'}}</text>
<view class="icon-arrow-solid mr-20"></view>
2025-04-17 17:44:39 +08:00
<text class="link" v-if="!isEmpty(selectCoupons)" @click="clearSelectPackageOrCoupons">取消</text>
</view>
</view>
</view>
</view>
2025-05-15 16:54:07 +08:00
<view class="bottom-fixed-footer">
2025-04-17 17:44:39 +08:00
<view class="money">
<view>金额:<text class="price">{{price/100}}</text></view>
<checkbox-group @change="doUrgent" v-if="isShowUrgent">
2025-05-15 16:54:07 +08:00
<checkbox :checked="isUrgent" color="#FFA900" class="round yellow"
2025-04-18 18:04:07 +08:00
style="transform: scale(0.7);transform-origin: left center;margin-left: 8rpx;"
2025-04-17 17:44:39 +08:00
:disabled="isUrgentDisable">
2025-05-15 16:54:07 +08:00
<text
style="color: $text-brown-color;padding-left: 8rpx;font-size:30rpx;">加急办理{{urgent/100}}</text>
2025-04-17 17:44:39 +08:00
</checkbox>
</checkbox-group>
</view>
2025-05-15 16:54:07 +08:00
<view class="bottom-btn-green" @click="doCreateProject">保存并付款</view>
2025-04-17 17:44:39 +08:00
</view>
2025-04-18 18:04:07 +08:00
<view>
<!-- 推荐项目名称 -->
<uni-popup ref="commendDialog" type="bottom" background-color="#fff" border-radius="15rpx 15rpx 0rpx 0rpx">
2025-05-15 16:54:07 +08:00
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closeCommendDialog"></view>
<view class="dialog-title-txt has-icon">项目名称</view>
2025-04-17 17:44:39 +08:00
</view>
2025-04-18 18:04:07 +08:00
<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>
2025-05-15 16:54:07 +08:00
<view class="bottom-btn-green" @click="doCreateFullName">生成</view>
2025-04-17 17:44:39 +08:00
</view>
2025-04-18 18:04:07 +08:00
</uni-popup>
<!-- 新建联系人 -->
<uni-popup ref="createContactDialog" type="bottom" background-color="#fff"
border-radius="15rpx 15rpx 0rpx 0rpx">
2025-05-15 16:54:07 +08:00
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closeCreateContact"></view>
<view class="dialog-title-txt has-icon">新建联系人</view>
2025-04-17 17:44:39 +08:00
</view>
2025-04-18 18:04:07 +08:00
<view class="form-box">
<view class="form-item">
2025-05-15 16:54:07 +08:00
<view class="form-item-title star">&emsp;&emsp;</view>
2025-04-18 18:04:07 +08:00
<input :adjust-position="true" :cursor-spacing="50" :value="contactName" placeholder="请输入姓名"
class="form-item-content" @input="inputContactName" />
</view>
<view class="form-item">
2025-05-15 16:54:07 +08:00
<view class="form-item-title star">联系电话</view>
2025-04-18 18:04:07 +08:00
<input :adjust-position="true" :cursor-spacing="50" :value="contactPhone"
placeholder="请输入联系电话" class="form-item-content" @input="inputContactPhone" />
</view>
<view class="form-item">
2025-05-15 16:54:07 +08:00
<view class="form-item-title">联系邮箱</view>
2025-04-18 18:04:07 +08:00
<input :adjust-position="true" :cursor-spacing="50" :value="contactEmail"
placeholder="请输入联系邮箱" class="form-item-content" @input="inputContactEmail" />
</view>
<view class="form-item">
2025-05-15 16:54:07 +08:00
<view class="form-item-title">&emsp;&emsp;</view>
2025-04-18 18:04:07 +08:00
<input :adjust-position="true" :cursor-spacing="50" :value="contactCompany"
placeholder="请输入公司名称" class="form-item-content" @input="inputContactCompany" />
</view>
2025-04-17 17:44:39 +08:00
</view>
2025-05-15 16:54:07 +08:00
<view class="bottom-btn-green" @click="doSaveContact">保存</view>
2025-04-17 17:44:39 +08:00
</view>
2025-04-18 18:04:07 +08:00
</uni-popup>
<!-- 语言选择 -->
<uni-popup ref="selectLangDialog" type="bottom" background-color="#fff"
border-radius="15rpx 15rpx 0rpx 0rpx">
2025-05-15 16:54:07 +08:00
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closeLangDialog"></view>
<view class="dialog-title-txt has-icon">系统语言</view>
2025-04-18 18:04:07 +08:00
</view>
2025-04-17 17:44:39 +08:00
<view class="coupons-list-box">
2025-05-15 16:54:07 +08:00
<scroll-view scroll-y style="height: 400rpx;">
<radio-group style="display: flex;flex-direction: column;width: 100vw;"
@change="changeLang">
<block v-for="(item,index) in langList" :key="index">
<radio style="margin-top: 10rpx;" :checked="selectLang==item" :value="item">
2025-05-30 17:38:28 +08:00
<view style="margin-left: 20rpx;text-align: center;padding: 15rpx 0rpx;">{{item}}</view>
2025-05-15 16:54:07 +08:00
</radio>
</block>
</radio-group>
</scroll-view>
2025-04-17 17:44:39 +08:00
</view>
2025-05-15 16:54:07 +08:00
<view class="bottom-btn-green" @click="doConfirmLang">确定</view>
2025-04-17 17:44:39 +08:00
</view>
2025-04-18 18:04:07 +08:00
</uni-popup>
<!-- 套餐包弹窗 -->
<uni-popup ref="selPackageDialog" type="bottom" background-color="#fff"
border-radius="15rpx 15rpx 0rpx 0rpx">
2025-05-15 16:54:07 +08:00
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closePackage"></view>
<view class="dialog-title-txt has-icon">套餐包</view>
2025-04-18 18:04:07 +08:00
</view>
2025-05-15 16:54:07 +08:00
<view style="display: flex;flex-direction: column;padding: 20rpx;">
<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>
2025-04-18 18:04:07 +08:00
</view>
2025-05-15 16:54:07 +08:00
<view class="r-tickets">
<radio style="margin-left: 5px;" :value="index+''"
2025-05-15 16:54:07 +08:00
:checked="tempPackage.packageInfoId==item.packageInfoId">
</radio>
2025-04-17 17:44:39 +08:00
</view>
</view>
2025-05-15 16:54:07 +08:00
</block>
</radio-group>
</view>
</scroll-view>
</view>
<view class="bottom-btn-green" @click="doConfirmPackage">确定</view>
2025-04-18 18:04:07 +08:00
</view>
</uni-popup>
<!-- 优惠卷弹窗 -->
<uni-popup ref="selCouponsDialog" type="bottom" background-color="#fff"
border-radius="15rpx 15rpx 0rpx 0rpx">
2025-05-15 16:54:07 +08:00
<view class="bottom-dialog-container">
<view class="dialog-title-box">
<view class="icon-close size-48" @click="closeCoupons"></view>
<view class="dialog-title-txt has-icon">优惠卷</view>
2025-04-17 17:44:39 +08:00
</view>
2025-05-15 16:54:07 +08:00
<view style="display: flex;flex-direction: column;padding: 20rpx;">
<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>
2025-04-18 18:04:07 +08:00
</view>
2025-05-15 16:54:07 +08:00
<view>{{item.coupon.amount/100}}</view>
2025-04-18 18:04:07 +08:00
</view>
2025-05-15 16:54:07 +08:00
<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 style="margin-left: 5px;"
2025-05-15 16:54:07 +08:00
:value="index+''" :checked="tempCoupons.couponId==item.couponId">
</radio>
2025-04-18 18:04:07 +08:00
</view>
</view>
2025-05-15 16:54:07 +08:00
</block>
</radio-group>
</view>
</scroll-view>
</view>
<view class="bottom-btn-green" @click="doConfirmCoupons">确定</view>
2025-04-18 18:04:07 +08:00
</view>
</uni-popup>
<uni-popup type="message" ref="msg">
<uni-popup-message :type="msgType" :message="msgTxt" :duration="2000"></uni-popup-message>
</uni-popup>
</view>
2025-04-17 17:44:39 +08:00
</view>
</template>
<script>
2025-04-18 18:04:07 +08:00
import ProApi from '@/common/js/net/projectApi.js'
import UserApi from '@/common/js/net/UserApi.js'
2025-04-17 17:44:39 +08:00
import {
formatDate
2025-04-18 18:04:07 +08:00
} from '@/common/js/util.js'
2025-04-17 17:44:39 +08:00
import {
2025-04-18 18:04:07 +08:00
isEmpty,
2025-05-15 16:54:07 +08:00
objIsEmpty,
phoneNum
2025-04-18 18:04:07 +08:00
} from '@/common/js/conver.js'
2025-05-15 16:54:07 +08:00
import {
isValidPhone,
isValidEmail
} from '@/common/js/validator.js'
import {
inject
} from 'vue'
2025-04-17 17:44:39 +08:00
export default {
2025-05-15 16:54:07 +08:00
setup() {
const globalData = inject('globalData')
return {
globalData
}
},
2025-04-17 17:44:39 +08:00
data() {
return {
msgType: 'info',
msgTxt: '',
completeDate: '', //开发完成时间
version: "v1.0", //系统版本
type: 'ALL', //默认全托管 上级页面传递type参数 all全托管 material写材料
languageList: ['JAVA'],
currentLanguage: 'JAVA', //当前选中的语言
price: 0,
packageList: [], //套餐包
tempPackage: {}, //临时选中的优惠卷,没有点击确定按钮前
selectPackage: {}, //选中的套餐包
couponsList: [], //优惠卷
selectCoupons: {}, //选中的优惠卷
tempCoupons: {}, //临时选中的优惠卷,没有点击确定按钮
contactList: [], //联系人
selectContact: {}, //当前选中的联系人
contactPhone: '', //联系人电话
contactName: '', //联系人姓名
contactEmail: '', //联系人邮箱
2025-05-15 16:54:07 +08:00
contactCompany: '', //联系人公司
2025-04-17 17:44:39 +08:00
csaNo: '', //客服NO
projectName: '',
projectNameList: [],
isUrgent: false, //是否加急
canSelCoupons: true, //是否可以使用优惠卷
canSelPackage: true, //是否可以使用套餐包
langList: [], //项目语言
showLang: false, //显示选择语言
tempLang: '', //临时选中的语言
selectLang: '',
isShowUrgent: true, //是否加急
urgent: 0, //加急费用
isUrgentDisable: false, //是否禁用加急
proPrice: 0, //价格
transmitPId: '', //传递过来的套餐包ID
}
},
onLoad(options) {
uni.setNavigationBarTitle({
title: '创建软著',
})
uni.setNavigationBarColor({
frontColor: '#000000', // 必写项,字体颜色仅支持#ffffff和#000000
backgroundColor: '#F0F0F0', // 传递的颜色值,仅支持十六进制颜色
animation: { // 可选项
duration: 500,
timingFunc: 'easeIn'
}
})
const typeParams = options.type //类型
const priceParams = options.price //价格
const isUrgentParams = options.isUrgent //是否加急
const pId = options.pId //套餐包ID
console.log(priceParams)
if (priceParams && priceParams > 0) {
this.price = priceParams
this.proPrice = priceParams
this.type = typeParams
this.isUrgent = isUrgentParams
this.transmitPId = pId
} else {
this.msgType = 'error'
this.msgTxt = '数据有误,请稍后重试'
this.$refs.msg.open()
setTimeout(() => {
uni.navigateBack()
}, 1500);
}
if (this.type == 'ALL') {
this.isShowUrgent = true
this.isUrgent = false
} else {
this.isShowUrgent = false
}
console.log('是否加急:', this.isUrgent);
//获取项目联系人
this.doGetContactList()
//获取套餐包
this.doGetPackage()
//获取优惠卷
this.doGetCoupons()
//获取客服ID
this.doGetCsaNo(false)
//获取可选语言
this.doGetProLangList()
//获取加急等费用
this.doGetPrice()
},
methods: {
// 导入的方法
isEmpty,
2025-05-15 16:54:07 +08:00
phoneNum,
isValidPhone,
isValidEmail,
2025-04-17 17:44:39 +08:00
// 关闭dialog
closeCommendDialog() {
this.$refs.commendDialog.close()
},
closeCreateContact() {
this.$refs.crateContactDialog.close()
},
closeLangDialog() {
this.$refs.selectLangDialog.close()
},
//关闭dialog End
//获取产权联系人
doGetContactList() {
uni.showLoading({
title: '加载中...',
})
const _self = this
ProApi.doGetContactList()
.then(res => {
uni.hideLoading()
_self.contactList = res
_self.selectContact = res[0]
})
.catch(err => {
uni.hideLoading()
})
},
//获取套餐包
doGetPackage() {
const _self = this
const data = {
page: 1,
rows: 100,
packageType: _self.type,
keyong: 1,
}
ProApi.doGetPackageList(data)
.then(res => {
_self.packageList = res.rows
if (_self.transmitPId != '' && _self.transmitPId != 'undefined') {
res.rows.map(item => {
if (item.packageInfoId == _self.transmitPId) {
_self.selectPackage = item
_self.showPackage = false
_self.tempPackage = {}
_self.canSelCoupons = false
_self.selectCoupons = {}
_self.tempCoupons = {}
_self.isUrgent = false //取消加急
_self.isUrgentDisable = true //加急不能选择
_self.price = 0
}
})
}
})
.catch(err => {
_self.packageList = []
})
},
//获取优惠卷
doGetCoupons() {
const _self = this
const data = {
page: 1,
rows: 100,
isEffective: 1,
isUsed: 0
}
ProApi.doGetCouponseList(data)
.then(res => {
_self.couponsList = res.rows
})
.catch(err => {
_self.couponsList = []
})
},
//获取客服NO,用于创建联系人
doGetCsaNo(isShow) {
const _self = this
UserApi.doGetCsaNo()
.then(res => {
_self.csaNo = res.csaNo
if (isShow) {
//TODO 显示创建联系人弹窗
}
})
.catch(err => {
_self.msgTxt = '获取客服失败,请稍后重试'
_self.msgType = 'error'
_self.$refs.msg.open()
})
},
//获取可选语言
doGetProLangList() {
const _self = this
ProApi.doGetProLangList()
.then(res => {
_self.langList = res
_self.selectLang = res[0]
})
.catch(err => {
console.log(err)
})
},
//获取单价
doGetPrice() {
uni.showLoading({
title: '加载中...',
})
const _self = this
ProApi.doGetPrice()
.then(res => {
console.log(res)
_self.urgent = res.additional.urgent //加急办理
})
.catch(err => {
_self.msgTxt = '数据有误,请稍后重试'
_self.msgType = 'error'
_self.$refs.msg.open()
setTimeout(() => {
uni.navigateBack()
}, 1500)
})
},
//项目名称输入
inputProjectName(e) {
this.projectName = e.detail.value
},
//选中推荐的系统名称
doSelectProjectName(e) {
this.projectName = e.currentTarget.dataset.value
this.projectNameList = []
this.$refs.commendDialog.close()
},
//显示推荐项目名称
doCommendProjectName() {
this.$refs.commendDialog.open()
},
//获取推荐的项目名称
doCreateFullName() {
const _self = this
uni.showLoading({
title: '生成中...',
})
const data = {
prompt: _self.projectName
}
ProApi.doGetCommendProjectName(data)
.then(res => {
uni.hideLoading()
console.log(res)
if (res && res.length > 0) {
_self.projectNameList = res
} else {
_self.msgTxt = '未查询到相关推荐的系统名称,请重新输入'
_self.msgType = 'error'
_self.$refs.msg.open()
}
}, err => {
uni.hideLoading()
_self.msgTxt = '未查询到相关推荐的系统名称,请重新输入'
_self.msgType = 'error'
_self.$refs.msg.open()
})
},
//选中项目联系人
doChangeContact(e) {
this.selectContact = this.contactList[e.detail.value]
},
//显示新建联系人弹窗
doCreateContact() {
this.$refs.createContactDialog.open()
},
//监听输入版本
inputVersion(e) {
this.version = e.detail.value
},
//显示系统语言弹窗
doShowLang() {
this.$refs.selectLangDialog.open()
},
//切换系统语言
changeLang(e) {
this.tempLang = e.detail.value
},
//确定选中系统语言
doConfirmLang() {
const _self = this
if (_self.tempLang != '') {
_self.selectLang = _self.tempLang
_self.tempLang = ''
}
_self.$refs.selectLangDialog.close()
},
//时间切换
bindDateChange(e) {
this.completeDate = e.detail.value
},
//清除完成时间
clearTime() {
console.log('清除时间');
this.completeDate = ''
},
//显示套餐包弹窗
doShowPackage() {
const _self = this
if (_self.packageList.length > 0) {
_self.tempPackage = _self.selectPackage
_self.$refs.selPackageDialog.open()
} else {
_self.msgTxt = '您暂时没有可以使用的套餐包'
_self.msgType = 'error'
_self.$refs.msg.open()
}
},
//关闭套餐包弹窗
closePackage() {
this.$refs.selPackageDialog.close()
},
//点击选择套餐包
choosePackage(e) {
this.tempPackage = e.currentTarget.dataset.value
},
2025-04-18 18:04:07 +08:00
//点击radio
radioSelPackage(e) {
this.tempPackage = this.packageList[e.detail.value]
},
2025-04-17 17:44:39 +08:00
//确定选中的套餐包
doConfirmPackage() {
this.selectPackage = this.tempPackage
this.tempPackage = {}
this.canSelCoupons = false
this.selectCoupons = {}
this.tempCoupons = {}
this.isUrgent = false //取消加急
this.isUrgentDisable = true //加急不能选择
2025-04-18 18:04:07 +08:00
this.countPrice()
2025-04-17 17:44:39 +08:00
this.$refs.selPackageDialog.close()
},
//请空选中的套餐包或优惠卷
clearSelectPackageOrCoupons() {
this.selectCoupons = {}
this.selectPackage = {}
this.tempCoupons = {}
this.tempPackage = {}
this.canSelCoupons = true
this.canSelPackage = true
this.isUrgent = false //取消加急
this.isUrgentDisable = false //加急可以选择
2025-04-18 18:04:07 +08:00
this.countPrice()
2025-04-17 17:44:39 +08:00
},
//显示优惠卷弹窗
doShowCoupons() {
2025-05-15 16:54:07 +08:00
if (this.couponsList.length <= 0) {
this.msgType = 'error'
this.msgTxt = '您暂时没有可以使用的优惠卷'
this.$refs.msg.open()
} else {
this.$refs.selCouponsDialog.open()
}
2025-04-17 17:44:39 +08:00
},
//关闭优惠卷弹窗
closeCoupons() {
this.$refs.selCouponsDialog.close()
},
//确定选中的优惠卷
doConfirmCoupons() {
const _self = this
_self.selectCoupons = _self.tempCoupons
_self.tempCoupons = {}
_self.canSelPackage = false
_self.selectPackage = {}
_self.tempPackage = {}
2025-04-18 18:04:07 +08:00
_self.countPrice()
2025-04-17 17:44:39 +08:00
this.$refs.selCouponsDialog.close()
},
//切换优惠卷
chooseCoupons(e) {
this.tempCoupons = e.currentTarget.dataset.value
},
2025-04-18 18:04:07 +08:00
//radio点击
radioSelCoupons(e) {
this.tempCoupons = this.couponsList[e.detail.value]
},
2025-04-17 17:44:39 +08:00
//是否加急
doUrgent() {
const _self = this
_self.isUrgent = !_self.isUrgent
2025-04-18 18:04:07 +08:00
_self.countPrice()
},
2025-05-15 16:54:07 +08:00
//新建联系人姓名监听
inputContactName(e) {
this.contactName = e.detail.value
},
//新建联系人电话监听
inputContactPhone(e) {
console.log(e)
this.contactPhone = e.detail.value
},
//新建联系人公司监听
inputContactCompany(e) {
this.contactCompany = e.detail.value
},
//新建联系人邮箱监听
inputContactEmail(e) {
this.contactEmail = e.detail.value
},
//保存新建联系人
doSaveContact() {
const _self = this
if (_self.contactName == '') {
_self.msgTxt = '请输入联系人姓名'
_self.msgType = 'error'
_self.$refs.msg.open()
return
}
if (_self.contactPhone == '' || !isValidPhone(_self.contactPhone)) {
_self.msgTxt = '请输入正确的联系电话'
_self.msgType = 'error'
_self.$refs.msg.open()
return
}
if (_self.contactEmail != '') {
if (!isValidEmail(_self.contactEmail)) {
_self.msgTxt = '请输入正确的邮箱'
_self.msgType = 'error'
_self.$refs.msg.open()
return
}
}
const data = {
company: _self.contactCompany,
csaNo: _self.csaNo,
name: _self.contactName,
phone: _self.contactPhone,
email: _self.contactEmail
}
uni.showLoading({
title: '创建中...'
})
UserApi.doCreateContact(data)
.then(res => {
uni.hideLoading()
_self.msgTxt = '新建成功'
_self.msgType = 'success'
_self.$refs.msg.open()
_self.$refs.createContactDialog.close()
_self.contactEmail = ''
_self.contactPhone = ''
_self.contactName = ''
_self.contactCompany = ''
//获取一遍联系人
_self.doGetContactList()
})
.catch(err => {
console.log(err)
uni.hideLoading()
_self.msgTxt = err.msg ? err.msg : '新建失败,请稍后重试'
_self.msgType = 'error'
_self.$refs.msg.open()
// _self.$refs.crateContactDialog.close()
})
},
2025-04-18 18:04:07 +08:00
//计算价格
countPrice() {
const _self = this;
const trPrice = Number(_self.proPrice);
let newPrice;
if (!objIsEmpty(_self.selectPackage)) {
newPrice = 0;
2025-04-17 17:44:39 +08:00
} else {
2025-04-18 18:04:07 +08:00
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 = []
2025-05-15 16:54:07 +08:00
if (_self.isUrgent != '' && _self.isUrgent) {
list = ['URGENT']
2025-04-18 18:04:07 +08:00
}
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()
})
2025-04-17 17:44:39 +08:00
}
}
}
}
</script>
<style lang="scss">
.create-container {
display: flex;
flex-direction: column;
justify-content: flex-start;
}
.container-box {
display: flex;
flex-direction: column;
justify-content: flex-start;
2025-05-15 16:54:07 +08:00
padding-bottom: 200rpx;
2025-04-17 17:44:39 +08:00
}
.create-title {
height: 80rpx;
background-color: blanchedalmond;
}
.commend-text-area {
padding: 10px;
height: 50px;
align-self: center;
width: 85vw;
margin-top: 20rpx;
2025-04-18 18:04:07 +08:00
font-size: 28rpx;
2025-05-15 16:54:07 +08:00
background-color: $bg-gray-input-color;
border-radius: 15rpx;
2025-04-17 17:44:39 +08:00
}
.info-box {
display: flex;
flex-direction: column;
margin-top: 20rpx;
2025-05-15 16:54:07 +08:00
background-color: $white-color;
border-radius: 15rpx;
padding: 20rpx;
2025-04-17 17:44:39 +08:00
}
.info-title {
font-size: 36rpx;
font-weight: bold;
}
.info-value {
margin-top: 20rpx;
2025-05-15 16:54:07 +08:00
font-size: 24rpx;
2025-04-17 17:44:39 +08:00
line-height: 16px;
2025-05-15 16:54:07 +08:00
background-color: $bg-gray-input-color;
2025-04-17 17:44:39 +08:00
height: 65rpx;
width: auto;
padding: 15px;
2025-05-15 16:54:07 +08:00
border-radius: 15rpx;
2025-04-17 17:44:39 +08:00
}
.info-btn {
align-self: flex-end;
background-color: #FFA900;
margin-top: 20rpx;
padding: 5rpx 40rpx;
color: white;
border-radius: 10rpx;
2025-04-18 18:04:07 +08:00
font-size: 28rpx;
2025-04-17 17:44:39 +08:00
}
.content-box {
2025-05-15 16:54:07 +08:00
display: flex;
flex-direction: column;
padding: 20rpx;
background-color: $white-color;
border-radius: 15rpx;
2025-04-17 17:44:39 +08:00
margin-top: 20rpx;
}
2025-05-15 16:54:07 +08:00
.box-title {
font-size: 32rpx;
font-weight: $black-color;
color: $text-color;
2025-04-17 17:44:39 +08:00
}
2025-05-15 16:54:07 +08:00
2025-04-17 17:44:39 +08:00
.item {
display: flex;
2025-05-15 16:54:07 +08:00
flex-direction: column;
margin-top: 15rpx;
margin-left: 15rpx;
}
.item-title {
2025-04-17 17:44:39 +08:00
font-size: 28rpx;
2025-05-15 16:54:07 +08:00
color: $text-color;
}
.item-content {
display: flex;
flex-direction: row;
align-items: center;
background-color: $bg-gray-input-color;
margin-top: 10rpx;
padding: 15rpx;
border-radius: 15rpx;
2025-04-17 17:44:39 +08:00
}
.label {
color: black;
font-weight: bold;
}
.desc {
flex: 1;
color: #999;
text-align: left;
padding-left: 20rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
padding-right: 10px;
align-items: center;
}
.select-time {
color: #000000;
flex: 1;
font-size: 14px;
text-align: left;
}
.clear-icon {
width: 20px;
height: 20px;
margin-right: 20rpx;
}
.desc .icon {
width: 32rpx;
height: 32rpx;
}
.value {
color: #9A9A9A;
flex: 1;
}
.value-hint {
2025-05-15 16:54:07 +08:00
color: $text-gray-hint-color;
2025-04-17 17:44:39 +08:00
}
.v-select {
2025-05-15 16:54:07 +08:00
font-size: 28rpx;
color: $text-color;
}
.v-normal {
font-size: 28rpx;
color: $text-gray-hint-color;
2025-04-17 17:44:39 +08:00
}
.language-sel {
font-size: 14px;
flex: 1;
}
.link {
2025-05-15 16:54:07 +08:00
font-size: 28rpx;
2025-04-17 17:44:39 +08:00
color: #007AFF;
}
.flex-1 {
display: flex;
flex-direction: row;
flex: 1;
}
.selection-box {
position: relative;
flex: 1;
}
.language-options {
position: absolute;
top: 100%;
left: -20rpx;
padding: 10rpx 20rpx;
border: 1px solid #f2f2f2;
border-top: none;
background-color: white;
box-shadow: 0rpx 0rpx 10rpx 10rpx #f2f2f2;
}
.option {
padding: 15rpx;
cursor: pointer;
border-bottom: 1rpx solid #f2f2f2;
}
.option:hover {
background-color: #f0f0f0;
}
.weui-half-screen-dialog__ft {
padding: 0rpx 0rpx 40rpx;
}
.bottom-box {
position: fixed;
left: 0;
bottom: 0;
text-align: center;
width: 100vw;
line-height: 100rpx;
border-radius: 20rpx;
background-color: white;
display: flex;
flex-direction: column;
align-items: center;
}
2025-05-15 16:54:07 +08:00
.money {
color: $text-brown-color;
2025-04-17 17:44:39 +08:00
font-size: 20px;
display: flex;
flex-direction: row;
2025-04-18 18:04:07 +08:00
align-items: center;
justify-content: center;
2025-04-17 17:44:39 +08:00
}
.price {
color: rgb(250, 0, 0);
}
.form-box {
display: flex;
flex-direction: column;
justify-content: center;
2025-05-15 16:54:07 +08:00
font-size: 28rpx;
padding: 40rpx 0rpx;
2025-04-17 17:44:39 +08:00
}
.form-item {
display: flex;
flex-direction: row;
align-items: center;
2025-05-15 16:54:07 +08:00
}
.form-item:nth-of-type(n+2) {
margin-top: 15rpx;
2025-04-17 17:44:39 +08:00
}
.form-item-title {
flex: .3;
color: black;
text-align: left;
}
.form-item-content {
2025-05-15 16:54:07 +08:00
flex: .7;
2025-04-17 17:44:39 +08:00
text-align: right;
2025-05-15 16:54:07 +08:00
padding: 15rpx;
border-radius: 15rpx;
background-color: $bg-gray-input-color;
2025-04-17 17:44:39 +08:00
}
.project-box {
display: flex;
flex-direction: row;
flex-wrap: wrap;
margin-top: 10rpx;
}
.project-item {
font-size: 24rpx;
background-color: #ffaa0034;
text-align: center;
color: #804002;
text-align: center;
margin: 10rpx;
padding: 5rpx 20rpx;
border-radius: 4rpx;
}
.confirm-btn {
font-size: 28rpx;
height: 48rpx;
line-height: 48rpx;
border-radius: 10rpx;
padding: 10rpx;
text-align: center;
width: 85vw !important;
background-color: rgba(57, 154, 35, 1);
color: rgba(255, 255, 255, 1);
align-self: center;
}
.confirm-btn:active {
background-color: rgba(57, 154, 35, 0.7);
color: rgba(255, 255, 255, 1);
}
.coupons-list-box {
display: flex;
flex-direction: column;
padding: 20rpx;
2025-04-17 17:44:39 +08:00
}
.tickets {
display: flex;
padding: 5px;
box-sizing: border-box;
height: 210rpx;
}
.l-tickets {
flex: 0.7;
2025-04-17 17:44:39 +08:00
position: relative;
padding: 10px;
display: flex;
flex-direction: column;
justify-content: space-between;
background: radial-gradient(circle at right top, transparent 16rpx, #ffaa0017 0) right top / 100% 50% no-repeat,
radial-gradient(circle at right bottom, transparent 16rpx, #ffaa0017 0) right bottom / 100% 50% no-repeat;
}
.l-tickets::after {
content: '';
position: absolute;
height: 100%;
width: 8rpx;
top: 0;
left: -8rpx;
background: radial-gradient(circle at left center, transparent 8rpx, #ffaa0017 0) left center / 8rpx 20rpx;
}
.r-tickets {
flex: 0.3;
2025-04-17 17:44:39 +08:00
position: relative;
background: radial-gradient(circle at left top, transparent 16rpx, #ffaa0017 0, #ffaa0017 100%) right top / 100% 50% no-repeat,
radial-gradient(circle at left bottom, transparent 16rpx, #ffaa0017 0, #ffaa0017 100%) right bottom / 100% 50% no-repeat;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 14px;
font-weight: 500;
color: #5D3900;
}
.r-tickets::after {
content: '';
position: absolute;
height: 100%;
width: 8rpx;
top: 0;
right: -8rpx;
background: radial-gradient(circle at right center, transparent 8rpx, #ffaa0017 0) right center / 8rpx 20rpx;
}
.r-tickets::before {
content: '';
width: 1rpx;
background: linear-gradient(to top, #fff 0%, #fff 50%, transparent 50%) top left / 1rpx 20rpx repeat-y;
position: absolute;
left: 0;
top: 16rpx;
bottom: 16rpx;
}
.ticket-container:nth-last-of-type(n+1) {
margin-top: 10px;
}
.ticket-title {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
font-size: 14px;
color: #5D3900;
font-weight: 400;
}
.ticket-content {
font-size: 18px;
color: #5D3900;
text-align: center;
font-weight: bold;
}
.ticket-desc {
font-size: 12px;
color: #5D3900;
margin-top: 10px;
font-weight: 400;
}
.coupons-item {
display: flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
background-color: #ffaa0017;
border-radius: 10px;
width: 85vw;
padding: 10px 5px;
}
.coupons-item:nth-last-of-type(n+1) {
margin-top: 10px;
}
.coupons-item-content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
flex: 1;
}
.coupons-desc {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-start;
margin-left: 7px;
}
.coupons-desc .title {
font-size: 16px;
color: red;
}
.coupons-desc .dd {
font-size: 12px;
color: red;
}
.counpons-check {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.counpons-check .txt {
font-size: 16px;
color: red;
font-weight: 600;
}
.coupons-icon {
background-image: url('data:image/png;base64,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
background-size: contain;
background-repeat: no-repeat;
}
</style>