This commit is contained in:
gboy 2024-04-08 17:54:21 +08:00
commit 6af21850fb
22 changed files with 1379 additions and 151 deletions

View File

@ -3,11 +3,11 @@ ENV = 'development'
# http://192.168.1.43:8324/admin # http://192.168.1.43:8324/admin
# http://mer.crmeb.net/admin # http://mer.crmeb.net/admin
# base api # base api
VUE_APP_BASE_API = 'http://192.168.1.32:8080' VUE_APP_BASE_API = 'http://192.168.1.199:8080'
# VUE_APP_BASE_API = 'https://plus.hwms.shop' # VUE_APP_BASE_API = 'https://plus.hwms.shop'
# socket 连接地址 # socket 连接地址
VUE_APP_WS_URL = 'ws://192.168.1.32:8080' VUE_APP_WS_URL = 'ws://192.168.1.199:8080'
# VUE_APP_WS_URL = 'ws://plus.hwms.shop' # VUE_APP_WS_URL = 'ws://plus.hwms.shop'
# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,

View File

@ -1,5 +1,6 @@
module.exports = { module.exports = {
presets: [ presets: [
'@vue/app' '@vue/app'
] ],
plugins: ["@babel/plugin-proposal-optional-chaining"]
} }

View File

@ -94,6 +94,7 @@
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "7.0.0", "@babel/core": "7.0.0",
"@babel/plugin-proposal-optional-chaining": "^7.21.0",
"@babel/register": "7.0.0", "@babel/register": "7.0.0",
"@vue/cli-plugin-babel": "3.5.3", "@vue/cli-plugin-babel": "3.5.3",
"@vue/cli-plugin-eslint": "^3.9.1", "@vue/cli-plugin-eslint": "^3.9.1",

View File

@ -100,19 +100,19 @@ export function capitalFlowExportApi(data) {
/** /**
* @description 转账记录 -- 导出 * @description 转账记录 -- 导出
*/ */
export function transferRecordsExportApi(data) { export function transferRecordsExportApi(data) {
return request.get(`financial/export`, data) return request.get(`financial/export`, data)
} }
/** /**
* @description 资金记录 -- 导出 * @description 资金记录 -- 导出
*/ */
export function fundingRecordsExportApi(data) { export function fundingRecordsExportApi(data) {
return request.get(`bill/export`, data) return request.get(`bill/export`, data)
} }
/** /**
* @description 提现管理 -- 导出 * @description 提现管理 -- 导出
*/ */
export function extractManageExportApi(data) { export function extractManageExportApi(data) {
return request.get(`user/extract/export`, data) return request.get(`user/extract/export`, data)
} }
/** /**
@ -164,6 +164,24 @@ export function transferDetailApi(id) {
export function transferReviewApi(id, data) { export function transferReviewApi(id, data) {
return request.post(`financial/status/${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 申请转账 -- 批量审核
*/
export function transferReviewBatchApi(data) {
return request.post(`financial/status_batch`, data)
}
/** /**
* @description 申请转账 -- 备注 * @description 申请转账 -- 备注
*/ */
@ -204,7 +222,7 @@ export function downloadFinancialApi(type, data) {
* @description 资金流水 -- 统计数据 * @description 资金流水 -- 统计数据
*/ */
export function getStatisticsApi(data) { export function getStatisticsApi(data) {
return request.get(`financial_record/count`,data) return request.get(`financial_record/count`, data)
} }
/** /**
* @description 发票 -- 获取发票说明 * @description 发票 -- 获取发票说明
@ -227,19 +245,19 @@ export function invoiceListApi(data) {
/** /**
* @description 发票 -- 详情 * @description 发票 -- 详情
*/ */
export function invoiceDetailApi(id) { export function invoiceDetailApi(id) {
return request.get(`receipt/detail/${id}`) return request.get(`receipt/detail/${id}`)
} }
/** /**
* @description 分账单 -- 获取配置 * @description 分账单 -- 获取配置
*/ */
export function getSettingApi() { export function getSettingApi() {
return request.get(`profitsharing/config`) return request.get(`profitsharing/config`)
} }
/** /**
* @description 分账单 -- 修改配置 * @description 分账单 -- 修改配置
*/ */
export function updateSettingApi(data) { export function updateSettingApi(data) {
return request.post(`profitsharing/config`, data) return request.post(`profitsharing/config`, data)
} }
/** /**
@ -251,24 +269,24 @@ export function merchantBillList(data) {
/** /**
* @description 单个商户账单 -- 列表 * @description 单个商户账单 -- 列表
*/ */
export function singleMerBillList(id,data) { export function singleMerBillList(id, data) {
return request.get(`financial_record/mer_list/${id}`, data) return request.get(`financial_record/mer_list/${id}`, data)
} }
/** /**
* @description 单个商户账单 -- 详情 * @description 单个商户账单 -- 详情
*/ */
export function singleMerBillDetail(type,data) { export function singleMerBillDetail(type, data) {
return request.get(`financial_record/mer_detail/${type}`, data) return request.get(`financial_record/mer_detail/${type}`, data)
} }
/** /**
* @description 单个商户账单 -- 导出 * @description 单个商户账单 -- 导出
*/ */
export function singleMerBillExport(type,data) { export function singleMerBillExport(type, data) {
return request.get(`financial_record/mer_excel/${type}`, data) return request.get(`financial_record/mer_excel/${type}`, data)
} }
/** /**
* @description 单个商户账单 -- 统计 * @description 单个商户账单 -- 统计
*/ */
export function singleMerBillHeader(id,data) { export function singleMerBillHeader(id, data) {
return request.get(`financial_record/mer_title/${id}`, data) return request.get(`financial_record/mer_title/${id}`, data)
} }

View File

@ -15,6 +15,36 @@ import request from './request'
export function orderListApi(data) { export function orderListApi(data) {
return request.get('order/lst', data) return request.get('order/lst', data)
} }
/**
* @description 退款订单 -- 详情
*/
export function refundorderDetailApi(id) {
return request.get(`order/refund/detail/${id}`)
}
/**
* @description 退款订单 -- 记录from
*/
export function refundorderLogApi(id) {
return request.get(`order/refund/log/${id}`)
}
/**
* @description 退款订单 -- 审核from
*/
export function refundorderStatusApi(id) {
return request.get(`order/refund/status/${id}/form`)
}
/**
* @description 开启强制退款订单 -- 审核from
*/
export function refundorderOpenApi(id) {
return request.get(`order/refund/open/${id}/form`)
}
/**
* @description 退款单获取物流信息
*/
export function refundorderExpressApi(id) {
return request.get(`order/express/${id}`)
}
/** /**
* @description 开启退款 * @description 开启退款
*/ */

View File

@ -114,31 +114,31 @@ export function brandStatusApi(id, status) {
/** /**
* @description 标签 -- 新增表单 * @description 标签 -- 新增表单
*/ */
export function labelCreateApi() { export function labelCreateApi() {
return request.get('product/label/create/form') return request.get('product/label/create/form')
} }
/** /**
* @description 标签 -- 编辑表单 * @description 标签 -- 编辑表单
*/ */
export function labelUpdateApi(id) { export function labelUpdateApi(id) {
return request.get(`product/label/update/${id}/form`) return request.get(`product/label/update/${id}/form`)
} }
/** /**
* @description 标签 -- 列表 * @description 标签 -- 列表
*/ */
export function labelListApi(data) { export function labelListApi(data) {
return request.get('product/label/lst', data) return request.get('product/label/lst', data)
} }
/** /**
* @description 标签 -- 删除 * @description 标签 -- 删除
*/ */
export function labelDeleteApi(id) { export function labelDeleteApi(id) {
return request.delete(`product/label/delete/${id}`) return request.delete(`product/label/delete/${id}`)
} }
/** /**
* @description 标签列表 -- 修改状态 * @description 标签列表 -- 修改状态
*/ */
export function labelStatusApi(id, status) { export function labelStatusApi(id, status) {
return request.post(`product/label/status/${id}`, { status }) return request.post(`product/label/status/${id}`, { status })
} }
/** /**
@ -178,7 +178,19 @@ export function seckillProductDetailApi(id) {
return request.get(`seckill/product/detail/${id}`) return request.get(`seckill/product/detail/${id}`)
} }
/** /**
* @description 商品审核 -- 表单提交 * @description 商品审核 -- 初步审核
*/
export function productStatusFirstApi(data) {
return request.post(`store/product/status_first`, data)
}
/**
* @description 商品审核 -- 二次审核
*/
export function productStatusSecondApi(data) {
return request.post(`store/product/status_second`, data)
}
/**
* @description 商品审核 -- 最终审核
*/ */
export function productStatusApi(data) { export function productStatusApi(data) {
return request.post(`store/product/status`, data) return request.post(`store/product/status`, data)
@ -300,8 +312,8 @@ export function presellProDetailApi(id) {
/** /**
* @description 预售商品 -- 编辑 * @description 预售商品 -- 编辑
*/ */
export function presellUpdateApi(id,data) { export function presellUpdateApi(id, data) {
return request.post(`store/product/presell/update/${id}`,data) return request.post(`store/product/presell/update/${id}`, data)
} }
/** /**
* @description 预售商品审核 -- 表单提交 * @description 预售商品审核 -- 表单提交
@ -325,7 +337,7 @@ export function preSellAgreeInfo() {
* @description 申请管理 -- 预售协议保存 * @description 申请管理 -- 预售协议保存
*/ */
export function preSellAgreeUpdate(data) { export function preSellAgreeUpdate(data) {
return request.post(`agreement/sys_product_presell_agree`,data) return request.post(`agreement/sys_product_presell_agree`, data)
} }
/** /**
* @description 助力 -- 列表 * @description 助力 -- 列表
@ -386,8 +398,8 @@ export function assistReviewDetailApi(id) {
/** /**
* @description 助力商品 -- 详情(编辑和查看) * @description 助力商品 -- 详情(编辑和查看)
*/ */
export function assistProductUpdateApi(id,data) { export function assistProductUpdateApi(id, data) {
return request.post(`store/product/assist/update/${id}`,data) return request.post(`store/product/assist/update/${id}`, data)
} }
/** /**
* @description 服务保障 -- 添加 * @description 服务保障 -- 添加
@ -399,19 +411,19 @@ export function guaranteeAddApi() {
* @description 服务保障 -- 列表 * @description 服务保障 -- 列表
*/ */
export function guaranteeLstApi(data) { export function guaranteeLstApi(data) {
return request.get(`guarantee/lst`,data) return request.get(`guarantee/lst`, data)
} }
/** /**
* @description 服务保障 -- 编辑排序 * @description 服务保障 -- 编辑排序
*/ */
export function guaranteeSortApi(id,data) { export function guaranteeSortApi(id, data) {
return request.post(`guarantee/sort/${id}`,data) return request.post(`guarantee/sort/${id}`, data)
} }
/** /**
* @description 服务保障 -- 修改显示状态 * @description 服务保障 -- 修改显示状态
*/ */
export function guaranteeStatusApi(id, status) { export function guaranteeStatusApi(id, status) {
return request.post(`guarantee/status/${id}`, status ) return request.post(`guarantee/status/${id}`, status)
} }
/** /**
* @description 服务保障 -- 编辑 * @description 服务保障 -- 编辑
@ -429,7 +441,7 @@ export function guaranteeDeleteApi(id) {
* @description 商品列表 -- 编辑排序 * @description 商品列表 -- 编辑排序
*/ */
export function productSort(id, data) { export function productSort(id, data) {
return request.post(`store/reply/sort/${id}`,data) return request.post(`store/reply/sort/${id}`, data)
} }
/** 商品列表 -- 获取标签项 */ /** 商品列表 -- 获取标签项 */
export function getProductLabelApi() { export function getProductLabelApi() {
@ -444,7 +456,7 @@ export function updatetSeckillLabel(id, data) {
return request.post(`seckill/product/labels/${id}`, data) return request.post(`seckill/product/labels/${id}`, data)
} }
/** 预售列表 -- 编辑标签 */ /** 预售列表 -- 编辑标签 */
export function updatetPresellLabel(id, data) { export function updatetPresellLabel(id, data) {
return request.post(`store/product/presell/labels/${id}`, data) return request.post(`store/product/presell/labels/${id}`, data)
} }
/** 助力列表 -- 编辑标签 */ /** 助力列表 -- 编辑标签 */
@ -458,7 +470,7 @@ export function updatetCombinationLabel(id, data) {
/** /**
* @description 上传视频 * @description 上传视频
*/ */
export function productGetTempKeysApi() { export function productGetTempKeysApi() {
return request.get(`upload/temp_key`) return request.get(`upload/temp_key`)
} }
/** 商品列表 -- 批量设置标签 */ /** 商品列表 -- 批量设置标签 */
@ -491,15 +503,15 @@ export function deletePriceRuleApi(id) {
} }
/** 价格说明 -- 是否显示 */ /** 价格说明 -- 是否显示 */
export function priceRuleStatusApi(id, status) { export function priceRuleStatusApi(id, status) {
return request.post(`price_rule/status/${id}`,status) return request.post(`price_rule/status/${id}`, status)
} }
/** 参数模板 -- 添加 */ /** 参数模板 -- 添加 */
export function productSpecs(data) { export function productSpecs(data) {
return request.post(`store/params/temp/create`,data) return request.post(`store/params/temp/create`, data)
} }
/** 参数模板 -- 编辑 */ /** 参数模板 -- 编辑 */
export function specsUpdate(id, data) { export function specsUpdate(id, data) {
return request.post(`store/params/temp/update/${id}`,data) return request.post(`store/params/temp/update/${id}`, data)
} }
/** 参数模板 -- 详情 */ /** 参数模板 -- 详情 */
export function productSpecsInfo(id) { export function productSpecsInfo(id) {
@ -525,6 +537,6 @@ export function merProductLstApi(data) {
return request.get(`store/product/list`, data) return request.get(`store/product/list`, data)
} }
/** 商品列表 -- 商品操作记录 */ /** 商品列表 -- 商品操作记录 */
export function operateRecordList(id,data) { export function operateRecordList(id, data) {
return request.get(`store/product/get_operate_list/${id}`,data) return request.get(`store/product/get_operate_list/${id}`, data)
} }

View File

@ -34,7 +34,7 @@
</el-form-item> </el-form-item>
<el-form-item prop="mer_lock_time" label="商户余额冻结期:"> <el-form-item prop="mer_lock_time" label="商户余额冻结期:">
<el-input-number v-model="settingForm.mer_lock_time" :step="1" :min="0" class="selWidth"></el-input-number> <el-input-number v-model="settingForm.mer_lock_time" :step="1" :min="0" class="selWidth"></el-input-number>
<span>单位 冻结期仅针对线下转账模式指用户支付成功后多少天商户余额可解冻设置为0即无冻结期</span> <span>单位 冻结期确认收货后多少天商户余额可解冻设置为0即无冻结期</span>
</el-form-item> </el-form-item>
<el-form-item prop="open_wx_combine" required> <el-form-item prop="open_wx_combine" required>
<span slot="label"> <span slot="label">

View File

@ -108,6 +108,7 @@
<el-card> <el-card>
<div class="mb20"> <div class="mb20">
<el-button size="small" type="primary" @click="exports">导出列表</el-button> <el-button size="small" type="primary" @click="exports">导出列表</el-button>
<!-- <el-button size="small" :disabled="multipleSelection.length==0" @click="batch">批量审核</el-button> -->
</div> </div>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
@ -115,7 +116,10 @@
:data="tableData.data" :data="tableData.data"
size="small" size="small"
class="table" class="table"
@selection-change="handleSelectionChange"
> >
<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"> <el-table-column label="序号" min-width="60">
<template scope="scope"> <template scope="scope">
<span>{{ scope.$index+(tableFrom.page - 1) * tableFrom.limit + 1 }}</span> <span>{{ scope.$index+(tableFrom.page - 1) * tableFrom.limit + 1 }}</span>
@ -157,7 +161,7 @@
<el-table-column prop="mer_money" label="商户余额(元)" min-width="120"/> <el-table-column prop="mer_money" label="商户余额(元)" min-width="120"/>
<el-table-column label="操作" min-width="180" fixed="right"> <el-table-column label="操作" min-width="180" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.status == 0" type="text" size="small" @click="transferDetail(scope.row.financial_id)">审核</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,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 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> <el-button type="text" size="small" @click="transferMark(scope.row.financial_id)">备注</el-button>
@ -180,7 +184,7 @@
<el-dialog :title="transferData.status == 0 ? '审核' : '转账信息'" :visible.sync="dialogVisible" width="700px" v-if="dialogVisible"> <el-dialog :title="transferData.status == 0 ? '审核' : '转账信息'" :visible.sync="dialogVisible" width="700px" v-if="dialogVisible">
<div class="box-container"> <div class="box-container">
<el-form ref="ruleForm" size="small"> <el-form ref="ruleForm" size="small">
<div class="section"> <div class="section" v-if="isShow">
<div class="title">商户信息</div> <div class="title">商户信息</div>
<div class="list"> <div class="list">
<div class="item"><label class="name">商户名称</label>{{ transferData.merchant && transferData.merchant.mer_name }}</div> <div class="item"><label class="name">商户名称</label>{{ transferData.merchant && transferData.merchant.mer_name }}</div>
@ -194,17 +198,17 @@
</div> </div>
</div> </div>
<div class="section"> <div class="section">
<div class="title">收款信息</div> <div class="title" v-if="isShow">收款信息</div>
<div class="list"> <div class="list">
<div class="item" v-if="transferData.financial_type == 2"><label class="name">微信号</label>{{ transferData.financial_account.wechat }}</div> <div class="item" v-if="transferData.financial_type == 2"><label class="name">微信号</label>{{ transferData.financial_account.wechat }}</div>
<div class="item image" v-if="transferData.financial_type == 2"><label class="name">微信收款二维码</label><img style="max-width: 150px; height: 80px;" @click="getPicture(transferData.financial_account.wechat_code);return false;" :src="transferData.financial_account.wechat_code"/></div> <div class="item image" v-if="transferData.financial_type == 2"><label class="name">微信收款二维码</label><img style="max-width: 150px; height: 80px;" @click="getPicture(transferData.financial_account.wechat_code);return false;" :src="transferData.financial_account.wechat_code"/></div>
<div class="item" v-if="transferData.financial_type == 3"><label class="name">支付宝账号</label>{{ transferData.financial_account.alipay }}</div> <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 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"><label class="name">本次申请转账金额</label><span class="font-red">{{ transferData.extract_money }}</span></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"><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"><label class="name">审核时间</label>{{ transferData.status_time }}</div>
<div class="item" v-if="transferData.status == -1"><label class="name">审核未通过原因</label>{{ transferData.refusal }}</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" 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-group v-model="formValidate.status">
<el-radio :label="1" class="radio">通过</el-radio> <el-radio :label="1" class="radio">通过</el-radio>
<el-radio :label="-1">拒绝</el-radio> <el-radio :label="-1">拒绝</el-radio>
@ -232,7 +236,8 @@
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button size="small" @click="dialogVisible=false">取消</el-button> <el-button size="small" @click="dialogVisible=false">取消</el-button>
<el-button v-if="transferData.status == 0" 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> <el-button v-if="transferData.status == 1" type="primary" size="small" @click="onSubmit(transferData.financial_id)">提交</el-button>
</span> </span>
</el-dialog> </el-dialog>
@ -255,7 +260,7 @@
// | Author: CRMEB Team <admin@crmeb.com> // | Author: CRMEB Team <admin@crmeb.com>
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
import { merSelectApi } from '@/api/product' import { merSelectApi } from '@/api/product'
import { 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 cardsData from "@/components/cards/index";
import createWorkBook from '@/utils/newToExcel.js'; import createWorkBook from '@/utils/newToExcel.js';
import fileList from '@/components/exportFile/fileList' import fileList from '@/components/exportFile/fileList'
@ -276,6 +281,7 @@ export default {
{ label: "未到账", value: 0 } { label: "未到账", value: 0 }
], ],
listLoading: true, listLoading: true,
isShow:false,
cardLists: [], cardLists: [],
voucher_image: [], voucher_image: [],
formValidate: { formValidate: {
@ -309,6 +315,8 @@ export default {
] ]
}, },
merSelect: [], merSelect: [],
multipleSelection: [],
OffId: [],
tableFromLog: { tableFromLog: {
page: 1, page: 1,
limit: 20 limit: 20
@ -332,6 +340,28 @@ export default {
this.getHeaderData(); this.getHeaderData();
}, },
methods: { methods: {
getStatusName(val){
switch (val) {
case 0:
return '初始审核';
case 10:
return '第二步审核';
case 11:
return '最终审核';
}
},
getStatus(val){
switch (val) {
case 0:
return '待审核';
case 10:
return '初步审核通过';
case 11:
return '二次审核通过';
case -1:
return '审核未通过';
}
},
/**重置 */ /**重置 */
searchReset(){ searchReset(){
this.timeVal = [] this.timeVal = []
@ -339,6 +369,40 @@ export default {
this.$refs.searchForm.resetFields() this.$refs.searchForm.resetFields()
this.getList(1) this.getList(1)
}, },
selectable(row, index){
// return !row.status
},
handleSelectionChange(val) {
this.multipleSelection = val
const data = []
this.multipleSelection.map((item) => {
data.push(item.financial_id)
})
this.OffId = data
console.log(this.OffId);
},
//
batch() {
if(this.multipleSelection.length === 0) return this.$message.warning('请先选择记录')
this.isShow = false
this.dialogVisible = true
},
transferReviewBatchApi(){
let parmas = {
status: this.formValidate.status,
refusal: this.formValidate.refusal,
ids:this.OffId
}
transferReviewBatchApi(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)
})
},
// //
getMerSelect() { getMerSelect() {
merSelectApi() merSelectApi()
@ -363,6 +427,7 @@ export default {
if(num) this.voucher_image = [] if(num) this.voucher_image = []
transferDetailApi(id).then(res => { transferDetailApi(id).then(res => {
this.listLoading = false; this.listLoading = false;
this.isShow = true
this.dialogVisible = true; this.dialogVisible = true;
this.transferData = res.data this.transferData = res.data
this.formValidate.status = res.data.status this.formValidate.status = res.data.status
@ -383,10 +448,21 @@ export default {
this.pictureUrl = url; 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 = { let parmas = {
status: this.formValidate.status, status: 1,
refusal: this.formValidate.refusal refusal: this.formValidate.refusal,
} }
transferReviewApi(id,parmas).then(res => { transferReviewApi(id,parmas).then(res => {
this.listLoading = false; this.listLoading = false;
@ -398,6 +474,38 @@ export default {
this.$message.error(res.message) 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){ transferMark(id){
this.$modalForm(transferMarkApi(id)).then(() => this.getList('1')) this.$modalForm(transferMarkApi(id)).then(() => this.getList('1'))

View File

@ -303,7 +303,7 @@
type="text" type="text"
size="small" size="small"
@click="offline(scope.row.mer_id)" @click="offline(scope.row.mer_id)"
>线下付款</el-button >财务审核</el-button
> >
</template> </template>
</el-table-column> </el-table-column>

View File

@ -162,6 +162,14 @@ export default {
this.loading = false; this.loading = false;
this.drawer = true; this.drawer = true;
this.merData = res.data; this.merData = res.data;
let financial_bank = {
name:'',
bank:'',
bank_code:'',
}
if(!res.data.financial_bank){
this.merData.financial_bank = financial_bank;
}
if(!this.isEdit)this.$refs.merInfo.onOperateLog(this.merId); if(!this.isEdit)this.$refs.merInfo.onOperateLog(this.merId);
}) })
.catch((res) => { .catch((res) => {
@ -170,7 +178,12 @@ export default {
}, },
initData(){ initData(){
this.merData = { this.merData = {
is_trader:0 is_trader:0,
financial_bank:{
name:'',
bank:'',
bank_code:'',
}
} }
this.isEdit = false; this.isEdit = false;
this.isAdd = true; this.isAdd = true;

View File

@ -129,6 +129,53 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="每日提现额度:" prop="exchange_limit">
<el-input
size="small"
oninput ="value=value.replace(/[^\d]/g,'')"
v-model="merData.exchange_limit"
placeholder="请输入每日提现额度"
class="selWidth"
/>
</el-form-item>
</el-col>
</el-row>
<div class="title">银行卡信息</div>
<el-row v-if="merData.financial_bank">
<el-col :span="12">
<el-form-item label="姓名:" prop="financial_bank.name">
<el-input
size="small"
v-model="merData.financial_bank.name"
placeholder="请输入姓名"
class="selWidth"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="开户银行:" prop="financial_bank.bank">
<el-input
size="small"
v-model="merData.financial_bank.bank"
placeholder="请输入开户银行"
class="selWidth"
/>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="merData.financial_bank">
<el-col :span="12">
<el-form-item label="开户银行卡号:" prop="financial_bank.bank_code">
<el-input
size="small"
oninput ="value=value.replace(/[^\d]/g,'')"
v-model="merData.financial_bank.bank_code"
placeholder="请输入开户银行卡号"
class="selWidth"
/>
</el-form-item>
</el-col>
</el-row> </el-row>
</div> </div>
</el-tab-pane> </el-tab-pane>

View File

@ -15,6 +15,14 @@
<div>商户类型</div> <div>商户类型</div>
<div class="value">{{merData.is_trader == 1 ? "自营" : "非自营"}}</div> <div class="value">{{merData.is_trader == 1 ? "自营" : "非自营"}}</div>
</li> </li>
<li class="item">
<div>是否为惠美乡村:</div>
<div class="value">{{merData.is_huimei == 1 ? "是" : "否"}}</div>
</li>
<li class="item">
<div>是否为军人:</div>
<div class="value">{{merData.is_soldier == 1 ? "是" : "否"}}</div>
</li>
<li class="item"> <li class="item">
<div>商户分类</div> <div>商户分类</div>
<div v-if="merData.merchantCategory" class="value"> <div v-if="merData.merchantCategory" class="value">
@ -42,10 +50,39 @@
<div>更新时间</div> <div>更新时间</div>
<div class="value">{{merData.update_time}}</div> <div class="value">{{merData.update_time}}</div>
</li> </li>
<li class="item">
<div>每日提现额度</div>
<div class="value">{{merData.exchange_limit}}</div>
</li>
<li class="item"> <li class="item">
<div>备注</div> <div>备注</div>
<div class="value">{{merData.mark}}</div> <div class="value">{{merData.mark}}</div>
</li> </li>
<li class="item" style="align-content: center;">
<div>营业执照</div>
<el-image v-for="(item,index) in companyImage" :key="index" style="width: 60px;height: 60px;" :src="item" :preview-src-list="companyImage" />
</li>
</ul>
<div class="title" style="margin-top: 10px;">银行卡信息</div>
<ul class="list">
<li class="item">
<div>名称</div>
<div class="value">
{{merData.financial_bank&&merData.financial_bank.name}}
</div>
</li>
<li class="item">
<div>开户银行</div>
<div class="value">
{{merData.financial_bank&&merData.financial_bank.bank}}
</div>
</li>
<li class="item">
<div>开户卡号</div>
<div class="value">
{{merData.financial_bank&&merData.financial_bank.bank_code}}
</div>
</li>
</ul> </ul>
</div> </div>
</el-tab-pane> </el-tab-pane>
@ -72,6 +109,18 @@
{{merData.is_margin == 0 ? '无' : merData.ot_margin}} {{merData.is_margin == 0 ? '无' : merData.ot_margin}}
</div> </div>
</li> </li>
<li class="item">
<div>上架费</div>
<div class="value">
{{merData.is_goods == 0 ? '无' : merData.goods_cost}}
</div>
</li>
<li class="item">
<div>产品服务费</div>
<div class="value">
{{merData.is_service == 0 ? '无' : merData.service_cost}}
</div>
</li>
<li v-if="merData.is_margin != 0" class="item"> <li v-if="merData.is_margin != 0" class="item">
<div>保证金支付状态</div> <div>保证金支付状态</div>
<div class="value">{{merData.is_margin == 1 ? '待缴' : merData.is_margin == 0 ? '无' : '已缴' }} <div class="value">{{merData.is_margin == 1 ? '待缴' : merData.is_margin == 0 ? '无' : '已缴' }}
@ -294,6 +343,11 @@ export default {
}, },
filters: { filters: {
}, },
computed: {
companyImage(){
return this.merData.ext?.company_image
}
},
methods: { methods: {
lookImg(item) { lookImg(item) {
this.imageUrl = item; this.imageUrl = item;

View File

@ -105,7 +105,17 @@
highlight-current-row highlight-current-row
> >
<el-table-column prop="mer_id" label="ID" min-width="60" /> <el-table-column prop="mer_id" label="ID" min-width="60" />
<el-table-column prop="mer_name" label="商户名称" min-width="150" /> <el-table-column prop="mer_name" label="店铺名称" min-width="150" />
<el-table-column prop="is_huimei" label="是否惠美乡村" min-width="100">
<template slot-scope="scope">
<span>{{scope.row.is_huimei == 1 ? '是' : '否'}}</span>
</template>
</el-table-column>
<el-table-column prop="is_soldier" label="是否军人" min-width="80">
<template slot-scope="scope">
<span>{{scope.row.is_soldier == 1 ? '是' : '否'}}</span>
</template>
</el-table-column>
<el-table-column prop="real_name" label="商户姓名" min-width="150" /> <el-table-column prop="real_name" label="商户姓名" min-width="150" />
<el-table-column prop="status" label="推荐" min-width="100"> <el-table-column prop="status" label="推荐" min-width="100">
<template slot-scope="scope"> <template slot-scope="scope">

View File

@ -219,11 +219,11 @@
<el-button type="text" size="small" @click.native="onUserDetails(scope.row.uid)">{{scope.row.user&&scope.row.user.nickname +'/'+ scope.row.uid}}</el-button> <el-button type="text" size="small" @click.native="onUserDetails(scope.row.uid)">{{scope.row.user&&scope.row.user.nickname +'/'+ scope.row.uid}}</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="订单类型" min-width="80"> <!-- <el-table-column label="订单类型" min-width="80">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ scope.row.is_virtual == 1 ? "虚拟订单" : scope.row.order_type == 0 ? "普通订单" : "核销订单" }}</span> <span>{{ scope.row.is_virtual == 1 ? "虚拟订单" : scope.row.order_type == 0 ? "普通订单" : "核销订单" }}</span>
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column prop="real_name" label="收货人/订购人" min-width="120" /> <el-table-column prop="real_name" label="收货人/订购人" min-width="120" />
<el-table-column label="商户名称" min-width="100"> <el-table-column label="商户名称" min-width="100">
<template slot-scope="scope"> <template slot-scope="scope">
@ -290,7 +290,7 @@
<span>{{ scope.row.create_time }}</span> <span>{{ scope.row.create_time }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" min-width="80" fixed="right"> <el-table-column width="100px" label="操作" min-width="80" fixed="right" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-for="(val, i ) in scope.row.orderProduct" :key="i"> <span v-for="(val, i ) in scope.row.orderProduct" :key="i">
<el-button <el-button
@ -302,6 +302,7 @@
</span> </span>
<el-button type="text" size="small" @click="onOrderDetails(scope.row.order_id)">详情</el-button> <el-button type="text" size="small" @click="onOrderDetails(scope.row.order_id)">详情</el-button>
<!-- <el-button type="text" size="small" @click="onOrderOpenRefund(scope.row.order_id)">开启退款</el-button> --> <!-- <el-button type="text" size="small" @click="onOrderOpenRefund(scope.row.order_id)">开启退款</el-button> -->
<el-button type="text" size="small" @click="onOrderOpen(scope.row.order_id)">开启强制退款</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -346,7 +347,7 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com> // | Author: CRMEB Team <admin@crmeb.com>
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
import { orderListApi, chartApi, cardListApi, exportOrderApi,openRefundApi } from "@/api/order"; import { refundorderOpenApi,orderListApi, chartApi, cardListApi, exportOrderApi,openRefundApi } from "@/api/order";
import { merSelectApi } from "@/api/product"; import { merSelectApi } from "@/api/product";
import userDetails from '../../user/list/userDetails'; import userDetails from '../../user/list/userDetails';
import orderDetail from './orderDetails.vue'; import orderDetail from './orderDetails.vue';
@ -564,6 +565,10 @@ export default {
this.drawer = true; this.drawer = true;
// this.$refs.orderDetail.onOrderDetails(id); // this.$refs.orderDetail.onOrderDetails(id);
// this.$refs.orderDetail.onOrderLog(id); // this.$refs.orderDetail.onOrderLog(id);
},
// 退
onOrderOpen(id) {
this.$modalForm(refundorderOpenApi(id)).then(() => this.getList(''))
}, },
// 退 // 退
// onOrderOpenRefund(id) { // onOrderOpenRefund(id) {

View File

@ -393,6 +393,10 @@
<div>商户类别</div> <div>商户类别</div>
<div class="value">{{ orderDetailList.merchant.is_trader ? '自营' : '非自营' }}</div> <div class="value">{{ orderDetailList.merchant.is_trader ? '自营' : '非自营' }}</div>
</li> </li>
<li class="item">
<div>店铺电话</div>
<div class="value">{{ orderDetailList.merchant.service_phone }}</div>
</li>
</ul> </ul>
</div> </div>
</template> </template>

View File

@ -0,0 +1,112 @@
<template>
<div>
<div class="logistics acea-row row-top">
<div class="logistics_img"><img src="@/assets/images/expressi.jpg"></div>
<div class="logistics_cent">
<span>物流公司{{ logisticsName ? orderDatalist.delivery_type : orderDatalist.delivery_name }}</span>
<span>物流单号{{ orderDatalist.delivery_id }}</span>
</div>
</div>
<div class="acea-row row-column-around trees-coadd">
<div class="scollhide">
<el-timeline v-if="result.length>0">
<el-timeline-item v-for="(item,i) in result" :key="i">
<p class="time" v-text="item.time" />
<p class="content" v-text="item.status" />
</el-timeline-item>
</el-timeline>
</div>
</div>
</div>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEBCRMEB
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
export default {
name: 'Logistics',
props: {
orderDatalist: {
type: Object,
default: null
},
result: {
type: Array,
default: () => []
},
logisticsName: {
type: String,
default: ''
}
}
}
</script>
<style scoped lang="scss">
.title{
margin-bottom: 16px;
color: #17233d;
font-weight: 500;
font-size: 14px;
}
.description{
&-term {
display: table-cell;
padding-bottom: 10px;
line-height: 20px;
width: 50%;
font-size: 12px;
}
}
.logistics{
align-items: center;
padding: 10px 0px;
.logistics_img{
width: 45px;
height: 45px;
margin-right: 12px;
img{
width: 100%;
height: 100%;
}
}
.logistics_cent{
span{
display: block;
font-size: 12px;
}
}
}
.trees-coadd{
width: 100%;
height: 400px;
border-radius: 4px;
overflow: hidden;
.scollhide{
width: 100%;
height: 100%;
overflow: auto;
margin-left: 18px;
padding: 10px 0 10px 0;
box-sizing: border-box;
.content{
font-size: 12px;
}
.time{
font-size: 12px;
color: var(--prev-color-primary);
}
}
}
.scollhide::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
</style>

View File

@ -82,11 +82,11 @@
<span v-show="scope.row.is_del > 0" style="color: #ED4014;display: block;">用户已删除</span> <span v-show="scope.row.is_del > 0" style="color: #ED4014;display: block;">用户已删除</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="订单类型" min-width="100"> <!-- <el-table-column label="订单类型" min-width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ scope.row.order_type == 0 ? "普通订单" : "核销订单" }}</span> <span>{{ scope.row.order_type == 0 ? "普通订单" : "核销订单" }}</span>
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column label="商户名称" min-width="150"> <el-table-column label="商户名称" min-width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.merchant">{{ scope.row.merchant.mer_name }}</span> <span v-if="scope.row.merchant">{{ scope.row.merchant.mer_name }}</span>

View File

@ -153,6 +153,8 @@
size="small" size="small"
@click="onOrderDetail(scope.row.order.order_sn)" @click="onOrderDetail(scope.row.order.order_sn)"
>订单详情</el-button> >订单详情</el-button>
<el-button v-if="scope.row.status === 0" type="text" size="small" @click="onOrderStatus(scope.row.refund_order_id)">退款</el-button>
<el-button type="text" size="small" @click="onRefundOrderDetail(scope.row.refund_order_id)">退款单详情</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -170,6 +172,22 @@
</el-card> </el-card>
<!--导出订单列表--> <!--导出订单列表-->
<file-list ref="exportList" /> <file-list ref="exportList" />
<!--详情-->
<details-from ref="orderDetail" :order-datalist="orderDatalist" @get-logistics="openLogistics" />
<el-dialog
v-if="dialogLogistics"
title="物流查询"
:visible.sync="dialogLogistics"
width="350px"
:before-close="handleClose"
>
<logistics-from
v-if="orderDetails"
:order-datalist="orderDetails"
:result="result"
:logistics-name="logisticsName"
/>
</el-dialog>
</div> </div>
</template> </template>
@ -186,20 +204,26 @@
import { import {
refundorderListApi, refundorderListApi,
orderUpdateApi, orderUpdateApi,
refundorderStatusApi,
refundorderDetailApi,
refundorderExpressApi,
orderDeliveryApi, exportRefundOrderApi orderDeliveryApi, exportRefundOrderApi
} from "@/api/order"; } from "@/api/order";
import createWorkBook from '@/utils/newToExcel.js'; import createWorkBook from '@/utils/newToExcel.js';
import detailsFrom from './refundDetail'
import logisticsFrom from '../logistics'
import { fromList } from "@/libs/constants.js"; import { fromList } from "@/libs/constants.js";
import fileList from '@/components/exportFile/fileList' import fileList from '@/components/exportFile/fileList'
import { roterPre } from "@/settings"; import { roterPre } from "@/settings";
import timeOptions from '@/utils/timeOptions'; import timeOptions from '@/utils/timeOptions';
export default { export default {
components: { fileList }, components: { fileList,detailsFrom,logisticsFrom },
name: "OrderRefund", name: "OrderRefund",
data() { data() {
return { return {
pickerOptions: timeOptions, pickerOptions: timeOptions,
orderId: 0, orderId: 0,
logisticsName: 'refund',
roterPre: roterPre, roterPre: roterPre,
tableData: { tableData: {
data: [], data: [],
@ -232,6 +256,9 @@ export default {
dialogVisible: false, dialogVisible: false,
cardLists: [], cardLists: [],
orderDatalist: null, orderDatalist: null,
orderDetails: {},
result: [],
dialogLogistics:false
}; };
}, },
mounted() { mounted() {
@ -252,6 +279,45 @@ export default {
this.getList(''); this.getList('');
}, },
methods: { methods: {
// 退
onOrderStatus(id) {
this.$modalForm(refundorderStatusApi(id)).then(() => this.getList(''))
},
//
onRefundOrderDetail(id) {
this.orderId = id
this.$refs.orderDetail.dialogVisible = true
this.loading = true
refundorderDetailApi(id)
.then(res => {
this.orderDatalist = res.data
this.loading = false
this.$refs.orderDetail.onOrderLog(id)
})
.catch(({ message }) => {
this.loading = false
this.$message.error(message)
})
},
openLogistics(row) {
this.orderDetails = row
this.getOrderData(row.refund_order_id)
this.dialogLogistics = true
},
handleClose() {
this.dialogLogistics = false
this.dialogConfirm = false
},
//
getOrderData(id) {
refundorderExpressApi(id)
.then(async res => {
this.result = res.data
})
.catch(res => {
this.$message.error(res.message)
})
},
/**重置 */ /**重置 */
searchReset(){ searchReset(){
this.timeVal = [] this.timeVal = []

View File

@ -0,0 +1,192 @@
<template>
<el-dialog
v-if="orderDatalist"
v-loading="loading"
title="退款单信息"
:visible.sync="dialogVisible"
width="700px"
>
<div class="description">
<div class="title">用户信息</div>
<div class="acea-row">
<div class="description-term">用户昵称{{ orderDatalist.user.nickname }}</div>
<div class="description-term">退货人{{ orderDatalist.order.real_name }}</div>
<div class="description-term">联系电话{{ orderDatalist.order.user_phone }}</div>
<div class="description-term">退货地址{{ orderDatalist.order.user_address }}</div>
<div class="description-term">备注{{ orderDatalist.mark }}</div>
</div>
<el-divider />
<div class="title">{{orderDatalist.refund_type == 1 ? '退款信息' : '退回商品信息'}}</div>
<div class="acea-row">
<div class="description-term">订单编号{{ orderDatalist.order.order_sn }}</div>
<div class="description-term">订单状态{{ orderDatalist.status | orderRefundFilter }}</div>
<div class="description-term100">退款单号{{ orderDatalist.refund_order_sn }}</div>
<div class="description-term100">退款商品名称
<div class="product_name">
<div v-for="(item,index) in orderDatalist.refundProduct" :key="index">
<span v-if="item.product && item.product.cart_info && item.product.cart_info.product">{{item.product.cart_info.product.store_name}}</span>
</div>
</div>
</div>
<div class="description-term">退款发起方{{ orderDatalist.create_user }}</div>
<div class="description-term">退款商品件数{{ orderDatalist.refund_num }}</div>
<div class="description-term">退款总金额{{ orderDatalist.refund_price }}</div>
<div v-if="orderDatalist.delivery_id" class="description-term">退货快递单号{{ orderDatalist.delivery_id }}</div>
<div class="description-term">创建时间{{ orderDatalist.create_time }}</div>
<div class="description-term">商家备注{{ orderDatalist.mer_mark }}</div>
<div class="description-term100">退款凭证
<div class="product_name" style="margin-left: 70px;">
<div class="demo-image__preview">
<el-image
v-for="(item,index) in orderDatalist.pics"
:key="index"
:src="item"
class="mr5"
:preview-src-list="[item]"
/>
</div>
</div>
</div>
</div>
<el-divider />
<div class="title">订单记录</div>
<el-table v-loading="LogLoading" border :data="tableDataLog.data" style="width: 100%">
<el-table-column prop="order_id" align="center" label="退款单ID" min-width="80" />
<el-table-column prop="change_message" label="操作记录" align="center" min-width="280" />
<el-table-column prop="change_time" label="操作时间" align="center" min-width="280" />
</el-table>
<div class="block">
<el-pagination
:page-size="tableFromLog.limit"
:current-page="tableFromLog.page"
layout="prev, pager, next, jumper"
:total="tableDataLog.total"
@size-change="handleSizeChangeLog"
@current-change="pageChangeLog"
/>
</div>
<el-divider />
<div v-if="(orderDatalist.status == 2 || orderDatalist.status == 3) && orderDatalist.refund_type == 2">
<div class="title">退货物流信息</div>
<div class="acea-row">
<div class="description-term">
快递公司{{ orderDatalist.delivery_type }}
<el-button size="small" type="text" style="margin-left: 10px;" @click="getLoginstics">物流查询</el-button>
</div>
<div class="description-term">快递单号{{ orderDatalist.delivery_id }}</div>
</div>
</div>
</div>
</el-dialog>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEBCRMEB
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import {
refundorderLogApi
} from '@/api/order'
export default {
name: 'OrderDetail',
props: {
orderDatalist: {
type: Object,
default: null
}
},
data() {
return {
dialogVisible: false,
LogLoading: false,
// orderDatalist: null,
loading: false,
listLoading: true,
order_id: '',
tableDataLog: {
data: [],
total: 0,
},
tableFromLog: {
page: 1,
limit: 5
},
}
},
mounted() {
},
methods: {
//
onOrderLog(id) {
this.LogLoading = true
this.order_id = id;
refundorderLogApi(id, this.tableFromLog)
.then(res => {
this.tableDataLog.data = res.data.list
this.tableDataLog.total = res.data.count
this.LogLoading = false
})
.catch(res => {
this.$message.error(res.message)
this.LogLoading = false
})
},
/**查看物流 */
getLoginstics(){
this.$emit('get-logistics',this.orderDatalist)
},
pageChangeLog(page) {
this.tableFromLog.page = page
this.onOrderLog(this.order_id)
},
handleSizeChangeLog(val) {
this.tableFromLog.limit = val
this.onOrderLog(this.order_id)
},
}
}
</script>
<style scoped lang="scss">
.title{
margin-bottom: 16px;
color: #17233d;
font-weight: 500;
font-size: 14px;
}
.description{
&-term {
display: table-cell;
padding-bottom: 10px;
line-height: 20px;
width: 50%;
font-size: 12px;
}
}
.description-term100{
display: table-cell;
padding-bottom: 10px;
line-height: 20px;
width: 100%;
font-size: 12px;
}
.product_name{
margin-left: 90px;
position: relative;
top: -20px;
}
.demo-image__preview {
.el-image,img{
width: 40px;
height: 40px;
}
}
</style>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="divBox"> <div class="divBox">
<div class="selCard"> <div class="selCard">
<el-form inline size="small" :model="tableFrom" ref="searchForm" label-width="85px"> <el-form inline size="small" :model="tableFrom" ref="searchForm" label-width="103px">
<el-form-item label="商品分类:" prop="pid"> <el-form-item label="商品分类:" prop="pid">
<el-cascader v-model="tableFrom.pid" class="selWidth" :options="merCateList" :props="{ checkStrictly: true, emitPath:false }" clearable @change="getList(1)" /> <el-cascader v-model="tableFrom.pid" class="selWidth" :options="merCateList" :props="{ checkStrictly: true, emitPath:false }" clearable @change="getList(1)" />
</el-form-item> </el-form-item>
@ -43,8 +43,8 @@
<el-option v-for="item in recommendList" :key="item.value" :label="item.name" :value="item.value" /> <el-option v-for="item in recommendList" :key="item.value" :label="item.name" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="商品类型:" prop="is_ficti"> <el-form-item label="商品类型:" prop="audit_type">
<el-select v-model="tableFrom.is_ficti" placeholder="请选择" class="filter-item selWidth" clearable @change="getList(1)"> <el-select v-model="tableFrom.audit_type" placeholder="请选择" class="filter-item selWidth" clearable @change="getList(1)">
<el-option v-for="item in productTypeList" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in productTypeList" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -67,6 +67,12 @@
clearable clearable
/> />
</el-form-item> </el-form-item>
<el-form-item label="是否惠美乡村:" prop="us_status">
<el-select v-model="tableFrom.is_huimei" placeholder="请选择" class="filter-item selWidth" clearable @change="getList(1)">
<el-option label="是" value="1" />
<el-option label="否" value="0" />
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" size="small" @click="getList(1)">搜索</el-button> <el-button type="primary" size="small" @click="getList(1)">搜索</el-button>
<el-button size="small" @click="searchReset()">重置</el-button> <el-button size="small" @click="searchReset()">重置</el-button>
@ -78,7 +84,7 @@
<el-tab-pane v-for="(item,index) in headeNum" :key="index" :name="item.type.toString()" :label="item.name +'('+item.count +')' " /> <el-tab-pane v-for="(item,index) in headeNum" :key="index" :name="item.type.toString()" :label="item.name +'('+item.count +')' " />
</el-tabs> </el-tabs>
<div class="mt5 mb20"> <div class="mt5 mb20">
<el-button v-show="tableFrom.type === '6'" size="small" :disabled="multipleSelection.length==0" @click="batch">批量审核</el-button> <!-- <el-button v-show="tableFrom.type === '6'" size="small" :disabled="multipleSelection.length==0" @click="batch">批量审核</el-button> -->
<el-button size="small" :disabled="multipleSelection.length==0 " @click="batchOff">批量强制下架</el-button> <el-button size="small" :disabled="multipleSelection.length==0 " @click="batchOff">批量强制下架</el-button>
<el-button size="small" :disabled="multipleSelection.length==0 " @click="batchShow(0)">批量不显示</el-button> <el-button size="small" :disabled="multipleSelection.length==0 " @click="batchShow(0)">批量不显示</el-button>
<el-button size="small" :disabled="multipleSelection.length==0 " @click="batchShow(1)">批量显示</el-button> <el-button size="small" :disabled="multipleSelection.length==0 " @click="batchShow(1)">批量显示</el-button>
@ -118,6 +124,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="product_id" label="ID" min-width="80" /> <el-table-column prop="product_id" label="ID" min-width="80" />
<el-table-column prop="audit_type" label="商品类型" min-width="80">
<template slot-scope="scope">
{{ productTypeList[scope.row.audit_type].label }}
</template>
</el-table-column>
<el-table-column label="商品图" min-width="70"> <el-table-column label="商品图" min-width="70">
<template slot-scope="scope"> <template slot-scope="scope">
<div class="demo-image__preview"> <div class="demo-image__preview">
@ -135,12 +146,18 @@
<span>{{ scope.row.merchant ? scope.row.merchant.mer_name : '' }}</span> <span>{{ scope.row.merchant ? scope.row.merchant.mer_name : '' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="商家备注" min-width="100" />
<el-table-column label="是否惠美乡村产品" min-width="100">
<template slot-scope="scope">
<span>{{ scope.row.is_huimei ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column prop="price" label="商品售价" min-width="80" /> <el-table-column prop="price" label="商品售价" min-width="80" />
<el-table-column prop="sales" label="销量" min-width="70" /> <el-table-column prop="sales" label="销量" min-width="70" />
<el-table-column prop="stock" label="库存" min-width="70" /> <el-table-column prop="stock" label="库存" min-width="70" />
<el-table-column prop="is_audited" label="待审核类型" min-width="80"> <el-table-column prop="is_audited" label="待审核类型" min-width="80">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.is_audited?'上架商品修改':'首次提报'}} {{ auditedList[scope.row.is_audited] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="推荐级别" min-width="150"> <el-table-column label="推荐级别" min-width="150">
@ -149,7 +166,7 @@
</el-rate> </el-rate>
</template> </template>
</el-table-column> </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="rank" label="排序" min-width="60" />
<el-table-column prop="status" label="是否显示" min-width="80"> <el-table-column prop="status" label="是否显示" min-width="80">
<template slot-scope="scope"> <template slot-scope="scope">
@ -162,10 +179,10 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="create_time" label="创建时间" min-width="120" /> <el-table-column prop="create_time" label="创建时间" min-width="120" />
<el-table-column v-if="Number(tableFrom.type) < 7" key="8" label="操作" min-width="180" fixed="right"> <el-table-column v-if="Number(tableFrom.type) != 7" key="8" label="操作" min-width="210" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small" @click="onDetails(scope.row.product_id)">详情</el-button> <el-button type="text" size="small" @click="onDetails(scope.row.product_id)">详情</el-button>
<el-button v-if="tableFrom.type === '6'" type="text" size="small" @click.native="toExamine(scope.row.product_id)">审核</el-button> <el-button v-if="tableFrom.type === '6' || tableFrom.type === '10' || tableFrom.type === '11'" type="text" size="small" @click.native="toExamine(scope.row.product_id)">{{ getStatusName(scope.row.status) }}</el-button>
<el-button type="text" size="small" class="mr10" @click="handlePreview(scope.row.product_id)">预览</el-button> <el-button type="text" size="small" class="mr10" @click="handlePreview(scope.row.product_id)">预览</el-button>
<el-dropdown> <el-dropdown>
<span class="el-dropdown-link"> <span class="el-dropdown-link">
@ -196,6 +213,13 @@
<el-form-item label="商品名称:" prop="store_name"> <el-form-item label="商品名称:" prop="store_name">
<el-input v-model="formValidate.store_name" size="small" placeholder="请输入商品名称" /> <el-input v-model="formValidate.store_name" size="small" placeholder="请输入商品名称" />
</el-form-item> </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-form-item label="星级推荐:">
<el-rate class="rate_star" v-model="formValidate.star" :colors="colors" style="margin-top: 4px;"></el-rate> <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> <span style="margin-top: 4px; font-size: 12px;">备注5星为最高推荐级别1星为最低推荐级别设置后会在商城商品列表搜索商品列表中体现</span>
@ -208,6 +232,52 @@
<el-form-item label="排序:"> <el-form-item label="排序:">
<el-input-number v-model="formValidate.rank" size="small" placeholder="请输入排序序号" style="width: 200px;" /> <el-input-number v-model="formValidate.rank" size="small" placeholder="请输入排序序号" style="width: 200px;" />
</el-form-item> </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-col :span="24">
<el-form-item label="商品详情:"> <el-form-item label="商品详情:">
<ueditor-from v-model="formValidate.content" :content="formValidate.content" /> <ueditor-from v-model="formValidate.content" :content="formValidate.content" />
@ -333,9 +403,7 @@ export default {
}, },
data() { data() {
return { return {
props: { props: { emitPath: false },
emitPath: false
},
pickerOptions: timeOptions, pickerOptions: timeOptions,
timeVal: [], timeVal: [],
ruleValidate: { ruleValidate: {
@ -345,6 +413,7 @@ export default {
trigger: "blur" trigger: "blur"
},] },]
}, },
dialogVisible: false, dialogVisible: false,
dialogRecommend: false, dialogRecommend: false,
append: true, append: true,
@ -359,6 +428,7 @@ export default {
{ label: "2星", value: 2 }, { label: "2星", value: 2 },
{ label: "1星", value: 1 } { label: "1星", value: 1 }
], ],
auditedList:['首次提报','非首次提报','首次修改'],
recommend: proOptions, recommend: proOptions,
recommendList: [{ recommendList: [{
name: '热门榜单', name: '热门榜单',
@ -384,7 +454,10 @@ export default {
store_name: '', store_name: '',
rank: '', rank: '',
us_status: '', us_status: '',
star: '' star: '',
keyword:'',
cate_id:0,
slider_image: [],
}, },
productStatusList: [ productStatusList: [
{ label: "上架显示", value: 1 }, { label: "上架显示", value: 1 },
@ -392,9 +465,9 @@ export default {
{ label: "平台关闭", value: -1 }, { label: "平台关闭", value: -1 },
], ],
productTypeList: [ productTypeList: [
{ label: '普通商品', value: 0 }, { label: '食品及保健品', value: 0 },
{ label: '虚拟商品', value: 1 }, { label: '化妆品及日化品', value: 1 },
{ label: '卡密商品', value: 2 } { label: '其他品类', value: 2 }
], ],
fullscreenLoading: false, fullscreenLoading: false,
isShow: false, isShow: false,
@ -412,6 +485,7 @@ export default {
sys_labels: '', sys_labels: '',
pid: '', pid: '',
store_name: '', store_name: '',
audit_type:'',
type: '6', type: '6',
mer_id: '', mer_id: '',
keyword: '', keyword: '',
@ -449,6 +523,16 @@ export default {
this.getLabelLst() this.getLabelLst()
}, },
methods: { methods: {
getStatusName(val){
switch (val) {
case 0:
return '初始审核';
case 10:
return '二次审核';
case 11:
return '最终审核';
}
},
// //
onchangeTime(e) { onchangeTime(e) {
this.timeVal = e this.timeVal = e
@ -466,6 +550,35 @@ export default {
this.getList('') this.getList('')
this.getLstFilterApi() 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) { onchangeIsShow(row) {
changeApi(row.product_id, row.is_used).then(({ changeApi(row.product_id, row.is_used).then(({
message message
@ -502,12 +615,36 @@ export default {
sys_labels: row.sys_labels sys_labels: row.sys_labels
} }
}, },
handleRemove(i) {
this.formValidate.slider_image.splice(i, 1);
},
// //
onDetails(id) { onDetails(id) {
this.product_id = id; this.product_id = id;
this.drawer = true; this.drawer = true;
this.$refs.proDetail.getInfo(id) 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) { changeDrawer(v) {
this.drawer = v; this.drawer = v;
}, },
@ -565,7 +702,10 @@ export default {
content: info.content, content: info.content,
store_name: info.store_name, store_name: info.store_name,
rank: info.rank, 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_benefit === 1) this.checkboxGroup.push('is_benefit')
if(info.is_hot === 1) this.checkboxGroup.push('is_hot') if(info.is_hot === 1) this.checkboxGroup.push('is_hot')
@ -703,8 +843,8 @@ export default {
}, },
batch() { batch() {
if(this.multipleSelection.length === 0) return this.$message.warning('请先选择商品') if(this.multipleSelection.length === 0) return this.$message.warning('请先选择商品')
this.$refs.infoFrom.dialogVisible = true
this.isShow = false this.isShow = false
this.$refs.infoFrom.dialogVisible = true
}, },
handleSelectionChange(val) { handleSelectionChange(val) {
this.multipleSelection = val this.multipleSelection = val
@ -771,6 +911,26 @@ export default {
height: 100%; height: 100%;
background: rgba(0, 0, 0, 0.1); 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{ .tags_name{
font-size: 10px; font-size: 10px;
height: 16px; height: 16px;

View File

@ -4,7 +4,8 @@
title="商品审核" title="商品审核"
:visible.sync="dialogVisible" :visible.sync="dialogVisible"
:append-to-body='isAppend' :append-to-body='isAppend'
width="860px" width="1260px"
top="60px"
:before-close="handleClose" :before-close="handleClose"
class="projectInfo" class="projectInfo"
> >
@ -22,27 +23,28 @@
/> />
</div> </div>
</span> </span>
<span class="sp">联系人电话{{ projectData.unit_name }}</span> <span class="sp">联系人电话{{ projectData.unit_name }}</span>
<span class="sp" v-if="projectData.refusal">上传拒绝原因{{ projectData.refusal }}</span>
</div> </div>
<el-tabs v-if="projectData && isShow" v-model="activeNames" v-loading="loading">
<el-tab-pane label="商品信息" name="first">
<div class="acea-row"> <div class="acea-row">
<span class="sp">商品id{{ projectData.product_id }}</span>
<span class="sp">商品名称{{ projectData.store_name }}</span> <span class="sp">商品名称{{ projectData.store_name }}</span>
<span class="sp">平台分类{{ projectData.storeCategory?projectData.storeCategory.cate_name:'' }}</span> <span class="sp">平台分类{{ projectData.storeCategory?projectData.storeCategory.cate_name:'' }}</span>
<span class="sp">品牌{{ projectData.brand?projectData.brand.brand_name:'其他' }}</span> <span class="sp">品牌{{ projectData.brand?projectData.brand.brand_name:'其他' }}</span>
<span class="sp">商品关键字{{ projectData.keyword }}</span> <span class="sp">商品关键字{{ projectData.keyword }}</span>
<span class="sp">商品单位{{ projectData.unit_name }}</span> <span class="sp">商品单位{{ projectData.unit_name }}</span>
<span class="sp" v-if="projectData.temp && projectData.temp.name">运费模板{{ projectData.temp?projectData.temp.name:'' }}</span> <span class="sp">
<span class="sp100" v-if="projectData.temp && projectData.temp.info">运费说明{{ projectData.temp?projectData.temp.info:'' }}</span>
<span class="sp100">
商品分类 商品分类
<template v-if="projectData.merCateId"> <template v-if="projectData.merCateId">
<span v-for="(item, index) in projectData.merCateId" :key="index" class="mr10">{{ item.category?item.category.cate_name:'' }}</span> <span v-for="(item, index) in projectData.merCateId" :key="index" class="mr10">{{ item.category?item.category.cate_name:'' }}</span>
</template> </template>
<span v-else>-</span> <span v-else>-</span>
</span> </span>
<span class="sp100">商品简介{{ projectData.store_info }}</span> <span class="sp">商品简介{{ projectData.store_info }}</span>
<span class="sp">商品备注{{ projectData.remark }}</span>
<span class="sp">是否惠美乡村{{ projectData.is_huimei?'是':'否' }}</span>
<span class="sp100"> <span class="sp100">
商品封面图 商品封面图
<div class="demo-image__preview"> <div class="demo-image__preview">
@ -53,6 +55,13 @@
/> />
</div> </div>
</span> </span>
</div>
<el-tabs v-if="projectData && isShow" v-model="activeNames" v-loading="loading">
<el-tab-pane label="商品信息" name="first">
<div class="acea-row">
<span class="sp" v-if="projectData.temp && projectData.temp.name">运费模板{{ projectData.temp?projectData.temp.name:'' }}</span>
<span class="sp100" v-if="projectData.temp && projectData.temp.info">运费说明{{ projectData.temp?projectData.temp.info:'' }}</span>
<span v-if="projectData.video_link" class="sp100"> <span v-if="projectData.video_link" class="sp100">
主图视频 主图视频
<video style="width:40%;height: 180px;border-radius: 10px;" :src="projectData.video_link" controls="controls"> <video style="width:40%;height: 180px;border-radius: 10px;" :src="projectData.video_link" controls="controls">
@ -95,7 +104,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.businessList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -113,7 +122,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.trademarkList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -131,7 +140,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.authorizedList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -149,7 +158,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.commodityList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -167,7 +176,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.otherList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -188,7 +197,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.importBusinessList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -206,7 +215,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.importAuthorizedList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -224,7 +233,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.customsList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -242,7 +251,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.packingList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -260,7 +269,7 @@
<el-image <el-image
style="width: 60px; height: 60px;" style="width: 60px; height: 60px;"
:src="item.url" :src="item.url"
:preview-src-list="qualification.importOtherList" :preview-src-list="[item.url]"
/> />
</div> </div>
</div> </div>
@ -300,6 +309,7 @@
<el-image <el-image
style="width: 60px; height: 60px" style="width: 60px; height: 60px"
:src="scope.row.image" :src="scope.row.image"
:preview-src-list="[scope.row.image]"
/> />
</div> </div>
</template> </template>
@ -368,7 +378,38 @@
<el-radio :label="-1">拒绝</el-radio> <el-radio :label="-1">拒绝</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </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 <div
class="upLoadPicBox" class="upLoadPicBox"
title="750*750px" title="750*750px"
@ -381,7 +422,7 @@
<i class="el-icon-camera cameraIconfont" /> <i class="el-icon-camera cameraIconfont" />
</div> </div>
</div> </div>
</el-form-item> </el-form-item> -->
<el-form-item v-if="ruleForm.status===-1" label="原因" prop="refusal"> <el-form-item v-if="ruleForm.status===-1" label="原因" prop="refusal">
<el-input v-model="ruleForm.refusal" type="textarea" placeholder="请输入原因" /> <el-input v-model="ruleForm.refusal" type="textarea" placeholder="请输入原因" />
</el-form-item> </el-form-item>
@ -403,7 +444,7 @@
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com> // | Author: CRMEB Team <admin@crmeb.com>
// +---------------------------------------------------------------------- // +----------------------------------------------------------------------
import { productDetailApi, productStatusApi } from '@/api/product' import { productDetailApi, productStatusApi,productStatusFirstApi,productStatusSecondApi } from '@/api/product'
const defaultObj = { const defaultObj = {
image: '', image: '',
slider_image: [], slider_image: [],
@ -486,7 +527,7 @@ export default {
{ required: true, message: '请填写拒绝原因', trigger: 'blur' } { required: true, message: '请填写拒绝原因', trigger: 'blur' }
], ],
status_img: [ status_img: [
{ required: true, message: '请上传佐证图片', trigger: 'blur' } {type: 'array', required: true, message: '请上传佐证图片', trigger: 'blur' }
] ]
}, },
isAppend: true, isAppend: true,
@ -513,7 +554,7 @@ export default {
refusal: '', refusal: '',
status: 1, status: 1,
id: '', id: '',
status_img:'' status_img:[]
}, },
formThead: Object.assign({}, objTitle), formThead: Object.assign({}, objTitle),
manyTabDate: {}, manyTabDate: {},
@ -543,6 +584,30 @@ export default {
} }
}, },
methods: { 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){ getType(val){
var regex = /(?:\.([^.]+))?$/; var regex = /(?:\.([^.]+))?$/;
let suffix = regex.exec(val.url)[1] let suffix = regex.exec(val.url)[1]
@ -553,14 +618,45 @@ export default {
const _this = this; const _this = this;
const attr = []; const attr = [];
this.$modalUpload(function(img) { this.$modalUpload(function(img) {
console.log(_this.ruleForm);
if (tit === "1" && !num) { if (tit === "1" && !num) {
_this.ruleForm.status_img = img[0]; _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); }, tit);
}, },
onSubmit() { onSubmit() {
console.log(this.projectData);
let mode = {
0: {
'api': productStatusFirstApi,
'status':10
},
10: {
'api': productStatusSecondApi,
'status':11
},
11: {
'api': productStatusApi,
'status':1
}
}
this.$refs.ruleForm.validate(valid=>{
if(valid){
this.isShow ? this.ruleForm.id = this.proId : this.ruleForm.id = this.ids this.isShow ? this.ruleForm.id = this.proId : this.ruleForm.id = this.ids
productStatusApi(this.ruleForm).then(res => { let params = {
...this.ruleForm,
status: this.ruleForm.status==-1?-1:mode[this.projectData.status].status,
}
mode[this.projectData.status].api(params).then(res => {
this.$message.success(res.message) this.$message.success(res.message)
this.dialogVisible = false this.dialogVisible = false
this.activeNames = 'first' this.activeNames = 'first'
@ -569,6 +665,8 @@ export default {
this.listLoading = false this.listLoading = false
this.$message.error(res.message) this.$message.error(res.message)
}) })
}
})
}, },
handleClose() { handleClose() {
this.dialogVisible = false this.dialogVisible = false
@ -577,9 +675,10 @@ export default {
getInfo(id) { getInfo(id) {
this.proId = id this.proId = id
this.loading = true this.loading = true
this.ruleForm.status_img = '' this.ruleForm.status_img = []
productDetailApi(id).then(res => { productDetailApi(id).then(res => {
this.projectData = res.data this.projectData = res.data,
this.ruleForm.status_img = res.data.status_img
let qualification={ let qualification={
production_name: '', production_name: '',
businessList: [], businessList: [],
@ -634,6 +733,26 @@ export default {
.projectInfo ::v-deep .el-dialog__body{ .projectInfo ::v-deep .el-dialog__body{
padding-top: 0 !important; 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{ .upload{
display: flex; display: flex;
flex-direction: row; flex-direction: row;

View File

@ -48,11 +48,23 @@
<ul class="list"> <ul class="list">
<li class="item item100"> <li class="item item100">
<div class="item-title">封面图</div> <div class="item-title">封面图</div>
<img :src="productData.image" style="width:40px;height:40px;margin-right:12px;"/> <!-- <img :src="productData.image" style="width:40px;height:40px;margin-right:12px;"/> -->
<el-image
style="width: 60px; height: 60px"
:src="productData.image"
:preview-src-list="[productData.image]"
/>
</li> </li>
<li class="item item100"> <li class="item item100">
<div class="item-title">轮播图</div> <div class="item-title">轮播图</div>
<img v-for="(pic,idx) in productData.slider_image" :key="idx" :src="pic" style="width:40px;height:40px;margin-right:12px;"/> <el-image
v-for="(pic,idx) in productData.slider_image"
style="width: 60px; height: 60px"
:key="idx"
:src="pic"
:preview-src-list="productData.slider_image"
/>
<!-- <img v-for="(pic,idx) in productData.slider_image" :key="idx" :src="pic" style="width:40px;height:40px;margin-right:12px;"/> -->
</li> </li>
</ul> </ul>
<li class="item item100"> <li class="item item100">
@ -133,6 +145,18 @@
</li> </li>
</ul> </ul>
</div> </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="section" style="margin-top: 50px;">
<div class="title">规格列表</div> <div class="title">规格列表</div>
<div class="list"> <div class="list">
@ -144,6 +168,7 @@
<el-image <el-image
style="width: 60px; height: 60px" style="width: 60px; height: 60px"
:src="scope.row.image" :src="scope.row.image"
:preview-src-list="[scope.row.image]"
/> />
</div> </div>
</template> </template>
@ -484,6 +509,200 @@
<el-pagination :page-size="recordForm.limit" :current-page="recordForm.page" layout="prev, pager, next, jumper" :total="recordData.total" @size-change="handleSizeChange" @current-change="pageChange" /> <el-pagination :page-size="recordForm.limit" :current-page="recordForm.page" layout="prev, pager, next, jumper" :total="recordData.total" @size-change="handleSizeChange" @current-change="pageChange" />
</div> </div>
</div> </div>
</el-tab-pane>
<el-tab-pane label="资质信息" name="aptitude">
<span class="sp">商品名称
<el-radio-group v-model="qualification.commodity_type">
<el-radio :label="0" class="radio" :disabled="qualification.commodity_type==1">国产</el-radio>
<el-radio :label="1" :disabled="qualification.commodity_type==0">进口</el-radio>
</el-radio-group>
</span>
<div v-if="qualification.commodity_type == 0">
<span class="sp">生产企业名称{{ qualification.production_name }}</span>
<span class="upload">
<div class="upload_left">生产营业执照</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.businessList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">商标注册证</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.trademarkList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">销售授权及其他</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.authorizedList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">商品检测报告</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.commodityList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">其他资质</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.otherList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
</div>
<div v-if="qualification.commodity_type == 1">
<span class="sp">进口/企业境内总代企业名称: {{ qualification.import_name }}</span>
<span class="upload">
<div class="upload_left">生产营业执照</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.importBusinessList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">销售授权及其他</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.importAuthorizedList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">海关检验检疫证书及报关单</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.customsList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">产品外包装实物图</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.packingList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
<span class="upload">
<div class="upload_left">其他资质</div>
<div class="upload_right">
<div
v-for="(item,index) in qualification.importOtherList"
:key="index"
>
<a class="txt" v-if="getType(item)" :href="item.url" target="downloadFile" download>{{ item.name }}</a>
<div class="pictrue" v-else>
<el-image
style="width: 60px; height: 60px;"
:src="item.url"
:preview-src-list="[item.url]"
/>
</div>
</div>
</div>
</span>
</div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
@ -575,6 +794,23 @@ export default {
return { return {
loading: true, loading: true,
productId: '', productId: '',
qualification:{
production_name: '',
businessList: [],
licenceList: [],
trademarkList: [],
authorizedList: [],
commodityList: [],
otherList: [],
importBusinessList: [],
importAuthorizedList: [],
customsList: [],
packingList: [],
importOtherList: [],
commodity_type: 0,
brands_name: '',
import_name: ''
},
direction: 'rtl', direction: 'rtl',
activeName: 'basic', activeName: 'basic',
productData: {}, productData: {},
@ -617,6 +853,11 @@ export default {
filters: { filters: {
}, },
methods: { methods: {
getType(val){
var regex = /(?:\.([^.]+))?$/;
let suffix = regex.exec(val.url)[1]
return suffix == 'pdf'
},
handleClose() { handleClose() {
this.activeName = 'basic'; this.activeName = 'basic';
this.$emit('closeDrawer'); this.$emit('closeDrawer');
@ -627,6 +868,7 @@ export default {
productDetailApi(id).then(res => { productDetailApi(id).then(res => {
this.loading = false; this.loading = false;
this.productData = res.data this.productData = res.data
this.qualification = res.data.qualification
this.mer_svip_status = res.data.mer_svip_status this.mer_svip_status = res.data.mer_svip_status
this.svip_type = res.data.svip_price_type this.svip_type = res.data.svip_price_type
if (this.productData.spec_type === 0) { if (this.productData.spec_type === 0) {
@ -764,6 +1006,40 @@ export default {
} }
} }
} }
.sp {
display: block;
// width: 33%;
margin-bottom: 20px;
}
.upload{
display: flex;
flex-direction: row;
// align-content: center;
align-items: center;
height: 60px;
// line-height: 60px;
margin-bottom: 20px;
&_right{
display: flex;
height: 60px;
}
&_left{
width: 115px;
}
.txt{
width: 60px;
height: 60px;
line-height: 60px;
overflow: hidden;
display: inline-block;
text-overflow: ellipsis;
white-space: nowrap;
border: 1px solid #DCDFE6;
border-radius: 4px;
margin-right: 10px;
color: blue;
}
}
.tabNumWidth{ .tabNumWidth{
max-height: 350px; max-height: 350px;
overflow-y: auto; overflow-y: auto;