完成退款项目
This commit is contained in:
parent
1d05f8ae3d
commit
c62203c57f
3
app.json
3
app.json
@ -24,7 +24,8 @@
|
||||
"pages/mine/mineAccount/mineMsgNotice/mineMsgNotice",
|
||||
"pages/copyright/refund/refund",
|
||||
"pages/copyright/repair/repair",
|
||||
"pages/copyright/applyRepair/applyRepair"
|
||||
"pages/copyright/applyRepair/applyRepair",
|
||||
"pages/copyright/applyRefund/applyRefund"
|
||||
],
|
||||
"window": {
|
||||
"navigationBarTextStyle": "black",
|
||||
|
3
app.wxss
3
app.wxss
@ -232,8 +232,9 @@
|
||||
.single-line-front {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
direction: rtl;
|
||||
text-overflow: ellipsis;
|
||||
direction: rtl;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.multiple-3-ellipsis {
|
||||
|
@ -22,8 +22,10 @@ const apiPath = {
|
||||
canProRepairList: '/api/proj/correction/apply/listpage-proj-unapply/self', //可以补正的项目列表
|
||||
cancelProPepair: '/api/proj/correction/apply/cancel/self/{projCorrectionApplyId}', //取消补正
|
||||
applyProRepair: '/api/proj/correction/apply/save', //申请补正
|
||||
|
||||
|
||||
refundProList: '/api/proj/refund/apply/listpage/self', //我的退款项目
|
||||
canRefundProList: '/api/proj/refund/apply/listpage-proj-unapply/self', //可以退款的项目
|
||||
applyRefundPro: '/api/proj/refund/apply/save', //申请退款
|
||||
cancelRefundPro: '/api/proj/refund/apply/cancel/self/{projRefundApplyId}', //取消申请退款
|
||||
}
|
||||
class ProjectService {
|
||||
//首页介绍数量
|
||||
@ -104,6 +106,22 @@ class ProjectService {
|
||||
static doGetCanProRepairList(data) {
|
||||
return request(apiPath.canProRepairList, "GET", data)
|
||||
}
|
||||
//退款项目列表
|
||||
static doGetMineRefundProList(data) {
|
||||
return request(apiPath.refundProList, "GET", data)
|
||||
}
|
||||
static doGetCanRefundProList(data) {
|
||||
return request(apiPath.canRefundProList, "GET", data)
|
||||
}
|
||||
//取消申请退款
|
||||
static doCancelRefundPro(id) {
|
||||
const path = apiPath.cancelRefundPro.replace('{projRefundApplyId}', id)
|
||||
return request(path, "PUT")
|
||||
}
|
||||
//提交申请退款
|
||||
static doApplyRefundPro(data) {
|
||||
return request(apiPath.applyRefundPro, "POST", data)
|
||||
}
|
||||
}
|
||||
|
||||
export default ProjectService;
|
305
pages/copyright/applyRefund/applyRefund.js
Normal file
305
pages/copyright/applyRefund/applyRefund.js
Normal file
@ -0,0 +1,305 @@
|
||||
// pages/copyright/applyRepair/applyRepair.js
|
||||
import {
|
||||
uploadImgUrl
|
||||
} from '../../../net/http'
|
||||
import ProApi from '../../../net/api/projectApi'
|
||||
const Cache = require('../../../utils/storage')
|
||||
const data = require('../../../utils/data')
|
||||
const app = getApp()
|
||||
Page({
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
imgAssets: app.globalData.imgAssetsUrl,
|
||||
msgHint: '',
|
||||
msgType: '',
|
||||
msgShow: false,
|
||||
selPro: null,
|
||||
selType: null,
|
||||
files: [],
|
||||
proList: [],
|
||||
tempSelPro: null,
|
||||
typeList: data.kindList,
|
||||
showSelPro: false,
|
||||
showSelType: false,
|
||||
tempSelType: null,
|
||||
remark: '',
|
||||
proKeywords: '',
|
||||
proPageData: {
|
||||
page: 1,
|
||||
rows: 10,
|
||||
keywords: ''
|
||||
},
|
||||
listRefreshTrig: false,
|
||||
loadingState: 'loading',
|
||||
hasMore: true,
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
wx.setNavigationBarTitle({
|
||||
title: '退款申请',
|
||||
})
|
||||
wx.setNavigationBarColor({
|
||||
frontColor: '#000000', // 必写项,字体颜色仅支持#ffffff和#000000
|
||||
backgroundColor: '#F0F0F0', // 传递的颜色值,仅支持十六进制颜色
|
||||
animation: { // 可选项
|
||||
duration: 500,
|
||||
timingFunc: 'easeIn'
|
||||
}
|
||||
})
|
||||
this.setData({
|
||||
selectFile: this.selectFile.bind(this),
|
||||
uploadFile: this.uploadFile.bind(this)
|
||||
})
|
||||
//获取可以申请补正的列表
|
||||
this.getCanRepairList(false)
|
||||
},
|
||||
inputKeywords(e) {
|
||||
this.setData({
|
||||
proKeywords: e.detail.value
|
||||
})
|
||||
},
|
||||
clearSearch() {
|
||||
this.setData({
|
||||
proKeywords: ''
|
||||
})
|
||||
this.doRefreshList()
|
||||
},
|
||||
//搜索项目
|
||||
doSearchKeyWord() {
|
||||
this.doRefreshList()
|
||||
},
|
||||
doRefreshList() {
|
||||
const _self = this
|
||||
_self.setData({
|
||||
listRefreshTrig: true,
|
||||
loadingState: 'loading',
|
||||
hasMore: true,
|
||||
isLoadMore: false,
|
||||
'proPageData.page': 1,
|
||||
'proPageData.keywords': _self.data.proKeywords
|
||||
})
|
||||
_self.getCanRepairList(true)
|
||||
},
|
||||
doLoadMore() {
|
||||
//判断是否正在加载中 与是否存在更多数据
|
||||
const _self = this
|
||||
if (_self.data.isLoadMore || !_self.data.hasMore) {
|
||||
return
|
||||
}
|
||||
_self.setData({
|
||||
isLoadMore: true,
|
||||
'proPageData.page': ++_self.data.proPageData.page,
|
||||
'proPageData.keywords': _self.data.proKeywords
|
||||
})
|
||||
_self.getCanRepairList(false)
|
||||
},
|
||||
//获取可以补正的项目列表
|
||||
getCanRepairList(isRefresh) {
|
||||
const _self = this
|
||||
_self.setData({
|
||||
proList: isRefresh ? [] : _self.data.proList,
|
||||
loadingState: isRefresh ? 'loading' : ''
|
||||
})
|
||||
ProApi.doGetCanRefundProList(_self.data.proPageData)
|
||||
.then(res => {
|
||||
console.log(res)
|
||||
var status = 'success'
|
||||
status = res.rows && res.rows.length > 0 ? 'success' : 'empty'
|
||||
_self.setData({
|
||||
loadingState: isRefresh ? status : '',
|
||||
proList: _self.data.proList.concat(res.rows),
|
||||
listRefreshTrig: false,
|
||||
isLoadMore: false
|
||||
})
|
||||
_self.setData({
|
||||
hasMore: _self.data.proList.length < res.total
|
||||
})
|
||||
})
|
||||
.catch(err => {
|
||||
_self.setData({
|
||||
loadingState: 'error',
|
||||
listRefreshTrig: false,
|
||||
isLoadMore: false,
|
||||
hasMore: true
|
||||
})
|
||||
})
|
||||
},
|
||||
//显示补正软著选择
|
||||
showSelProDialog() {
|
||||
const _self = this
|
||||
if (_self.data.proList.length <= 0) {
|
||||
_self.getCanRepairList(true)
|
||||
} else {
|
||||
_self.setData({
|
||||
showSelPro: true,
|
||||
tempSelPro: _self.data.selPro
|
||||
})
|
||||
}
|
||||
},
|
||||
chooseType(e) {
|
||||
this.setData({
|
||||
tempSelType: e.currentTarget.dataset.value
|
||||
})
|
||||
},
|
||||
choosePro(e) {
|
||||
this.setData({
|
||||
tempSelPro: e.currentTarget.dataset.value
|
||||
})
|
||||
},
|
||||
//关闭补正软件选择
|
||||
closeDialog(e) {
|
||||
this.setData({
|
||||
showSelPro: false,
|
||||
showSelType: false
|
||||
})
|
||||
},
|
||||
showSelTypeDialog() {
|
||||
this.setData({
|
||||
showSelType: true,
|
||||
})
|
||||
},
|
||||
confirmSelType() {
|
||||
this.setData({
|
||||
showSelType: false,
|
||||
selType: this.data.tempSelType,
|
||||
tempSelType: null
|
||||
})
|
||||
},
|
||||
//确定选择补正软著
|
||||
confirmSelPro() {
|
||||
this.setData({
|
||||
showSelPro: false,
|
||||
selPro: this.data.tempSelPro,
|
||||
tempSelPro: null
|
||||
})
|
||||
},
|
||||
inputRemark(e) {
|
||||
this.setData({
|
||||
remark: e.detail.value
|
||||
})
|
||||
},
|
||||
deleteImage: function (e) {
|
||||
var index = e.detail.index;
|
||||
this.data.files.splice(index, 1);
|
||||
},
|
||||
previewImage(e) {
|
||||
wx.previewImage({
|
||||
current: e.currentTarget.id,
|
||||
urls: this.data.files
|
||||
})
|
||||
},
|
||||
selectFile(files) {
|
||||
console.log('files', files)
|
||||
},
|
||||
uploadFile(files) {
|
||||
console.log(files)
|
||||
const tempFilePaths = files.tempFilePaths;
|
||||
const token = Cache.get('token')
|
||||
const header = {}
|
||||
if (token) {
|
||||
header.Auth = `Bearer ${token}`;
|
||||
}
|
||||
|
||||
var that = this
|
||||
for (let i = 0; i < tempFilePaths.length; i++) {
|
||||
wx.uploadFile({
|
||||
url: uploadImgUrl,
|
||||
header: header,
|
||||
filePath: tempFilePaths[i],
|
||||
name: 'image',
|
||||
success(res) {
|
||||
console.log(res)
|
||||
let result = JSON.parse(res.data)
|
||||
that.data.files.push(result.data)
|
||||
},
|
||||
fail(err) {
|
||||
console.log(err);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 文件上传的函数,返回一个promise
|
||||
return new Promise((resolve, reject) => {
|
||||
var result = {};
|
||||
result['urls'] = tempFilePaths;
|
||||
resolve(result);
|
||||
})
|
||||
},
|
||||
//提交
|
||||
doApply() {
|
||||
const legal = this.checkParams()
|
||||
if (legal) {
|
||||
const _self = this
|
||||
wx.showLoading({
|
||||
title: '提交中...',
|
||||
})
|
||||
const ids = _self.data.files.map(item => item.fileId).join(',');
|
||||
const data = {
|
||||
projId: _self.data.selPro.projId,
|
||||
refundReason: _self.data.remark,
|
||||
refundVoucher: ids
|
||||
}
|
||||
ProApi.doApplyRefundPro(data)
|
||||
.then(res => {
|
||||
wx.hideLoading()
|
||||
_self.setData({
|
||||
msgHint: '提交成功,请耐心等待审核',
|
||||
msgType: 'success',
|
||||
msgShow: true
|
||||
})
|
||||
setTimeout(() => {
|
||||
_self.backPageRefresh()
|
||||
}, 2000);
|
||||
})
|
||||
.catch(err => {
|
||||
wx.hideLoading()
|
||||
_self.setData({
|
||||
msgHint: err.msg ? err.msg : '提交失败,请稍后重试',
|
||||
msgType: 'error',
|
||||
msgShow: true
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
//校验参数
|
||||
checkParams() {
|
||||
const _self = this
|
||||
if (_self.data.selPro == null) {
|
||||
_self.setData({
|
||||
msgHint: '请选择退款软著',
|
||||
msgType: 'error',
|
||||
msgShow: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
if (_self.data.remark == '') {
|
||||
_self.setData({
|
||||
msgHint: '请输入退款原因',
|
||||
msgType: 'error',
|
||||
msgShow: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
if (_self.data.files.length <= 0) {
|
||||
_self.setData({
|
||||
msgHint: '请上传退款凭证',
|
||||
msgType: 'error',
|
||||
msgShow: true
|
||||
})
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
backPageRefresh() {
|
||||
const _self = this
|
||||
let pages = getCurrentPages();
|
||||
let beforePage = pages[pages.length - 2];
|
||||
beforePage.doRefreshList()
|
||||
wx.navigateBack()
|
||||
}
|
||||
})
|
9
pages/copyright/applyRefund/applyRefund.json
Normal file
9
pages/copyright/applyRefund/applyRefund.json
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
"mp-toptips": "weui-miniprogram/toptips/toptips",
|
||||
"mp-half-screen-dialog": "weui-miniprogram/half-screen-dialog/half-screen-dialog",
|
||||
"mp-uploader": "weui-miniprogram/uploader/uploader",
|
||||
"container-loading": "/components/container-loading/container-loading",
|
||||
"mp-loading": "weui-miniprogram/loading/loading"
|
||||
}
|
||||
}
|
80
pages/copyright/applyRefund/applyRefund.wxml
Normal file
80
pages/copyright/applyRefund/applyRefund.wxml
Normal file
@ -0,0 +1,80 @@
|
||||
<!--pages/copyright/applyRepair/applyRepair.wxml-->
|
||||
<view class="page-container">
|
||||
<swiper indicator-dots style="height: 120rpx;" autoplay indicator-active-color="#fff">
|
||||
<swiper-item>
|
||||
<image src="{{imgAssets}}/banner_1.png" style="width: 100vw;height: 120rpx;"></image>
|
||||
</swiper-item>
|
||||
<swiper-item>
|
||||
<image src="{{imgAssets}}/banner_2.png" style="width: 100vw;height: 120rpx;"></image>
|
||||
</swiper-item>
|
||||
</swiper>
|
||||
<view class="apply-box">
|
||||
<text class="label">申请退款</text>
|
||||
<view class="apply-item-row mt-20 ml-10">
|
||||
<view class="apply-title star" style="align-self: center;">退款软著</view>
|
||||
<view class="apply-content" bind:tap="showSelProDialog">
|
||||
<view class="{{selPro == null? 'text-hint':'text-sel'}}">{{selPro==null? '选择需要退款的软著' :selPro.projName}}</view>
|
||||
<view class="icon-arrow-down-line" style="width: 24rpx;height: 24rpx;margin:0rpx 20rpx;"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="apply-item-column mt-20 ml-10">
|
||||
<view class="apply-title star">退款原因</view>
|
||||
<textarea bindinput="inputRemark" value="{{remark}}" placeholder="请输入退款原因" placeholder-style="font-size:28rpx;color:var(--text-gray-hint-color)" class="reason-content mt-10"></textarea>
|
||||
</view>
|
||||
<view class="apply-item-column mt-20 ml-10">
|
||||
<view class="apply-title star">退款凭证</view>
|
||||
<view>
|
||||
<mp-uploader max-count="4" delete="true" select="{{selectFile}}" upload="{{uploadFile}}" bind:delete="deleteImage" files="{{files}}" title=""></mp-uploader>
|
||||
</view>
|
||||
<view class="hint">
|
||||
*上传完整的补正通知书或者完整的补正通知书的截图,要求右上方的流水号和右下方的补正通知书的日期都得完整显示
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom-fixed-footer">
|
||||
<view class="bottom-btn-green" bind:tap="doApply">提交</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 补正软著列表 -->
|
||||
<mp-half-screen-dialog show="{{showSelPro}}" bindclose="closeDialog">
|
||||
<view slot="title">
|
||||
<view class="search-container">
|
||||
<input class="search-input" value="{{proKeywords}}" bindinput="inputKeywords" bindconfirm="doSearchKeyWord" type="text" confirm-type="search" placeholder="请输入项目名称" />
|
||||
<view wx:if="{{proKeywords !=''}}" bind:tap="clearSearch" class="icon-clear" style="width: 20px;height: 20px;"></view>
|
||||
</view>
|
||||
</view>
|
||||
<view slot="desc">
|
||||
<view style="height: 600rpx;">
|
||||
<container-loading loadingState="{{loadingState}}" style="height: 600rpx;" bindrefresh="doRefreshList">
|
||||
<scroll-view scroll-y="{{true}}" style="height: 600rpx;" bindrefresherrefresh="doRefreshList" refresher-enabled refresher-triggered="{{listRefreshTrig}}" bindscrolltolower="doLoadMore" lower-threshold='50'>
|
||||
<view class="pro-list-box">
|
||||
<radio-group>
|
||||
<block wx:for="{{proList}}" wx:key="index">
|
||||
<view class="pro-list-item" bind:tap="" data-value="{{item}}">
|
||||
<radio class="custom-radio" style="margin-left: 5px;" checked="{{tempSelPro.projId==item.projId}}"></radio>
|
||||
<view class="pro-list-item-left" bind:tap="choosePro" data-value="{{item}}">
|
||||
<view class="pro-list-item-left-title">
|
||||
<view class="pro-list-name">{{item.projName}}</view>
|
||||
</view>
|
||||
<view class="pro-list-item-left-footer">
|
||||
<view class="pro-list-item-left-tag">{{item.applyContactName}}</view>
|
||||
<view class="pro-list-item-left-tag">{{item.projContext}}</view>
|
||||
<view class="pro-list-item-left-tag">{{item.gmtCreate}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</radio-group>
|
||||
<mp-loading show="{{isLoadMore}}" type="circle"></mp-loading>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</container-loading>
|
||||
</view>
|
||||
</view>
|
||||
<view slot="footer">
|
||||
<view class="bottom-btn-green" bind:tap="confirmSelPro">确定</view>
|
||||
</view>
|
||||
</mp-half-screen-dialog>
|
||||
|
||||
<mp-toptips msg="{{msgHint}}" type="{{msgType}}" show="{{msgShow}}" :delay="2000"></mp-toptips>
|
236
pages/copyright/applyRefund/applyRefund.wxss
Normal file
236
pages/copyright/applyRefund/applyRefund.wxss
Normal file
@ -0,0 +1,236 @@
|
||||
/* pages/copyright/applyRepair/applyRepair.wxss */
|
||||
.apply-box {
|
||||
margin-top: 20rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 30rpx;
|
||||
background-color: var(--white-color);
|
||||
border-radius: 5rpx;
|
||||
}
|
||||
|
||||
.label {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.apply-item-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.apply-item-column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.apply-title {
|
||||
font-size: 28rpx;
|
||||
color: var(--text-color);
|
||||
flex: 0.3;
|
||||
}
|
||||
|
||||
.apply-content {
|
||||
font-size: 28rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
flex: 0.7;
|
||||
}
|
||||
|
||||
.reason-content {
|
||||
border-radius: 10rpx;
|
||||
border: 1rpx solid var(--divider-color);
|
||||
height: 120rpx;
|
||||
font-size: 28rpx;
|
||||
padding: 20rpx;
|
||||
}
|
||||
|
||||
.text-hint {
|
||||
color: var(--text-gray-hint-color);
|
||||
}
|
||||
|
||||
.text-sel {
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
.hint {
|
||||
margin-top: 10rpx;
|
||||
font-size: 26rpx;
|
||||
color: var(--red-color);
|
||||
}
|
||||
|
||||
.pro-list-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.pro-list-item {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
background-color: var(--primary-color-light);
|
||||
border-radius: 10rpx;
|
||||
padding: 30rpx;
|
||||
}
|
||||
|
||||
.pro-list-item:nth-of-type(n+2) {
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
.pro-list-item-left {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
margin-left: 30rpx;
|
||||
}
|
||||
|
||||
.pro-list-item-left-title {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.pro-list-item-left-footer {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
.pro-list-item-left-count {
|
||||
font-size: 24rpx;
|
||||
color: var(--text-color);
|
||||
flex-wrap: nowrap;
|
||||
margin-top: 4rpx;
|
||||
}
|
||||
|
||||
.pro-list-item-left-tag {
|
||||
font-size: 24rpx;
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
.pro-list-name {
|
||||
font-size: 26rpx;
|
||||
font-weight: bold;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
|
||||
.search-container {
|
||||
position: relative;
|
||||
align-self: center;
|
||||
border-radius: 5px;
|
||||
background-color: var(--bg-gray-color);
|
||||
padding: 5px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
box-sizing: border-box;
|
||||
color: var(--text-color);
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.search-input::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-top: -1px;
|
||||
background-size: cover;
|
||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSI2NCA2NCA4OTYgODk2IiB3aWR0aD0iMTQiIGhlaWdodD0iMTkiIHN0eWxlPSIiIGZpbHRlcj0ibm9uZSI+CiAgICAKICAgIDxnPgogICAgPHBhdGggZD0iTTkwOS42IDg1NC41TDY0OS45IDU5NC44QzY5MC4yIDU0Mi43IDcxMiA0NzkgNzEyIDQxMmMwLTgwLjItMzEuMy0xNTUuNC04Ny45LTIxMi4xLTU2LjYtNTYuNy0xMzItODcuOS0yMTIuMS04Ny45cy0xNTUuNSAzMS4zLTIxMi4xIDg3LjlDMTQzLjIgMjU2LjUgMTEyIDMzMS44IDExMiA0MTJjMCA4MC4xIDMxLjMgMTU1LjUgODcuOSAyMTIuMUMyNTYuNSA2ODAuOCAzMzEuOCA3MTIgNDEyIDcxMmM2NyAwIDEzMC42LTIxLjggMTgyLjctNjJsMjU5LjcgMjU5LjZhOC4yIDguMiAwIDAgMCAxMS42IDBsNDMuNi00My41YTguMiA4LjIgMCAwIDAgMC0xMS42ek01NzAuNCA1NzAuNEM1MjggNjEyLjcgNDcxLjggNjM2IDQxMiA2MzZzLTExNi0yMy4zLTE1OC40LTY1LjZDMjExLjMgNTI4IDE4OCA0NzEuOCAxODggNDEyczIzLjMtMTE2LjEgNjUuNi0xNTguNEMyOTYgMjExLjMgMzUyLjIgMTg4IDQxMiAxODhzMTE2LjEgMjMuMiAxNTguNCA2NS42UzYzNiAzNTIuMiA2MzYgNDEycy0yMy4zIDExNi4xLTY1LjYgMTU4LjR6IiBmaWxsPSJyZ2JhKDIwNCwyMDQsMjA0LDEpIj48L3BhdGg+CiAgICA8L2c+CiAgPC9zdmc+');
|
||||
}
|
||||
|
||||
|
||||
/* 上传图片 */
|
||||
|
||||
.weui-uploader {
|
||||
margin-top: 10rpx;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.weui-uploader__bd {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.weui-uploader__hd {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.weui-uploader__input-box {
|
||||
width: 65px;
|
||||
height: 65px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.weui-uploader__file {
|
||||
width: 65px;
|
||||
height: 65px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.weui-uploader__img {
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.weui-uploader__overview {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
width: 65vw;
|
||||
}
|
||||
|
||||
.weui-uploader__input-box {
|
||||
background: white;
|
||||
border: 1px solid var(--divider-color);
|
||||
}
|
||||
|
||||
|
||||
/* 未选中状态 */
|
||||
.custom-radio .wx-radio-input {
|
||||
border-color: var(--primary-color);
|
||||
/* 自定义未选中时的边框颜色 */
|
||||
background-color: transparent;
|
||||
width: 32rpx;
|
||||
height: 32rpx;
|
||||
}
|
||||
|
||||
/* 选中状态 */
|
||||
.custom-radio .wx-radio-input.wx-radio-input-checked {
|
||||
border-color: var(--primary-color);
|
||||
/* 自定义选中时的边框颜色 */
|
||||
background: linear-gradient(to right, var(--primary-color), var(--primary-color-light));
|
||||
/* 自定义选中时的背景颜色 */
|
||||
}
|
||||
|
||||
/* 选中状态下的内部圆圈 */
|
||||
.custom-radio .wx-radio-input.wx-radio-input-checked::before {
|
||||
color: #fff;
|
||||
/* 自定义选中时内部圆圈的颜色 */
|
||||
}
|
||||
|
||||
.weui-half-screen-dialog__bd {
|
||||
padding-bottom: 40rpx;
|
||||
}
|
||||
|
||||
.weui-half-screen-dialog__ft {
|
||||
padding: 0rpx 0rpx 20rpx;
|
||||
}
|
||||
|
||||
.weui-half-screen-dialog__hd__side+.weui-half-screen-dialog__hd__main {
|
||||
padding: 0 46rpx;
|
||||
}
|
@ -1,66 +1,306 @@
|
||||
// pages/copyright/refund/refund.js
|
||||
import ProApi from '../../../net/api/projectApi'
|
||||
import {
|
||||
previewUrl
|
||||
} from '../../../net/http'
|
||||
const app = getApp()
|
||||
const jsonData = require('../../../utils/data')
|
||||
const Cache = require('../../../utils/storage')
|
||||
Page({
|
||||
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
|
||||
pageData: {
|
||||
page: 1,
|
||||
rows: 10,
|
||||
applyStatus: '', //状态
|
||||
projName: '' //项目名称
|
||||
},
|
||||
keywords: '',
|
||||
stateList: jsonData.stateList,
|
||||
selectState: '',
|
||||
msgHint: '',
|
||||
msgType: 'error',
|
||||
msgShow: false,
|
||||
loadingState: 'loading',
|
||||
listRefreshTrig: false,
|
||||
isLoadMore: false,
|
||||
hasMore: true,
|
||||
refundList: [],
|
||||
slideBtns: app.globalData.cancelEditBtns,
|
||||
showHint: false,
|
||||
buttons: [{
|
||||
text: '关闭'
|
||||
}],
|
||||
tempItem: null,
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(options) {
|
||||
|
||||
wx.setNavigationBarTitle({
|
||||
title: '退款项目',
|
||||
})
|
||||
wx.setNavigationBarColor({
|
||||
frontColor: '#000000', // 必写项,字体颜色仅支持#ffffff和#000000
|
||||
backgroundColor: '#F0F0F0', // 传递的颜色值,仅支持十六进制颜色
|
||||
animation: { // 可选项
|
||||
duration: 500,
|
||||
timingFunc: 'easeIn'
|
||||
}
|
||||
})
|
||||
this.getRefundList(true)
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {
|
||||
|
||||
//去退款
|
||||
applyRefund() {
|
||||
wx.navigateTo({
|
||||
url: '/pages/copyright/applyRefund/applyRefund',
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {
|
||||
|
||||
inputKeywords(e) {
|
||||
this.setData({
|
||||
keywords: e.detail.value
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {
|
||||
|
||||
clearSearch() {
|
||||
this.setData({
|
||||
keywords: ''
|
||||
})
|
||||
this.doRefreshList()
|
||||
},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {
|
||||
|
||||
doSearchKeyWord() {
|
||||
this.doRefreshList()
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {
|
||||
|
||||
chooseState(e) {
|
||||
const value = e.currentTarget.dataset.value
|
||||
this.setData({
|
||||
selectState: value == this.data.selectState ? '' : value
|
||||
})
|
||||
this.doRefreshList()
|
||||
},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {
|
||||
|
||||
doRefreshList() {
|
||||
console.log('正在刷新...')
|
||||
const _self = this
|
||||
_self.setData({
|
||||
listRefreshTrig: true,
|
||||
loadingState: 'loading',
|
||||
hasMore: true,
|
||||
'pageData.page': 1,
|
||||
'pageData.projName': _self.data.keywords,
|
||||
'pageData.applyStatus': _self.data.selectState,
|
||||
isLoadMore: false
|
||||
})
|
||||
_self.getRefundList(true)
|
||||
},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {
|
||||
|
||||
doLoadMore() {
|
||||
//判断是否正在加载中 与是否存在更多数据
|
||||
const _self = this
|
||||
if (_self.data.isLoadMore || !_self.data.hasMore) {
|
||||
return
|
||||
}
|
||||
_self.setData({
|
||||
isLoadMore: true,
|
||||
'pageData.page': ++_self.data.pageData.page,
|
||||
'pageData.projName': _self.data.keywords,
|
||||
'pageData.applyStatus': _self.data.selectState,
|
||||
})
|
||||
_self.getRefundList(false)
|
||||
},
|
||||
getRefundList(isRefresh) {
|
||||
const _self = this
|
||||
_self.setData({
|
||||
refundList: isRefresh ? [] : _self.data.refundList,
|
||||
loadingState: isRefresh ? 'loading' : ''
|
||||
})
|
||||
ProApi.doGetMineRefundProList(_self.data.pageData)
|
||||
.then(res => {
|
||||
console.log(res)
|
||||
var status = 'success'
|
||||
status = res.rows && res.rows.length > 0 ? 'success' : 'empty'
|
||||
_self.setData({
|
||||
loadingState: isRefresh ? status : '',
|
||||
refundList: _self.data.refundList.concat(res.rows),
|
||||
listRefreshTrig: false,
|
||||
isLoadMore: false
|
||||
})
|
||||
_self.setData({
|
||||
hasMore: _self.data.refundList.length < res.total
|
||||
})
|
||||
}, err => {
|
||||
_self.setData({
|
||||
loadingState: 'error',
|
||||
listRefreshTrig: false,
|
||||
isLoadMore: false,
|
||||
hasMore: true
|
||||
})
|
||||
})
|
||||
},
|
||||
show(e) {
|
||||
console.log('显示', e)
|
||||
//判断状态
|
||||
const _self = this
|
||||
const value = e.currentTarget.dataset.value
|
||||
const id = e.currentTarget.id
|
||||
if (value.applyStatus != 'PENDING') {
|
||||
//通过 或 取消 后不能撤销
|
||||
const item = _self.selectComponent(`#${id}`)
|
||||
if (item) {
|
||||
item.setData({
|
||||
show: false
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
slideButtonTap(e) {
|
||||
const index = e.detail.index
|
||||
const item = e.currentTarget.dataset.value
|
||||
console.log(e)
|
||||
if (index == 0) {
|
||||
//取消
|
||||
this.showCancel(item)
|
||||
}
|
||||
},
|
||||
showCancel(item) {
|
||||
const _self = this
|
||||
wx.showModal({
|
||||
title: '警告',
|
||||
content: '您确定要撤销申请吗?',
|
||||
complete: (res) => {
|
||||
if (res.confirm) {
|
||||
_self.doCancel(item)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
doCancel(item) {
|
||||
const _self = this
|
||||
wx.showLoading({
|
||||
title: '取消中...',
|
||||
})
|
||||
ProApi.doCancelRefundPro(item.projRefundApplyId)
|
||||
.then(res => {
|
||||
wx.hideLoading()
|
||||
_self.setData({
|
||||
msgType: 'success',
|
||||
msgHint: '撤销成功',
|
||||
msgShow: true
|
||||
})
|
||||
_self.doRefreshList()
|
||||
})
|
||||
.catch(err => {
|
||||
wx.hideLoading()
|
||||
_self.setData({
|
||||
msgType: 'error',
|
||||
msgHint: err.msg ? err.msg : '撤销失败,请稍后重试',
|
||||
msgShow: true
|
||||
})
|
||||
})
|
||||
},
|
||||
showReason(e) {
|
||||
const item = e.currentTarget.dataset.value
|
||||
item.refundVoucherFileKVs.map(value => {
|
||||
value.url = previewUrl + value.key
|
||||
return value
|
||||
})
|
||||
const _self = this
|
||||
_self.setData({
|
||||
tempItem: item,
|
||||
showHint: true
|
||||
})
|
||||
},
|
||||
closeHint(e) {
|
||||
this.setData({
|
||||
showHint: false,
|
||||
tempItem: null
|
||||
})
|
||||
},
|
||||
previewImg(e) {
|
||||
const _self = this
|
||||
const current = e.currentTarget.dataset.value
|
||||
//判断是pdf还是图片
|
||||
if (current.value.toLowerCase().endsWith('.pdf')) {
|
||||
//文件,下载文件
|
||||
_self.doDownloadApprovePdf(current)
|
||||
} else {
|
||||
//图片
|
||||
const urls = [current.url]
|
||||
wx.previewImage({
|
||||
urls: urls,
|
||||
})
|
||||
}
|
||||
},
|
||||
doDownloadApprovePdf(item) {
|
||||
const _self = this
|
||||
_self.setData({
|
||||
showHint: false
|
||||
})
|
||||
wx.showLoading({
|
||||
title: '加载中...',
|
||||
})
|
||||
const token = Cache.get('token')
|
||||
const header = {}
|
||||
if (token) {
|
||||
header.Auth = `Bearer ${token}`;
|
||||
}
|
||||
wx.downloadFile({
|
||||
url: item.url,
|
||||
header: header,
|
||||
success: res => {
|
||||
wx.hideLoading()
|
||||
if (res.statusCode === 200) {
|
||||
// 从响应头中获取文件名
|
||||
let fileName = item.value;
|
||||
if (fileName) {
|
||||
// 保存文件时使用获取到的文件名
|
||||
wx.getFileSystemManager().saveFile({
|
||||
tempFilePath: res.tempFilePath,
|
||||
filePath: wx.env.USER_DATA_PATH + '/' + fileName,
|
||||
success: function (res) {
|
||||
const savedFilePath = res.savedFilePath;
|
||||
console.log('文件下载并保存成功', savedFilePath);
|
||||
if (savedFilePath.endsWith(".txt")) {
|
||||
wx.navigateTo({
|
||||
url: '/pages/readTxt/readTxt?filePath=' + savedFilePath,
|
||||
})
|
||||
} else {
|
||||
wx.openDocument({
|
||||
filePath: savedFilePath,
|
||||
showMenu: true
|
||||
})
|
||||
}
|
||||
},
|
||||
fail: function (err) {
|
||||
console.error('文件保存失败', err);
|
||||
_self.showErr('很抱歉,文件下载出现问题。建议您稍作等待,之后再尝试下载。')
|
||||
}
|
||||
})
|
||||
} else {
|
||||
console.error('未从响应头中获取到文件名');
|
||||
_self.showErr('很抱歉,文件下载出现问题。建议您稍作等待,之后再尝试下载。')
|
||||
}
|
||||
} else {
|
||||
_self.showErr('很抱歉,文件下载出现问题。建议您稍作等待,之后再尝试下载。')
|
||||
}
|
||||
},
|
||||
fail: err => {
|
||||
_self.showErr('很抱歉,文件下载出现问题。建议您稍作等待,之后再尝试下载。')
|
||||
console.log(`下载失败${err}`)
|
||||
}
|
||||
})
|
||||
},
|
||||
//显示错误信息
|
||||
showErr(msg) {
|
||||
const _self = this
|
||||
_self.setData({
|
||||
msgHint: msg,
|
||||
msgType: 'error',
|
||||
msgShow: true,
|
||||
showDownloadDialog: false,
|
||||
downloading: false,
|
||||
downloadProgress: 0
|
||||
})
|
||||
}
|
||||
})
|
@ -1,3 +1,9 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {
|
||||
"mp-loading": "weui-miniprogram/loading/loading",
|
||||
"container-loading": "/components/container-loading/container-loading",
|
||||
"mp-toptips": "weui-miniprogram/toptips/toptips",
|
||||
"mp-dialog": "weui-miniprogram/dialog/dialog",
|
||||
"mp-slideview": "weui-miniprogram/slideview/slideview"
|
||||
}
|
||||
}
|
@ -1,2 +1,73 @@
|
||||
<!--pages/copyright/refund/refund.wxml-->
|
||||
<text>pages/copyright/refund/refund.wxml</text>
|
||||
<view class="page-container">
|
||||
<view class="search-box">
|
||||
<view class="search-input-box">
|
||||
<view class="search-container">
|
||||
<input class="search-input" value="{{keywords}}" bindinput="inputKeywords" bindconfirm="doSearchKeyWord" type="text" confirm-type="search" placeholder="请输入项目名称" />
|
||||
<view wx:if="{{keywords !=''}}" bind:tap="clearSearch" class="icon-clear" style="width: 20px;height: 20px;"></view>
|
||||
</view>
|
||||
<view class="add-btn" bind:tap="applyRefund">申请退款</view>
|
||||
</view>
|
||||
<!-- 条件 -->
|
||||
<view class="options-list-box">
|
||||
<block wx:for="{{stateList}}" wx:key="index">
|
||||
<view class="{{selectState==item.value ? 'options-tab-select':'options-tab-normal'}}" data-value="{{item.value}}" bind:tap="chooseState">{{item.title}}</view>
|
||||
</block>
|
||||
</view>
|
||||
</view>
|
||||
<view class="content-container">
|
||||
<container-loading loadingState="{{loadingState}}" style="height: 82vh;" bindrefresh="doRefreshList">
|
||||
<scroll-view scroll-y="{{true}}" style="height: 82vh;padding-bottom: 40px;" bindrefresherrefresh="doRefreshList" refresher-enabled refresher-triggered="{{listRefreshTrig}}" bindscrolltolower="doLoadMore" lower-threshold='30'>
|
||||
<view class="repair-list-box">
|
||||
<block wx:for="{{refundList}}" wx:key="index">
|
||||
<mp-slideview id="mp-slide-{{index}}" buttons="{{slideBtns}}" icon="{{true}}" data-value="{{item}}" bindshow="show" bindbuttontap="slideButtonTap" class="{{index > 0 ? 'mt-20':''}}">
|
||||
<view class="repair-list-item">
|
||||
<view class="repair-item-title-box" data-value="{{item}}" bind:tap="showReason">
|
||||
<view class="repair-title-box">
|
||||
<view class="{{tools.repairStatusColor(item.applyStatus)}} repair-status-content">{{tools.repairStatus(item.applyStatus)}}</view>
|
||||
</view>
|
||||
<view class="repair-title-apply-time">{{item.gmtCreate}}</view>
|
||||
</view>
|
||||
<view class="divider-v mt-20"></view>
|
||||
<view class="repair-name-box mt-10" data-value="{{item}}" bind:tap="showReason">
|
||||
<view class="repair-title-content">{{item.projName}}</view>
|
||||
</view>
|
||||
<view data-value="{{item}}" bind:tap="showReason" class="repair-reason-desc multiple-2-ellipsis">{{item.refundReason}}</view>
|
||||
<view class="repair-footer-box">
|
||||
<view class="repair-attr-box" data-value="{{item}}" bind:tap="showReason">
|
||||
<view class="repair-attr-item">{{item.userInfoName}}</view>
|
||||
<rich-text style="color:var(--red-color);font-weight: bold;" nodes="{{tools.moneyTxt(10,item.projPayment/100)}}"></rich-text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</mp-slideview>
|
||||
</block>
|
||||
<mp-loading show="{{isLoadMore}}" type="circle"></mp-loading>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</container-loading>
|
||||
</view>
|
||||
</view>
|
||||
<mp-dialog show="{{showHint}}" buttons="{{buttons}}" bindbuttontap="closeHint">
|
||||
<view class="approve-box">
|
||||
<view class="approve-title">退款原因</view>
|
||||
<view class="approve-content mt-10">{{tempItem.refundReason}}</view>
|
||||
<view class="approve-title mt-10">退款凭证</view>
|
||||
<view class="approve-img-box mt-10">
|
||||
<block wx:for="{{tempItem.refundVoucherFileKVs}}" wx:key="index">
|
||||
<view class="approve-img-item single-line" bind:tap="previewImg" data-value="{{item}}">
|
||||
{{item.value}}
|
||||
</view>
|
||||
</block>
|
||||
</view>
|
||||
<view wx:if="{{tempItem.gmtReview !=''}}" class="approve-content-box">
|
||||
<view class="approve-title mt-10">审核时间</view>
|
||||
<view class="approve-content mt-10">{{tempItem.gmtReview}}</view>
|
||||
<view class="approve-title mt-10">审核意见</view>
|
||||
<view class="approve-content mt-10">{{tempItem.reviewReason}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</mp-dialog>
|
||||
<!-- 下载dialog -->
|
||||
|
||||
<mp-toptips msg="{{msgHint}}" type="{{msgType}}" show="{{msgShow}}" :delay="2000"></mp-toptips>
|
||||
<wxs src="../../../utils/comm.wxs" module="tools"></wxs>
|
@ -1 +1,640 @@
|
||||
/* pages/copyright/refund/refund.wxss */
|
||||
.ic-user {
|
||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQzOTg4MzkwNjkwIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM0MDkiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiAxMDI0QzIyOS4yMDUzMzMgMTAyNCAwIDc5NC43OTQ2NjcgMCA1MTJTMjI5LjIwNTMzMyAwIDUxMiAwczUxMiAyMjkuMjA1MzMzIDUxMiA1MTItMjI5LjIwNTMzMyA1MTItNTEyIDUxMnogbTAtNDk2LjQ2OTMzM2ExNzAuNjY2NjY3IDE3MC42NjY2NjcgMCAxIDAgMC0zNDEuMzMzMzM0IDE3MC42NjY2NjcgMTcwLjY2NjY2NyAwIDAgMCAwIDM0MS4zMzMzMzR6IG0yNjMuNzY1MzMzIDI2My43MjI2NjZhMjYzLjc2NTMzMyAyNjMuNzY1MzMzIDAgMSAwLTUyNy41MzA2NjYgMGg1MjcuNTMwNjY2eiIgcC1pZD0iMzQxMCIgZmlsbD0iIzEyOTZkYiI+PC9wYXRoPjwvc3ZnPg==');
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
|
||||
.search-box {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
padding: 20rpx 30rpx 0rpx 30rpx;
|
||||
}
|
||||
|
||||
.search-input-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.search-container {
|
||||
position: relative;
|
||||
align-self: center;
|
||||
border-radius: 5px;
|
||||
background-color: var(--white-color);
|
||||
padding: 5px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.search-input {
|
||||
box-sizing: border-box;
|
||||
color: var(--text-color);
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.search-input::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-top: -1px;
|
||||
background-size: cover;
|
||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSI2NCA2NCA4OTYgODk2IiB3aWR0aD0iMTQiIGhlaWdodD0iMTkiIHN0eWxlPSIiIGZpbHRlcj0ibm9uZSI+CiAgICAKICAgIDxnPgogICAgPHBhdGggZD0iTTkwOS42IDg1NC41TDY0OS45IDU5NC44QzY5MC4yIDU0Mi43IDcxMiA0NzkgNzEyIDQxMmMwLTgwLjItMzEuMy0xNTUuNC04Ny45LTIxMi4xLTU2LjYtNTYuNy0xMzItODcuOS0yMTIuMS04Ny45cy0xNTUuNSAzMS4zLTIxMi4xIDg3LjlDMTQzLjIgMjU2LjUgMTEyIDMzMS44IDExMiA0MTJjMCA4MC4xIDMxLjMgMTU1LjUgODcuOSAyMTIuMUMyNTYuNSA2ODAuOCAzMzEuOCA3MTIgNDEyIDcxMmM2NyAwIDEzMC42LTIxLjggMTgyLjctNjJsMjU5LjcgMjU5LjZhOC4yIDguMiAwIDAgMCAxMS42IDBsNDMuNi00My41YTguMiA4LjIgMCAwIDAgMC0xMS42ek01NzAuNCA1NzAuNEM1MjggNjEyLjcgNDcxLjggNjM2IDQxMiA2MzZzLTExNi0yMy4zLTE1OC40LTY1LjZDMjExLjMgNTI4IDE4OCA0NzEuOCAxODggNDEyczIzLjMtMTE2LjEgNjUuNi0xNTguNEMyOTYgMjExLjMgMzUyLjIgMTg4IDQxMiAxODhzMTE2LjEgMjMuMiAxNTguNCA2NS42UzYzNiAzNTIuMiA2MzYgNDEycy0yMy4zIDExNi4xLTY1LjYgMTU4LjR6IiBmaWxsPSJyZ2JhKDIwNCwyMDQsMjA0LDEpIj48L3BhdGg+CiAgICA8L2c+CiAgPC9zdmc+');
|
||||
}
|
||||
|
||||
.options-list-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
padding-top: 30rpx;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.options-tab-select {
|
||||
white-space: nowrap;
|
||||
line-height: 17px;
|
||||
border-radius: 2px;
|
||||
border: 1rpx solid var(--primary-color-light);
|
||||
background-color: var(--primary-color-light);
|
||||
color: var(--text-brown-color);
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
padding: 2px 8px;
|
||||
}
|
||||
|
||||
|
||||
.options-tab-normal {
|
||||
line-height: 17px;
|
||||
border-radius: 2px;
|
||||
border: 1rpx solid transparent;
|
||||
color: rgba(154, 154, 154, 1);
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
padding: 2px 8px;
|
||||
}
|
||||
|
||||
|
||||
.add-btn {
|
||||
border-radius: 8rpx;
|
||||
background-color: var(--btn-green-color);
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
height: 50rpx;
|
||||
margin-left: 20rpx;
|
||||
line-height: 50rpx;
|
||||
font-family: PingFangSC-regular;
|
||||
padding: 5rpx 10rpx;
|
||||
}
|
||||
|
||||
.add-btn:active {
|
||||
background-color: var(--btn-green-color-active);
|
||||
}
|
||||
|
||||
.content-container {
|
||||
height: 82vh;
|
||||
margin-top: 80px;
|
||||
}
|
||||
|
||||
.bottom-btn {
|
||||
position: fixed;
|
||||
bottom: 40rpx;
|
||||
left: 0;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.repair-list-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.repair-list-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: var(--white-color);
|
||||
padding: 20rpx;
|
||||
border-radius: 8rpx;
|
||||
}
|
||||
|
||||
.repair-list-item:nth-of-type(n+2) {
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
.repair-item-title-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.repair-title-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.repair-name-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.repair-title-content {
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.repair-reason-desc {
|
||||
margin-top: 10rpx;
|
||||
font-size: 24rpx;
|
||||
color: var(--text-gray-desc-color);
|
||||
}
|
||||
|
||||
.repair-footer-box {
|
||||
margin-top: 20rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: flex-end;
|
||||
}
|
||||
|
||||
.repair-attr-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.repair-attr-item {
|
||||
font-size: 24rpx;
|
||||
color: var(--text-brown-color);
|
||||
background-color: var(--divider-color);
|
||||
padding: 5rpx 15rpx;
|
||||
border-radius: 5rpx;
|
||||
line-height: 40rpx;
|
||||
height: 40rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.repair-attr-item:nth-of-type(n+2) {
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
|
||||
.repair-title-apply-time {
|
||||
font-size: 22rpx;
|
||||
color: var(--text-gray-hint-color);
|
||||
}
|
||||
|
||||
.repair-status-green {
|
||||
background-color: var(--bg-green-color);
|
||||
}
|
||||
|
||||
.repair-status-red {
|
||||
background-color: var(--bg-red-color);
|
||||
}
|
||||
|
||||
.repair-status-yellow {
|
||||
background-color: var(--primary-color);
|
||||
|
||||
}
|
||||
|
||||
.repair-status-content {
|
||||
padding: 2rpx 10rpx;
|
||||
font-size: 22rpx;
|
||||
border-radius: 5rpx;
|
||||
height: 30rpx;
|
||||
line-height: 30rpx;
|
||||
text-align: center;
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
.repair-status-gray {
|
||||
background-color: var(--bg-gray-deep-color);
|
||||
}
|
||||
|
||||
|
||||
.order-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: white;
|
||||
border-radius: 10rpx;
|
||||
padding: 10rpx 20rpx;
|
||||
}
|
||||
|
||||
.record-title-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.record-options {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.options-btn {
|
||||
font-size: 24rpx;
|
||||
line-height: 24rpx;
|
||||
height: 24rpx;
|
||||
padding: 10rpx 20rpx;
|
||||
border-radius: 5rpx;
|
||||
background-color: var(--btn-green-color);
|
||||
color: var(--white-color);
|
||||
}
|
||||
|
||||
.options-btn:active {
|
||||
background-color: var(--btn-green-color-active);
|
||||
}
|
||||
|
||||
|
||||
.red:active {
|
||||
background-color: var(--red-color);
|
||||
}
|
||||
|
||||
.record-title-status {
|
||||
font-size: 20rpx;
|
||||
line-height: 24rpx;
|
||||
height: 24rpx;
|
||||
margin-top: 8rpx;
|
||||
text-align: center;
|
||||
padding: 5rpx;
|
||||
min-width: 80rpx;
|
||||
border-radius: 5rpx;
|
||||
margin-right: 15rpx;
|
||||
}
|
||||
|
||||
.approve-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.approve-title {
|
||||
font-size: 28rpx;
|
||||
color: var(--text-color);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.approve-content-box {
|
||||
margin-top: 10rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.approve-img-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-top: 15rpx;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.approve-img-item {
|
||||
font-size: 24rpx;
|
||||
border-radius: 5rpx;
|
||||
padding: 10rpx;
|
||||
text-align: left;
|
||||
background-color: var(--gray-bg-color);
|
||||
width: 100%;
|
||||
margin: 10rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.approve-img-item:nth-of-type(n+2) {
|
||||
margin-top: 10rpx;
|
||||
}
|
||||
|
||||
.approve-content {
|
||||
font-size: 24rpx;
|
||||
margin-left: 20rpx;
|
||||
text-align: left;
|
||||
color: var(--text-gray-desc-color);
|
||||
}
|
||||
|
||||
.approve-hint {
|
||||
margin-top: 20rpx;
|
||||
font-size: 24rpx;
|
||||
color: var(--text-gray-hint-color);
|
||||
}
|
||||
|
||||
.col-yellow {
|
||||
background-color: var(--primary-color);
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
.col-gray {
|
||||
background-color: var(--bg-gray-deep-color);
|
||||
color: var(--text-gray-desc-color);
|
||||
}
|
||||
|
||||
.col-green {
|
||||
background-color: var(--bg-green-color);
|
||||
color: #006400;
|
||||
}
|
||||
|
||||
.col-red {
|
||||
background-color: var(--bg-red-color);
|
||||
color: #8b0000;
|
||||
}
|
||||
|
||||
.record-title-name {
|
||||
font-size: 32rpx;
|
||||
color: var(--text-color);
|
||||
font-weight: bold;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.record-number {
|
||||
font-size: 24rpx;
|
||||
color: var(--text-gray-desc-color);
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
|
||||
.record-time {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.record-bottom-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.icon-time::before {
|
||||
content: '';
|
||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB0PSIxNzQ1ODEyODg5NzI5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM2MTgwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxwYXRoIGQ9Ik01MTMgMzMuMjJjLTI2NS4xIDAtNDgwIDIxNC45LTQ4MCA0ODBzMjE0LjkgNDgwIDQ4MCA0ODAgNDgwLTIxNC45IDQ4MC00ODAtMjE0LjktNDgwLTQ4MC00ODB6IG0yMDguOSA2NTIuNTljLTExLjA1IDE5LjEzLTM1LjUxIDI1LjY5LTU0LjY0IDE0LjY0TDQ3NC4xIDU4OC45M2MtMTMuMDYtNy41NC0yMC4yNi0yMS4zNC0xOS45OS0zNS40MiAwLTAuMTctMC4wMS0wLjM0LTAuMDEtMC41MVYzMjkuOTVjMC0yMi4wOSAxNy45MS00MCA0MC00MHM0MCAxNy45MSA0MCA0MHYyMDEuMjNsMTczLjE3IDk5Ljk4YzE5LjEyIDExLjA1IDI1LjY4IDM1LjUxIDE0LjYzIDU0LjY1eiIgZmlsbD0iI2RiZGJkYiIgcC1pZD0iMzYxODEiPjwvcGF0aD48L3N2Zz4=');
|
||||
background-size: cover;
|
||||
width: 28rpx;
|
||||
height: 28rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
|
||||
.order-item:nth-of-type(n+2) {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.contact-desc {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
padding: 15px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.contact-icon {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.name {
|
||||
line-height: 23rpx;
|
||||
color: var(--text-color);
|
||||
font-size: 32rpx;
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
font-family: SourceHanSansSC-black;
|
||||
}
|
||||
|
||||
.service-desc {
|
||||
padding: 0px 15px 15px 15px;
|
||||
line-height: 20px;
|
||||
color: var(--text-color);
|
||||
font-size: 14px;
|
||||
text-align: left;
|
||||
font-family: SourceHanSansSC-regular;
|
||||
}
|
||||
|
||||
.edit {
|
||||
line-height: 20px;
|
||||
border-radius: 4px;
|
||||
background-color: var(--btn-green-color);
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
font-family: PingFangSC-regular;
|
||||
padding: 5rpx 10rpx;
|
||||
}
|
||||
|
||||
.del {
|
||||
line-height: 20px;
|
||||
border-radius: 4px;
|
||||
background-color: var(--btn-red-color);
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-size: 28rpx;
|
||||
text-align: center;
|
||||
font-family: PingFangSC-regular;
|
||||
padding: 5rpx 10rpx;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.del:active {
|
||||
background-color: var(--btn-red-color-active);
|
||||
}
|
||||
|
||||
.options-box {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.edit:active {
|
||||
background-color: var(--btn-green-color-active);
|
||||
}
|
||||
|
||||
|
||||
.form-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
font-size: 14px;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.form-item {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
width: 80vw;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.form-item-title {
|
||||
flex: .3;
|
||||
font-size: 14px;
|
||||
color: var(--text-color);
|
||||
font-weight: 500;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.form-item-title:not(.no-after)::before {
|
||||
content: "*";
|
||||
color: var(--red-color);
|
||||
font-size: 14px;
|
||||
margin-left: 1px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.form-item-content {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.confirm-btn {
|
||||
background-color: var(--btn-green-color);
|
||||
color: white;
|
||||
font-size: 16px;
|
||||
height: 70rpx;
|
||||
line-height: 70rpx;
|
||||
border-radius: 5px;
|
||||
text-align: center;
|
||||
width: 85vw !important;
|
||||
}
|
||||
|
||||
.confirm-btn:active {
|
||||
background-color: var(--btn-green-color-active);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.weui-half-screen-dialog__ft {
|
||||
padding: 0rpx 0rpx 40rpx;
|
||||
}
|
||||
|
||||
.weui-half-screen-dialog__bd {
|
||||
padding-bottom: 40rpx;
|
||||
}
|
||||
|
||||
.weui-dialog__hd {
|
||||
padding: 30rpx;
|
||||
}
|
||||
|
||||
|
||||
.download-item {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
background-color: var(--white-color);
|
||||
border-radius: 5px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.download-item:nth-of-type(n+2) {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.download-item:last-child {
|
||||
margin-bottom: 80px;
|
||||
}
|
||||
|
||||
.download-title {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
width: 75px;
|
||||
}
|
||||
|
||||
.download-title-txt {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.download-btn-box {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
height: 70px;
|
||||
flex: .6;
|
||||
}
|
||||
|
||||
.download-btn {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
color: var(--text-color);
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
border: 1px solid var(--divider-color);
|
||||
width: 105px;
|
||||
}
|
||||
|
||||
.download-btn-txt {
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.download-btn:active {
|
||||
background-color: var(--divider-color);
|
||||
}
|
||||
|
||||
.icon-table {
|
||||
content: "";
|
||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMzIgMzIiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCIgc3R5bGU9IiIgZmlsdGVyPSJub25lIj4KICAgIAogICAgPGc+CiAgICA8cGF0aCBkPSJNMTYgMjFoLTR2Mmg0di0yek0xNyAyMWg0djJoLTR2LTJ6TTE2IDI2aC00di0yaDR2MnpNMTcgMjZoNHYtMmgtNHYyek0xNiAxOGgtNHYyaDR2LTJ6TTE3IDE4aDR2MmgtNHYtMnpNMTYgMTVoLTR2Mmg0di0yek0xNyAxNWg0djJoLTR2LTJ6TTE5IDN2Ni4wMDJjMCAxLjExMSAwLjg5OCAxLjk5OCAyLjAwNiAxLjk5OGg0Ljk5NHYxNy4wMDNjMCAxLjEwNy0wLjg5NCAxLjk5Ny0xLjk5NyAxLjk5N2gtMTUuMDA1Yy0xLjEwNyAwLTEuOTk3LTAuODk5LTEuOTk3LTIuMDA3di0yMi45ODVjMC0xLjEwOSAwLjg5OS0yLjAwNyAyLjAwOS0yLjAwN2g5Ljk5MXpNMjAgM3Y1Ljk5N2MwIDAuNTU0IDAuNDUxIDEuMDAzIDAuOTkxIDEuMDAzaDUuMDA5bC02LTd6TTExIDEzdjE0aDExdi0xNGgtMTF6IiBmaWxsPSJyZ2JhKDI1NSwxNjksMCwxKSI+PC9wYXRoPgogICAgPC9nPgogIDwvc3ZnPg==');
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
|
||||
.icon-tool {
|
||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSI2NCA2NCA4OTYgODk2IiB3aWR0aD0iNTIiIGhlaWdodD0iNTIiIHN0eWxlPSIiIGZpbHRlcj0ibm9uZSI+CiAgICAKICAgIDxnPgogICAgPHBhdGggZD0iTTg4MCAxMTJIMTQ0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY3MzZjMCAxNy43IDE0LjMgMzIgMzIgMzJoNzM2YzE3LjcgMCAzMi0xNC4zIDMyLTMyVjE0NGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNTEzLjEgNTE4LjFsLTE5MiAxNjFjLTUuMiA0LjQtMTMuMS43LTEzLjEtNi4xdi02Mi43YzAtMi4zIDEuMS00LjYgMi45LTYuMUw0MjAuNyA1MTJsLTEwOS44LTkyLjJhNy42MyA3LjYzIDAgMCAxLTIuOS02LjFWMzUxYzAtNi44IDcuOS0xMC41IDEzLjEtNi4xbDE5MiAxNjAuOWMzLjkgMy4yIDMuOSA5LjEgMCAxMi4zek03MTYgNjczYzAgNC40LTMuNCA4LTcuNSA4aC0xODVjLTQuMSAwLTcuNS0zLjYtNy41LTh2LTQ4YzAtNC40IDMuNC04IDcuNS04aDE4NWM0LjEgMCA3LjUgMy42IDcuNSA4djQ4eiIgZmlsbD0icmdiYSg1MiwxMjQsMTc1LDEpIj48L3BhdGg+CiAgICA8L2c+CiAgPC9zdmc+');
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
}
|
||||
|
||||
|
||||
.icon-source {
|
||||
background-image: url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSI2NCA2NCA4OTYgODk2IiB3aWR0aD0iNTIiIGhlaWdodD0iNTIiIHN0eWxlPSIiIGZpbHRlcj0ibm9uZSI+CiAgICAKICAgIDxnPgogICAgPHBhdGggZD0iTTkyOCAxNjFINjk5LjJjLTQ5LjEgMC05Ny4xIDE0LjEtMTM4LjQgNDAuN0w1MTIgMjMzbC00OC44LTMxLjNBMjU1LjIgMjU1LjIgMCAwIDAgMzI0LjggMTYxSDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnY1NjhjMCAxNy43IDE0LjMgMzIgMzIgMzJoMjI4LjhjNDkuMSAwIDk3LjEgMTQuMSAxMzguNCA0MC43bDQ0LjQgMjguNmMxLjMuOCAyLjggMS4zIDQuMyAxLjNzMy0uNCA0LjMtMS4zbDQ0LjQtMjguNkM2MDIgODA3LjEgNjUwLjEgNzkzIDY5OS4yIDc5M0g5MjhjMTcuNyAwIDMyLTE0LjMgMzItMzJWMTkzYzAtMTcuNy0xNC4zLTMyLTMyLTMyek00MDQgNTUzLjVjMCA0LjEtMy4yIDcuNS03LjEgNy41SDIxMS4xYy0zLjkgMC03LjEtMy40LTcuMS03LjV2LTQ1YzAtNC4xIDMuMi03LjUgNy4xLTcuNWgxODUuN2MzLjkgMCA3LjEgMy40IDcuMSA3LjV2NDV6bTAtMTQwYzAgNC4xLTMuMiA3LjUtNy4xIDcuNUgyMTEuMWMtMy45IDAtNy4xLTMuNC03LjEtNy41di00NWMwLTQuMSAzLjItNy41IDcuMS03LjVoMTg1LjdjMy45IDAgNy4xIDMuNCA3LjEgNy41djQ1em00MTYgMTQwYzAgNC4xLTMuMiA3LjUtNy4xIDcuNUg2MjcuMWMtMy45IDAtNy4xLTMuNC03LjEtNy41di00NWMwLTQuMSAzLjItNy41IDcuMS03LjVoMTg1LjdjMy45IDAgNy4xIDMuNCA3LjEgNy41djQ1em0wLTE0MGMwIDQuMS0zLjIgNy41LTcuMSA3LjVINjI3LjFjLTMuOSAwLTcuMS0zLjQtNy4xLTcuNXYtNDVjMC00LjEgMy4yLTcuNSA3LjEtNy41aDE4NS43YzMuOSAwIDcuMSAzLjQgNy4xIDcuNXY0NXoiIGZpbGw9InJnYmEoMTI5LDE3OSw1NSwxKSI+PC9wYXRoPgogICAgPC9nPgogIDwvc3ZnPg==');
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
}
|
||||
|
||||
.hint {
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
color: var(--primary-color);
|
||||
font-weight: bold;
|
||||
}
|
@ -178,7 +178,7 @@ Page({
|
||||
const _self = this
|
||||
const value = e.currentTarget.dataset.value
|
||||
const id = e.currentTarget.id
|
||||
if (value.applyStatus == 'APPROVED' || value.applyStatus == 'CANCELED') {
|
||||
if (value.applyStatus != 'PENDING') {
|
||||
//通过 或 取消 后不能撤销
|
||||
const item = _self.selectComponent(`#${id}`)
|
||||
if (item) {
|
||||
@ -199,6 +199,18 @@ Page({
|
||||
},
|
||||
//取消
|
||||
showCancel(item) {
|
||||
const _self = this
|
||||
wx.showModal({
|
||||
title: '警告',
|
||||
content: '您确定要撤销申请吗?',
|
||||
complete: (res) => {
|
||||
if (res.confirm) {
|
||||
_self.doCancel(item)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
doCancel(item) {
|
||||
const _self = this
|
||||
wx.showLoading({
|
||||
title: '取消中...',
|
||||
|
@ -66,7 +66,7 @@
|
||||
<view class="approve-title mt-10">补正凭证</view>
|
||||
<view class="approve-img-box mt-10">
|
||||
<block wx:for="{{approveImgs}}" wx:key="index">
|
||||
<view class="approve-img-item single-line-front" bind:tap="previewImg" data-value="{{item}}">
|
||||
<view class="approve-img-item single-line" bind:tap="previewImg" data-value="{{item}}">
|
||||
{{item.value}}
|
||||
</view>
|
||||
</block>
|
||||
|
@ -15,9 +15,9 @@
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
<view style="margin-top: 10rpx;">
|
||||
<view style="margin-top: 5rpx;">
|
||||
<container-loading loadingState="{{loadingState}}">
|
||||
<scroll-view scroll-y style="height: 83vh;" bindrefresherrefresh="doRefreshList" refresher-enabled refresher-triggered="{{listRefreshTrig}}" bindscrolltolower="doLoadMore" lower-threshold='40'>
|
||||
<scroll-view scroll-y style="height: 80vh;" bindrefresherrefresh="doRefreshList" refresher-enabled refresher-triggered="{{listRefreshTrig}}" bindscrolltolower="doLoadMore" lower-threshold='40'>
|
||||
<view class="order-list-box">
|
||||
<block wx:for="{{orderList}}" wx:key="index">
|
||||
<view class="order-list-item" bind:tap="checkItem" data-value="{{item}}">
|
||||
@ -39,9 +39,9 @@
|
||||
</scroll-view>
|
||||
</container-loading>
|
||||
</view>
|
||||
<view class="bottom-footer">
|
||||
<view class="bottom-fixed-footer">
|
||||
<view class="money">开票金额:<text class="price">{{money}}元</text></view>
|
||||
<view class="confirm-btn" bind:tap="goMakeInvoice">去开票</view>
|
||||
<view class="bottom-btn-green" bind:tap="goMakeInvoice">去开票</view>
|
||||
</view>
|
||||
</view>
|
||||
<wxs src="../../../../utils/comm.wxs" module="tools"></wxs>
|
||||
|
@ -67,7 +67,8 @@
|
||||
align-items: center;
|
||||
padding: 10rpx 20rpx;
|
||||
}
|
||||
.order-list-item:nth-of-type(n+2){
|
||||
|
||||
.order-list-item:nth-of-type(n+2) {
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
@ -113,7 +114,7 @@
|
||||
.success-time {
|
||||
font-size: 24rpx;
|
||||
padding-left: 5rpx;
|
||||
color: var(--text-gray-desc-color);
|
||||
color: var(--text-gray-hint-color);
|
||||
}
|
||||
|
||||
.icon-time::before {
|
||||
@ -165,9 +166,11 @@
|
||||
|
||||
.money {
|
||||
color: var(--text-brown-color);
|
||||
font-size: 20px;
|
||||
font-size: 32rpx;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-self: center;
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.price {
|
||||
|
@ -13,8 +13,8 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom-box">
|
||||
<view class="green-bottom-btn" bind:tap="doUpdateInfo">保存</view>
|
||||
<view class="bottom-fixed-footer">
|
||||
<view class="bottom-btn-green" bind:tap="doUpdateInfo">保存</view>
|
||||
</view>
|
||||
</view>
|
||||
<mp-toptips msg="{{errorHint}}" delay="2000" type="error" show="{{showError}}"></mp-toptips>
|
||||
|
@ -1,5 +1,5 @@
|
||||
.info-container {
|
||||
height: 100vh;
|
||||
height: 90vh;
|
||||
background-color: white;
|
||||
border-radius: 10px;
|
||||
padding: 20px;
|
||||
|
@ -34,8 +34,8 @@
|
||||
</scroll-view>
|
||||
</container-loading>
|
||||
</view>
|
||||
<view class="bottom-btn">
|
||||
<view class="confirm-btn" bind:tap="openMake">去开票</view>
|
||||
<view class="bottom-fixed-footer">
|
||||
<view class="bottom-btn-green" bind:tap="openMake">去开票</view>
|
||||
</view>
|
||||
</view>
|
||||
<mp-toptips msg="{{msgHint}}" type="{{msgType}}" show="{{msgShow}}" :delay="2000"></mp-toptips>
|
||||
|
Loading…
Reference in New Issue
Block a user