完成补正项目

This commit is contained in:
itgaojian163 2025-05-08 12:03:16 +08:00
parent 8fa526386c
commit b64d169428
13 changed files with 729 additions and 58 deletions

View File

@ -11,9 +11,9 @@ Component({
type: Boolean,
value: false
},
hintText:{
type:String,
value:'下载中...'
hintText: {
type: String,
value: '下载中...'
}
},

View File

@ -29,8 +29,35 @@
.hint-text {
font-size: 14px;
color: black;
color: #333333;
font-weight: bold;
animation: colorChange 3s infinite alternate;
}
@keyframes colorChange {
0% {
color: #666666;
}
20% {
color: #999999;
}
40% {
color: #CCCCCC;
}
60% {
color: #999999;
}
80% {
color: #666666;
}
100% {
color: #333333;
}
}
.loading {

View File

@ -1,4 +1,10 @@
// 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({
/**
@ -9,10 +15,16 @@ Page({
msgHint: '',
msgType: '',
msgShow: false,
selPro: '',
selType: '',
selPro: null,
selType: null,
files: [],
proList: [],
tempSelPro: null,
typeList: data.kindList,
showSelPro: false,
showSelType: false,
tempSelType: null,
remark: ''
},
/**
@ -30,9 +42,229 @@ Page({
timingFunc: 'easeIn'
}
})
this.setData({
selectFile: this.selectFile.bind(this),
uploadFile: this.uploadFile.bind(this)
})
//获取可以申请补正的列表
this.getCanRepairList(false)
},
//获取可以补正的项目列表
getCanRepairList(isShow) {
const _self = this
wx.showLoading({
title: '加载中...',
})
const data = {
page: 1,
rows: 30
}
ProApi.doGetCanProRepairList(data)
.then(res => {
wx.hideLoading()
if (res.rows && res.rows.length > 0) {
_self.setData({
proList: res.rows,
showSelPro: isShow,
tempSelPro: _self.data.selPro
})
} else {
_self.setData({
msgHint: '您暂无可以补正的软著',
msgType: 'error',
msgShow: true
})
}
})
.catch(err => {
wx.hideLoading()
_self.setData({
msgHint: err.msg ? err.msg : '网络错误,请稍后重试',
msgType: 'error',
msgShow: 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 = {
correctionReason: _self.data.remark,
correctionType: _self.data.selType.value,
correctionVoucher: ids,
projId: _self.data.selPro.projId
}
ProApi.doApplyProRepair(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.selType == 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()
}
})

View File

@ -12,30 +12,93 @@
<text class="label">补正信息</text>
<view class="apply-item-row mt-20 ml-10">
<view class="apply-title star">补正软著</view>
<view class="apply-content">
<view class="{{selPro ==''? 'text-hint':'text-sel'}}">选择需要补正的软著</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-row mt-20 ml-10">
<view class="apply-title star">补正种类</view>
<view class="apply-content">
<view class="{{selType==''?'text-hint':'text-sel'}}">选择种类</view>
<view class="apply-content" bind:tap="showSelTypeDialog">
<view class="{{selType==null?'text-hint':'text-sel'}}">{{selType==null?'选择种类':selType.title}}</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 placeholder="请输入补正原因" placeholder-style="font-size:28rpx;color:var(--text-gray-hint-color)" class="reason-content mt-10"></textarea>
<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" bindfail="uploadError" bindsuccess="uploadSuccess" select="{{selectFile}}" upload="{{uploadFile}}" bind:delete="deleteImage" files="{{files}}" title=""></mp-uploader>
<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>
<view slot="desc">
<scroll-view scroll-y style="height: 500rpx;">
<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>
<rich-text class="pro-list-item-left-tag" nodes="已通过补正<span style='color:red;font-size:28rpx;font-weight:bold;'>{{item.approvedCount}}</span>次"></rich-text>
</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>
</view>
</scroll-view>
</view>
<view slot="footer">
<view class="bottom-btn-green" bind:tap="confirmSelPro">确定</view>
</view>
</mp-half-screen-dialog>
<!-- 种类 -->
<mp-half-screen-dialog show="{{showSelType}}" bindclose="closeDialog">
<view slot="title">补正种类</view>
<view slot="desc">
<scroll-view scroll-y style="height: 500rpx;">
<view class="pro-list-box">
<radio-group>
<block wx:for="{{typeList}}" wx:key="index">
<view class="pro-list-item" bind:tap="" data-value="{{item}}">
<radio class="custom-radio" style="margin-left: 5px;" checked="{{tempSelType.value==item.value}}"></radio>
<view class="pro-list-item-left" bind:tap="chooseType" data-value="{{item}}">
<view class="pro-list-item-left-title">
<view class="pro-list-name">{{item.title}}</view>
</view>
</view>
</view>
</block>
</radio-group>
</view>
</scroll-view>
</view>
<view slot="footer">
<view class="bottom-btn-green" bind:tap="confirmSelType">确定</view>
</view>
</mp-half-screen-dialog>
<mp-toptips msg="{{msgHint}}" type="{{msgType}}" show="{{msgShow}}" :delay="2000"></mp-toptips>

View File

@ -8,6 +8,11 @@
border-radius: 5rpx;
}
.label {
font-size: 32rpx;
font-weight: bold;
}
.apply-item-row {
display: flex;
flex-direction: row;
@ -47,6 +52,61 @@
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-tag {
font-size: 24rpx;
color: var(--text-color);
}
.pro-list-name {
font-size: 28rpx;
font-weight: bold;
}
/* 上传图片 */
@ -92,4 +152,36 @@
.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;
}

View File

@ -192,7 +192,6 @@ Page({
if (token) {
header.Auth = `Bearer ${token}`;
}
var that = this
for (let i = 0; i < tempFilePaths.length; i++) {
wx.uploadFile({
@ -204,11 +203,9 @@ Page({
console.log(res)
let result = JSON.parse(res.data)
that.data.files.push(result.data)
// do something例如把上传成功后的图片地址保存起来
},
fail(err) {
console.log(err);
// do something when upload failed
}
})
}

View File

@ -1,9 +1,12 @@
// pages/copyright/repair/repair.js
import ProApi from '../../../net/api/projectApi'
import {
previewUrl
previewUrl,
copyrightUrl
}
from '../../../net/http.js'
const jsonData = require('../../../utils/data')
const Cache = require('../../../utils/storage')
const app = getApp()
Page({
@ -28,38 +31,11 @@ Page({
isLoadMore: false,
hasMore: true,
repairList: [], //开票记录
typeList: [{
title: '一次补正',
value: 'CORRECTION1'
}, {
title: '二次补正',
value: 'CORRECTION2'
}],
typeList: jsonData.typeList,
selectType: '',
kindList: [{
value: 'CODE',
title: '代码'
}, {
title: '操作手册',
value: 'MANUAL'
}, {
title: '全部',
value: 'ALL'
}],
kindList: jsonData.kindList,
selectKind: '',
stateList: [{
title: '待审核',
value: 'PENDING'
}, {
title: '已通过',
value: 'APPROVED'
}, {
title: '未通过',
value: 'REJECTED'
}, {
title: '已取消',
value: 'CANCELED'
}],
stateList: jsonData.stateList,
selectState: '',
buttons: [{
text: '关闭'
@ -70,7 +46,11 @@ Page({
approveDesc: '',
preUrl: previewUrl,
approveStatus: false, //是否显示编辑提示
slideBtns: app.globalData.cancelEditBtns
slideBtns: app.globalData.cancelEditBtns,
showDownloadDialog: false,
downloadProgress: 0, //下载文件进度
downloading: false, //下载文件中
tempDownloadPro: null, //下载的item
},
/**
@ -269,9 +249,20 @@ Page({
current: current
})
},
closeDialog(e) {
this.setData({
showDownloadDialog: false
})
},
//下载文件
downloadFile(e) {
const item = e.currentTarget.dataset.value
console.log(item.correctionType)
this.setData({
tempDownloadPro: item,
showDownloadDialog: true
})
},
closeHint(e) {
this.setData({
@ -287,5 +278,99 @@ Page({
wx.navigateTo({
url: '/pages/copyright/applyRepair/applyRepair',
})
},
download(e) {
const _self = this
_self.setData({
downloadProgress: 0,
downloading: true, //显示下载进度
showDownloadDialog: false, //关闭底部弹窗
})
const path = e.currentTarget.dataset.path
const url = copyrightUrl + path + _self.data.tempDownloadPro.projId
const token = Cache.get('token')
const header = {}
if (token) {
header.Auth = `Bearer ${token}`;
}
const downloadTask = wx.downloadFile({
url: url,
header: header,
success(res) {
console.log('下载成功', res)
_self.setData({
downloadProgress: 0,
downloading: false
})
if (res.statusCode === 200) {
_self.setData({
successHint: '下载成功',
showSuccess: true
})
// 从响应头中获取文件名
const contentDisposition = res.header['Content-Disposition'];
let fileName = '';
if (contentDisposition) {
const match = contentDisposition.match(/filename=(.*)/);
if (match && match[1]) {
fileName = match[1].replace(/['"]/g, '');
}
}
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}`)
}
})
downloadTask.onProgressUpdate(res => {
console.log(res.progress)
_self.setData({
downloadProgress: res.progress
})
});
},
//显示错误信息
showErr(msg) {
const _self = this
_self.setData({
msgHint: msg,
msgType: 'error',
msgShow: true,
showDownloadDialog: false,
downloading: false,
downloadProgress: 0
})
}
})

View File

@ -5,6 +5,7 @@
"mp-toptips": "weui-miniprogram/toptips/toptips",
"mp-dialog": "weui-miniprogram/dialog/dialog",
"mp-half-screen-dialog": "weui-miniprogram/half-screen-dialog/half-screen-dialog",
"mp-slideview": "weui-miniprogram/slideview/slideview"
"mp-slideview": "weui-miniprogram/slideview/slideview",
"down-progress": "/components/down-progress/down-progress"
}
}

View File

@ -10,6 +10,10 @@
<!-- 条件 -->
<scroll-view scroll-x>
<view class="options-list-box">
<block wx:for="{{stateList}}" wx:key="index">
<view class="{{selectState==item.value ? 'options-tab-select':'options-tab-normal'}} ml-20" data-value="{{item.value}}" bind:tap="chooseState">{{item.title}}</view>
</block>
<view class="divider-h-white"></view>
<block wx:for="{{typeList}}" wx:key="index">
<view class="{{selectType==item.value ? 'options-tab-select':'options-tab-normal'}} {{index>0 ? 'ml-20' :''}}" data-value="{{item.value}}" bind:tap="chooseType">{{item.title}}</view>
</block>
@ -17,10 +21,6 @@
<block wx:for="{{kindList}}" wx:key="index">
<view class="{{selectKind==item.value ? 'options-tab-select':'options-tab-normal'}} ml-20" data-value="{{item.value}}" bind:tap="chooseKind">{{item.title}}</view>
</block>
<view class="divider-h-white"></view>
<block wx:for="{{stateList}}" wx:key="index">
<view class="{{selectState==item.value ? 'options-tab-select':'options-tab-normal'}} ml-20" data-value="{{item.value}}" bind:tap="chooseState">{{item.title}}</view>
</block>
</view>
</scroll-view>
</view>
@ -74,5 +74,45 @@
</view>
</view>
</mp-dialog>
<!-- 下载dialog -->
<mp-half-screen-dialog show="{{showDownloadDialog}}" bindclose="closeDialog">
<view slot="title" style="font-size: 16px;font-weight: bold;">资料下载</view>
<view slot="desc" style="margin-top: 10px;">
<view class="download-item" wx:if="{{tempDownloadPro.correctionType=='MANUAL' || tempDownloadPro.correctionType=='ALL'}}">
<view class="download-title">
<view class="icon-source"></view>
<view class="download-title-txt">操作手册</view>
</view>
<view class="download-btn-box">
<view class="download-btn" bind:tap="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 class="download-btn" bind:tap="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 class="download-item" wx:if="{{tempDownloadPro.correctionType=='CODE' || tempDownloadPro.correctionType=='ALL'}}">
<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" bind:tap="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" bind:tap="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>
</mp-half-screen-dialog>
<down-progress isShow="{{downloading}}" progress="{{downloadProgress}}"></down-progress>
<mp-toptips msg="{{msgHint}}" type="{{msgType}}" show="{{msgShow}}" :delay="2000"></mp-toptips>
<wxs src="../../../utils/comm.wxs" module="tools"></wxs>

View File

@ -524,4 +524,103 @@
.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;
}

View File

@ -108,7 +108,7 @@
.buy-all-btn {
padding: 5rpx 35rpx;
border-radius: 10rpx;
border-radius: 5rpx;
background-color: var(--btn-green-color);
color: var(--white-color);
font-size: 28rpx;
@ -296,7 +296,7 @@
background-color: var(--btn-green-color);
font-size: 28rpx;
padding: 20rpx 40rpx;
border-radius: 10rpx;
border-radius: 5rpx;
color: var(--white-color);
width: 83vw;
text-align: center;

View File

@ -286,13 +286,13 @@ var timeSplit = function (value) {
}
var repairStatusColor = function (status) {
var color = 'repair-status-green'
var color = 'repair-status-yellow'
switch (status) {
case 'PENDING':
color = 'repair-status-green'
color = 'repair-status-yellow'
break
case 'APPROVED':
color = 'repair-status-yellow'
color = 'repair-status-green'
break
case 'REJECTED':
color = 'repair-status-red'

35
utils/data.js Normal file
View File

@ -0,0 +1,35 @@
const kindList = [{
"value": "CODE",
"title": "代码"
}, {
"title": "操作手册",
"value": "MANUAL"
}, {
"title": "全部",
"value": "ALL"
}]
const typeList = [{
"title": "一次补正",
"value": "CORRECTION1"
}, {
"title": "二次补正",
"value": "CORRECTION2"
}]
const stateList = [{
"title": "待审核",
"value": "PENDING"
}, {
"title": "已通过",
"value": "APPROVED"
}, {
"title": "未通过",
"value": "REJECTED"
}, {
"title": "已取消",
"value": "CANCELED"
}]
module.exports = {
stateList,
kindList,
typeList
}