This commit is contained in:
faiz 2024-04-07 20:06:17 +08:00
parent 61242276f7
commit 109c18fa57
5 changed files with 334 additions and 32 deletions

View File

@ -164,6 +164,18 @@ export function transferDetailApi(id) {
export function transferReviewApi(id, data) {
return request.post(`financial/status/${id}`, data)
}
/**
* @description 申请转账 -- 第二步审核
*/
export function transferReviewFirstApi(id, data) {
return request.post(`financial/status_first/${id}`, data)
}
/**
* @description 申请转账 -- 最终审核
*/
export function transferReviewSecondApi(id, data) {
return request.post(`financial/status_second/${id}`, data)
}
/**
* @description 申请转账 -- 批量审核
*/

View File

@ -108,7 +108,7 @@
<el-card>
<div class="mb20">
<el-button size="small" type="primary" @click="exports">导出列表</el-button>
<el-button size="small" :disabled="multipleSelection.length==0" @click="batch">批量审核</el-button>
<!-- <el-button size="small" :disabled="multipleSelection.length==0" @click="batch">批量审核</el-button> -->
</div>
<el-table
v-loading="listLoading"
@ -118,7 +118,8 @@
class="table"
@selection-change="handleSelectionChange"
>
<el-table-column key="2" :selectable="selectable" type="selection" width="55" />
<el-table-column key="2" type="selection" width="55" />
<!-- <el-table-column key="2" :selectable="selectable" type="selection" width="55" /> -->
<el-table-column label="序号" min-width="60">
<template scope="scope">
<span>{{ scope.$index+(tableFrom.page - 1) * tableFrom.limit + 1 }}</span>
@ -160,7 +161,7 @@
<el-table-column prop="mer_money" label="商户余额(元)" min-width="120"/>
<el-table-column label="操作" min-width="180" fixed="right">
<template slot-scope="scope">
<el-button v-if="scope.row.status == 0" type="text" size="small" @click="transferDetail(scope.row.financial_id)">{{ getStatusName(scope.row.status) }}</el-button>
<el-button v-if="(scope.row.status == 0 || scope.row.status == 10 || scope.row.status == 11)" type="text" size="small" @click="transferDetail(scope.row.financial_id)">{{ getStatusName(scope.row.status) }}</el-button>
<el-button v-if="scope.row.status == 1 && scope.row.financial_status != 1" type="text" size="small" @click="transferDetail(scope.row.financial_id,1)">转账</el-button>
<el-button v-if="scope.row.status == 1 && scope.row.financial_status == 1" type="text" size="small" @click="transferDetail(scope.row.financial_id,0)">转账信息</el-button>
<el-button type="text" size="small" @click="transferMark(scope.row.financial_id)">备注</el-button>
@ -204,10 +205,10 @@
<div class="item" v-if="transferData.financial_type == 3"><label class="name">支付宝账号</label>{{ transferData.financial_account.alipay }}</div>
<div class="item image" v-if="transferData.financial_type == 3"><label class="name">支付宝收款二维码</label><img style="max-width: 150px; height: 80px;" @click="getPicture(transferData.financial_account.alipay_code);return false;" :src="transferData.financial_account.alipay_code"/></div>
<div class="item" v-if="isShow"><label class="name">本次申请转账金额</label><span class="font-red">{{ transferData.extract_money }}</span></div>
<div class="item" v-if="transferData.status != 0&&isShow"><label class="name">审核状态</label>{{ transferData.status == 0 ? '待审核' : transferData.status == 1 ? '已审核' : '审核失败' }}</div>
<div class="item" v-if="transferData.status != 0&&isShow"><label class="name">审核状态</label>{{ getStatus(transferData.status) }}</div>
<div class="item" v-if="transferData.status == 1"><label class="name">审核时间</label>{{ transferData.status_time }}</div>
<div class="item" v-if="transferData.status == -1&&isShow"><label class="name">审核未通过原因</label>{{ transferData.refusal }}</div>
<el-form-item label="审核状态:" required v-if="transferData.status == 0 || !isShow" class="item">
<el-form-item label="审核状态:" required v-if="transferData.status == 0 || transferData.status == 10 || transferData.status == 11 || !isShow" class="item">
<el-radio-group v-model="formValidate.status">
<el-radio :label="1" class="radio">通过</el-radio>
<el-radio :label="-1">拒绝</el-radio>
@ -235,7 +236,7 @@
</div>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible=false">取消</el-button>
<el-button v-if="transferData.status == 0 && isShow" type="primary" size="small" @click="transferReview(transferData.financial_id)">提交</el-button>
<el-button v-if="(transferData.status == 0 || transferData.status == 10 || transferData.status == 11) && isShow" type="primary" size="small" @click="transferReview(transferData.financial_id,transferData.status)">提交</el-button>
<el-button v-if="!isShow" type="primary" size="small" @click="transferReviewBatchApi()">提交</el-button>
<el-button v-if="transferData.status == 1" type="primary" size="small" @click="onSubmit(transferData.financial_id)">提交</el-button>
</span>
@ -259,7 +260,7 @@
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import { merSelectApi } from '@/api/product'
import { transferReviewBatchApi,transferRecordApi, transferDetailApi, transferReviewApi, transferEditApi, transferMarkApi, transferHeaderDataApi, transferRecordsExportApi } from '@/api/accounts'
import { transferReviewBatchApi,transferReviewFirstApi,transferReviewSecondApi,transferRecordApi, transferDetailApi, transferReviewApi, transferEditApi, transferMarkApi, transferHeaderDataApi, transferRecordsExportApi } from '@/api/accounts'
import cardsData from "@/components/cards/index";
import createWorkBook from '@/utils/newToExcel.js';
import fileList from '@/components/exportFile/fileList'
@ -349,6 +350,18 @@ export default {
return '最终审核';
}
},
getStatus(val){
switch (val) {
case 0:
return '待审核';
case 10:
return '初步审核通过';
case 11:
return '二次审核通过';
case -1:
return '审核未通过';
}
},
/**重置 */
searchReset(){
this.timeVal = []
@ -357,7 +370,7 @@ export default {
this.getList(1)
},
selectable(row, index){
return !row.status
// return !row.status
},
handleSelectionChange(val) {
this.multipleSelection = val
@ -435,11 +448,21 @@ export default {
this.pictureUrl = url;
},
//
transferReview(id){
transferReview(id,val){
switch (val) {
case 0:
return this.transferReviewFirstApi(id)
case 10:
return this.transferReviewSecondApi(id)
case 11:
return this.transferReviewApi(id)
}
},
//
transferReviewApi(id,val){
let parmas = {
status: this.formValidate.status,
refusal: this.formValidate.refusal
status: 1,
refusal: this.formValidate.refusal,
}
transferReviewApi(id,parmas).then(res => {
this.listLoading = false;
@ -451,6 +474,38 @@ export default {
this.$message.error(res.message)
})
},
//
transferReviewFirstApi(id,val){
let parmas = {
status: 10,
refusal: this.formValidate.refusal,
}
transferReviewFirstApi(id,parmas).then(res => {
this.listLoading = false;
this.$message.success(res.message);
this.dialogVisible = false;
this.getList(1);
}).catch(res => {
this.listLoading = false;
this.$message.error(res.message)
})
},
//
transferReviewSecondApi(id,val){
let parmas = {
status: 11,
refusal: this.formValidate.refusal,
}
transferReviewSecondApi(id,parmas).then(res => {
this.listLoading = false;
this.$message.success(res.message);
this.dialogVisible = false;
this.getList(1);
}).catch(res => {
this.listLoading = false;
this.$message.error(res.message)
})
},
//
transferMark(id){
this.$modalForm(transferMarkApi(id)).then(() => this.getList('1'))

View File

@ -118,6 +118,7 @@
</template>
</el-table-column>
<el-table-column prop="product_id" label="ID" min-width="80" />
<el-table-column prop="type" label="商品品类" min-width="80" />
<el-table-column label="商品图" min-width="70">
<template slot-scope="scope">
<div class="demo-image__preview">
@ -155,7 +156,7 @@
</el-rate>
</template>
</el-table-column>
<el-table-column prop="storeCategory.cate_name" label="商品类型" min-width="70" />
<el-table-column prop="storeCategory.cate_name" label="平台分类" min-width="80" />
<el-table-column prop="rank" label="排序" min-width="60" />
<el-table-column prop="status" label="是否显示" min-width="80">
<template slot-scope="scope">
@ -202,6 +203,13 @@
<el-form-item label="商品名称:" prop="store_name">
<el-input v-model="formValidate.store_name" size="small" placeholder="请输入商品名称" />
</el-form-item>
<el-form-item label="商品关键字:" prop="keyword">
<el-input
v-model="formValidate.keyword"
placeholder="请输入商品关键字"
size="small"
/>
</el-form-item>
<el-form-item label="星级推荐:">
<el-rate class="rate_star" v-model="formValidate.star" :colors="colors" style="margin-top: 4px;"></el-rate>
<span style="margin-top: 4px; font-size: 12px;">备注5星为最高推荐级别1星为最低推荐级别设置后会在商城商品列表搜索商品列表中体现</span>
@ -214,6 +222,52 @@
<el-form-item label="排序:">
<el-input-number v-model="formValidate.rank" size="small" placeholder="请输入排序序号" style="width: 200px;" />
</el-form-item>
<el-form-item label="平台商品分类:" prop="cate_id" label-width="100px">
<el-cascader
v-model="formValidate.cate_id"
size="small"
:options="merCateList"
:props="props"
filterable
clearable
/>
</el-form-item>
<el-form-item label="商品轮播图:" prop="slider_image">
<div class="acea-row">
<div
v-for="(item, index) in formValidate.slider_image"
:key="index"
class="pictrue"
draggable="false"
@dragstart="handleDragStart($event, item)"
@dragover.prevent="handleDragOver($event, item)"
@dragenter="handleDragEnter($event, item)"
@dragend="handleDragEnd($event, item)"
>
<!-- <img :src="item"> -->
<el-image
style="width: 60px; height: 60px"
:src="item"
:preview-src-list="[item]"
/>
<i
class="el-icon-error btndel"
@click="handleRemove(index)"
/>
</div>
<div
v-if="formValidate.slider_image.length < 10"
class="uploadCont"
title="750*750px"
>
<div class="upLoadPicBox" @click="modalPicTap('2')">
<div class="upLoad">
<i class="el-icon-camera cameraIconfont" />
</div>
</div>
</div>
</div>
</el-form-item>
<el-col :span="24">
<el-form-item label="商品详情:">
<ueditor-from v-model="formValidate.content" :content="formValidate.content" />
@ -339,9 +393,7 @@ export default {
},
data() {
return {
props: {
emitPath: false
},
props: { emitPath: false },
pickerOptions: timeOptions,
timeVal: [],
ruleValidate: {
@ -351,6 +403,7 @@ export default {
trigger: "blur"
},]
},
dialogVisible: false,
dialogRecommend: false,
append: true,
@ -390,7 +443,10 @@ export default {
store_name: '',
rank: '',
us_status: '',
star: ''
star: '',
keyword:'',
cate_id:0,
slider_image: [],
},
productStatusList: [
{ label: "上架显示", value: 1 },
@ -472,6 +528,35 @@ export default {
this.getList('')
this.getLstFilterApi()
},
//
modalPicTap(tit, num, i) {
const _this = this;
const attr = [];
this.$modalUpload(function(img) {
if (tit === "1" && !num) {
_this.formValidate.image = img[0];
_this.OneattrValue[0].image = img[0];
}
if (tit === "2" && !num) {
img.map(item => {
attr.push(item.attachment_src);
_this.formValidate.slider_image.push(item);
if (_this.formValidate.slider_image.length > 10) {
_this.formValidate.slider_image.length = 10;
}
});
}
if (tit === "1" && num === "dan") {
_this.OneattrValue[0].image = img[0];
}
if (tit === "1" && num === "duo") {
_this.ManyAttrValue[i].image = img[0];
}
if (tit === "1" && num === "pi") {
_this.oneFormBatch[0].image = img[0];
}
}, tit);
},
onchangeIsShow(row) {
changeApi(row.product_id, row.is_used).then(({
message
@ -508,12 +593,36 @@ export default {
sys_labels: row.sys_labels
}
},
handleRemove(i) {
this.formValidate.slider_image.splice(i, 1);
},
//
onDetails(id) {
this.product_id = id;
this.drawer = true;
this.$refs.proDetail.getInfo(id)
},
//
handleDragStart(e, item) {
this.dragging = item;
},
handleDragEnd(e, item) {
this.dragging = null;
},
handleDragOver(e) {
e.dataTransfer.dropEffect = "move";
},
handleDragEnter(e, item) {
e.dataTransfer.effectAllowed = "move";
if (item === this.dragging) {
return;
}
const newItems = [...this.formValidate.slider_image];
const src = newItems.indexOf(this.dragging);
const dst = newItems.indexOf(item);
newItems.splice(dst, 0, ...newItems.splice(src, 1));
this.formValidate.slider_image = newItems;
},
changeDrawer(v) {
this.drawer = v;
},
@ -571,7 +680,10 @@ export default {
content: info.content,
store_name: info.store_name,
rank: info.rank,
star: info.star
star: info.star,
keyword:info.keyword,
cate_id:info.cate_id,
slider_image: info.slider_image
}
if(info.is_benefit === 1) this.checkboxGroup.push('is_benefit')
if(info.is_hot === 1) this.checkboxGroup.push('is_hot')
@ -777,6 +889,26 @@ export default {
height: 100%;
background: rgba(0, 0, 0, 0.1);
}
.pictrue {
width: 60px;
height: 60px;
border: 1px dotted rgba(0, 0, 0, 0.1);
margin-right: 10px;
position: relative;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.btndel {
position: absolute;
z-index: 1;
width: 20px !important;
height: 20px !important;
left: 46px;
top: -4px;
}
.tags_name{
font-size: 10px;
height: 16px;

View File

@ -25,6 +25,7 @@
</span>
<span class="sp">联系人电话{{ projectData.unit_name }}</span>
<span class="sp" v-if="projectData.refusal">上传拒绝原因{{ projectData.refusal }}</span>
</div>
<div class="acea-row">
@ -308,6 +309,7 @@
<el-image
style="width: 60px; height: 60px"
:src="scope.row.image"
:preview-src-list="[scope.row.image]"
/>
</div>
</template>
@ -376,7 +378,38 @@
<el-radio :label="-1">拒绝</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="佐证图片:" prop="status_img" label-width="90px">
<el-form-item label="佐证图片" prop="status_img" label-width="80px" v-if="ruleForm.status===1">
<div class="acea-row">
<div
v-for="(item, index) in ruleForm.status_img"
:key="index"
class="pictrue"
draggable="false"
@dragstart="handleDragStart($event, item)"
@dragover.prevent="handleDragOver($event, item)"
@dragenter="handleDragEnter($event, item)"
@dragend="handleDragEnd($event, item)"
>
<img :src="item">
<i
class="el-icon-error btndel"
@click="handleRemove(index)"
/>
</div>
<div
v-if="ruleForm.status_img.length < 10"
class="uploadCont"
title="750*750px"
>
<div class="upLoadPicBox" @click="modalPicTap('2')">
<div class="upLoad">
<i class="el-icon-camera cameraIconfont" />
</div>
</div>
</div>
</div>
</el-form-item>
<!-- <el-form-item label="佐证图片:" prop="status_img" label-width="90px">
<div
class="upLoadPicBox"
title="750*750px"
@ -389,7 +422,7 @@
<i class="el-icon-camera cameraIconfont" />
</div>
</div>
</el-form-item>
</el-form-item> -->
<el-form-item v-if="ruleForm.status===-1" label="原因" prop="refusal">
<el-input v-model="ruleForm.refusal" type="textarea" placeholder="请输入原因" />
</el-form-item>
@ -494,7 +527,7 @@ export default {
{ required: true, message: '请填写拒绝原因', trigger: 'blur' }
],
status_img: [
{ required: true, message: '请上传佐证图片', trigger: 'blur' }
{type: 'array', required: true, message: '请上传佐证图片', trigger: 'blur' }
]
},
isAppend: true,
@ -521,7 +554,7 @@ export default {
refusal: '',
status: 1,
id: '',
status_img:''
status_img:[]
},
formThead: Object.assign({}, objTitle),
manyTabDate: {},
@ -551,6 +584,30 @@ export default {
}
},
methods: {
handleRemove(i) {
this.ruleForm.status_img.splice(i, 1);
},
handleDragEnd(e, item) {
this.dragging = null;
},
handleDragEnter(e, item) {
e.dataTransfer.effectAllowed = "move";
if (item === this.dragging) {
return;
}
const newItems = [...this.ruleForm.status_img];
const src = newItems.indexOf(this.dragging);
const dst = newItems.indexOf(item);
newItems.splice(dst, 0, ...newItems.splice(src, 1));
this.ruleForm.status_img = newItems;
},
handleDragOver(e) {
e.dataTransfer.dropEffect = "move";
},
//
handleDragStart(e, item) {
this.dragging = item;
},
getType(val){
var regex = /(?:\.([^.]+))?$/;
let suffix = regex.exec(val.url)[1]
@ -561,22 +618,36 @@ export default {
const _this = this;
const attr = [];
this.$modalUpload(function(img) {
console.log(_this.ruleForm);
if (tit === "1" && !num) {
_this.ruleForm.status_img = img[0];
}
if (tit === "2" && !num) {
img.map(item => {
attr.push(item.attachment_src);
_this.ruleForm.status_img.push(item);
if (_this.ruleForm.status_img.length > 10) {
_this.ruleForm.status_img.length = 10;
}
});
}
}, tit);
},
onSubmit() {
console.log(this.isShow);
this.isShow ? this.ruleForm.id = this.proId : this.ruleForm.id = this.ids
productStatusApi(this.ruleForm).then(res => {
this.$message.success(res.message)
this.dialogVisible = false
this.activeNames = 'first'
this.$emit('subSuccess')
}).catch(res => {
this.listLoading = false
this.$message.error(res.message)
this.$refs.ruleForm.validate(valid=>{
if(valid){
this.isShow ? this.ruleForm.id = this.proId : this.ruleForm.id = this.ids
productStatusApi(this.ruleForm).then(res => {
this.$message.success(res.message)
this.dialogVisible = false
this.activeNames = 'first'
this.$emit('subSuccess')
}).catch(res => {
this.listLoading = false
this.$message.error(res.message)
})
}
})
},
handleClose() {
@ -586,7 +657,7 @@ export default {
getInfo(id) {
this.proId = id
this.loading = true
this.ruleForm.status_img = ''
this.ruleForm.status_img = []
productDetailApi(id).then(res => {
this.projectData = res.data
let qualification={
@ -643,6 +714,26 @@ export default {
.projectInfo ::v-deep .el-dialog__body{
padding-top: 0 !important;
}
.pictrue {
width: 60px;
height: 60px;
border: 1px dotted rgba(0, 0, 0, 0.1);
margin-right: 10px;
position: relative;
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.btndel {
position: absolute;
z-index: 1;
width: 20px !important;
height: 20px !important;
left: 46px;
top: -4px;
}
.upload{
display: flex;
flex-direction: row;

View File

@ -145,6 +145,18 @@
</li>
</ul>
</div>
<div class="section">
<ul class="list">
<li class="item" v-if="productData.refusal">
<div class="item-title">审核拒绝原因</div>
<div class="value">{{productData.refusal || ''}}</div>
</li>
<li class="item item100" v-if="productData.status_img">
<div class="item-title">佐证图片</div>
<el-image v-for="(item,index) in productData.status_img" :key="index" :src="item" style="width:40px;height:40px;margin-right:12px;" :preview-src-list="productData.status_img" />
</li>
</ul>
</div>
<div class="section" style="margin-top: 50px;">
<div class="title">规格列表</div>
<div class="list">