This commit is contained in:
qiaopengfei 2024-08-03 15:22:01 +08:00
parent cf81f2265e
commit 271c9beb73
37 changed files with 1257 additions and 10245 deletions

View File

@ -0,0 +1,2 @@
import request from '@axioshooks'

View File

@ -7,19 +7,11 @@ export function select_by_conditions(data) {
data
})
}
// 编辑商品(查询)
export function get_commodity_id(data) {
return request({
url: `xy_openapi/commodity_info/get_commodity_id/${data}`,
method: 'get',
data
})
}
// 编辑商品
export function edit_product(data) {
return request({
url: `xy_openapi/commodity_info/edit_product`,
method: 'put',
url: `xy_openapi/commodity_info/edit_product/${data}`,
method: 'get',
data
})
}

View File

@ -1,75 +0,0 @@
/*
* @Author: your name
* @Date: 2021-06-15 15:51:08
* @LastEditTime: 2021-06-15 16:28:45
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \aiguo_erp_vue\src\api\configuration.js
*/
import request from '@axioshooks';
// 配件分类列表
export function cancel_draw_money(data) {
return request({
url: 'ag_server/cancel_draw_money',
method: 'post',
data
})
}
// 商户列表
export function service_provider_list(data) {
return request({
url: 'ag_server/service_provider_list',
method: 'post',
data
})
}
// 编辑增加用户
export function service_provider_edit(data) {
return request({
url: 'ag_server/service_provider_edit',
method: 'post',
data
})
}
// 获取爱果服务费
export function get_ag_service(data) {
return request({
url: 'ag_server/get_ag_service',
method: 'post',
data
})
}
//搜索账号
export function search_account(data) {
return request({
url: 'ag_server/search_account',
method: 'post',
data
})
}
//批量开启免检
export function batch_start_exemption(data) {
return request({
url: 'ag_server/batch_start_exemption',
method: 'post',
data
})
}
//批量关闭免检
export function batch_stop_exemption(data) {
return request({
url: 'ag_server/batch_stop_exemption',
method: 'post',
data
})
}
//批量关闭免检
export function get_search_company(data) {
return request({
url: 'payment/company_id_search',
method: 'post',
data
})
}

View File

@ -1,37 +0,0 @@
import request from '@axioshooks';
//站点运营数据统计
export function site_operation_data_statistics(data) {
return request({
url: 'ag_server/site_operation_data_statistics',
method: 'post',
data
})
}
//站点运营数据详情
export function site_operation_data_details(data) {
return request({
url: 'ag_server/site_operation_data_details',
method: 'post',
data
})
}
//闲鱼账号
export function get_site_account(data) {
return request({
url: 'xy/get_site_account',
method: 'post',
data
})
}
//服务商列表
export function service_provider_list(data) {
return request({
url: 'ag_server/service_provider_list',
method: 'post',
data
})
}

View File

@ -0,0 +1,9 @@
import request from '@axioshooks'
// 获取订单管理列表
export function order_info(data) {
return request({
url: 'xy_openapi/api/order_info/select_by_conditions',
method: 'post',
data
})
}

View File

@ -1,611 +0,0 @@
import request from '@axioshooks'
/*客户数据*/
export function Warehousing(data) {
return request({
url: 'customer/get_datas',
method: 'get',
})
}
/*业务员下拉框数据*/
export function salesman(data) {
return request({
url: 'salesman/get_datas',
method: 'post',
data
})
}
/*机器列表品牌*/
export function filter_brand_list(data) {
return request({
url: 'brand/filter_brand_list',
method: 'post',
data
})
}
/*品牌*/
export function get_datas(data) {
return request({
url: 'brand/get_datas',
method: 'post',
data
})
}
/*品牌*/
export function filter_all_brand_list(data) {
return request({
url: 'brand/filter_all_brand_list',
method: 'post',
data
})
}
/*适用品牌*/
export function cate_brand_list_all(data) {
return request({
url: 'brand/cate_brand_list_all',
method: 'post',
data
})
}
/*手机品牌*/
export function cate_brand_list_in_stock(data) {
return request({
url: 'brand/cate_brand_list_in_stock',
method: 'post',
data
})
}
/*型号*/
export function model_brand(data) {
return request({
url: 'res/get_exist_model_brand',
method: 'post',
data
})
}
/*机器等级*/
export function machine_grade(data) {
return request({
url: 'repair/get_repair_fault_list',
method: 'post',
data
})
}
/*选择库位*/
export function location_list(data) {
return request({
url: 'location_id/location_list',
method: 'post',
data
})
}
/*机器入库*/
export function save(data) {
return request({
url: 'instorage/new_save',
method: 'post',
data
})
}
/*new机器入库*/
export function purchase(data) {
return request({
url: 'instorage/purchase',
method: 'post',
data
})
}
/*采购配件*/
export function accessories_save(data) {
return request({
url: 'instorage/accessories_save',
method: 'post',
data
})
}
/*采购配件*/
export function new_accessories_save(data) {
return request({
url: 'instorage/new_accessories_save',
method: 'post',
data
})
}
/*imei/sn图片识别*/
export function identify_sn_imei(data) {
return request({
url: 'https://apiv1.aiguovip.comquery/identify_sn_imei',
method: 'post',
data
})
}
/*上传xls文件*/
export function excel_storage(data) {
return request({
url: 'instorage/excel_storage',
method: 'post',
data
})
}
/*重置*/
export function reset(token) {
return request({
url: 'res/reset',
method: 'get',
params: { token }
})
}
/*打印*/
export function pre_print() {
return request({
url: 'res/pre_print',
method: 'post'
})
}
/*配件分类*/
export function get_accessories_cate_list(data) {
return request({
url: 'res/get_accessories_cate_list',
method: 'post',
data
})
}
/*操作员*/
export function op_order_operater_list(data) {
return request({
url: 'order/op_order_operater_list',
method: 'post',
data
})
}
/*操作类型*/
export function op_order_type_list(data) {
return request({
url: 'order/op_order_type_list',
method: 'post',
data
})
}
/*操作订单列表*/
export function op_order_list(data) {
return request({
url: 'order/op_order_list',
method: 'post',
data
})
}
/*操作订单详情*/
export function op_order_details(data) {
return request({
url: 'order/op_order_details',
method: 'post',
data
})
}
/*获取店铺名称*/
export function get_shop(data) {
return request({
url: 'res/get_shop',
method: 'post',
data
})
}
/*智能识别1*/
export function ai_model_v2(data) {
return request({
url: 'instorage/ai_model_v2',
method: 'post',
data
})
}
/*智能识别2*/
export function ai_model_update_v2(data) {
return request({
url: 'instorage/ai_model_update_v2',
method: 'post',
data
})
}
/*编辑备注*/
export function order_edit(data) {
return request({
url: 'order/order_edit',
method: 'post',
data
})
}
/*操作订单列表详情*/
export function op_order_pay(data) {
return request({
url: 'order/op_order_pay',
method: 'post',
data
})
}
/*操作订单详情--整单打印*/
export function whole_list_print(data) {
return request({
url: 'res/whole_list_print',
method: 'post',
data
})
}
/*批量回填价格列表*/
export function zlj_sales_rollback(data) {
return request({
url: 'sales/zlj_sales_rollback',
method: 'post',
data
})
}
/*批量回填价格*/
export function zlj_sales_complete(data) {
return request({
url: 'sales/zlj_sales_complete',
method: 'post',
data
})
}
/*回收端列表*/
export function recycle_order_list(data) {
return request({
url: 'recycle/recycle_order_list',
method: 'post',
data
})
}
/*回收端应付款列表*/
export function receivable_list(data) {
return request({
url: 'recycle/receivable_list',
method: 'post',
data
})
}
/*回收支付*/
export function recycle_pay(data) {
return request({
url: 'recycle/recycle_pay',
method: 'post',
data
})
}
/*回收应付款支付*/
export function charge_account_settlement(data) {
return request({
url: 'recycle/charge_account_settlement',
method: 'post',
data
})
}
/*回收端下的所有门店*/
export function store_user_list(data) {
return request({
url: 'recycle/store_user_list',
method: 'post',
data
})
}
/*回收详情*/
export function recycle_order_details(data) {
return request({
url: 'recycle/recycle_order_details',
method: 'post',
data
})
}
/*获取pjt物品信息*/
export function third_party_no(data) {
return request({
url: 'instorage/third_party_no',
method: 'post',
data
})
}
/*获取回收端物品信息*/
export function recycle_app(data) {
return request({
url: 'instorage/recycle_app',
method: 'post',
data
})
}
/*获取代卖列表*/
export function instead_sales(data) {
return request({
url: 'order/instead_sales',
method: 'post',
data
})
}
/*获取改价中心详情列表*/
export function change_price_center(data) {
return request({
url: 'zlj/change_price_center',
method: 'post',
data
})
}
// 公司信息
export function get_company(data) {
return request({
url: 'user/get_company',
method: 'post',
data
})
}
// 订单详情-分享🐴
export function op_order_details_code(data) {
return request({
url: 'order/op_order_details_code',
method: 'post',
data
})
}
// 通过分享码读取详情
export function get_op_order_details_by_code(data) {
return request({
url: 'public_api/get_op_order_details_by_code',
method: 'post',
data
})
}
// 解绑爱果账号
export function unbundling_ag(data) {
return request({
url: 'user/unbundling_ag',
method: 'post',
data
})
}
// 绑定爱果账号
export function binding_ag_account(data) {
return request({
url: 'user/binding_ag_account',
method: 'post',
data
})
}
// 获取爱果账号的余额
export function get_ag_balance(data) {
return request({
url: 'user/get_ag_balance',
method: 'post',
data
})
}
// aiguo接管登录
export function ag_take_over_login(data) {
return request({
url: 'instorage/ag_take_over_login',
method: 'post',
data
})
}
// 修改采购客户
export function edit_super_supplier(data) {
return request({
url: 'finance/edit_super_supplier',
method: 'post',
data
})
}
// 修改销售客户
export function edit_sales_customer(data) {
return request({
url: 'finance/edit_sales_customer',
method: 'post',
data
})
}
// 修改业务员
export function edit_salesman(data) {
return request({
url: 'finance/edit_salesman',
method: 'post',
data
})
}
// 查询发送
export function auto_query_for_imei(data) {
return request({
url: 'instorage/auto_query_for_imei',
method: 'post',
data
})
}
//老获取pjt
export function third_party_no_v2(data) {
return request({
url: 'instorage/third_party_no_v2',
method: 'post',
data
})
}
//草稿箱
export function drafts_box_list(data) {
return request({
url: 'instorage/drafts_box_list',
method: 'post',
data
})
}
//---草稿保存
export function save_drafts_box(data) {
return request({
url: 'instorage/save_drafts_box',
method: 'post',
data
})
}
//---草稿删除
export function del_drafts_box(data) {
return request({
url: 'instorage/del_drafts_box',
method: 'post',
data
})
}
//---设置是否自动查询保修
export function user_warranty_query(data) {
return request({
url: 'instorage/user_warranty_query',
method: 'post',
data
})
}
//---入库获取机器型号
export function cate_brand_list(data) {
return request({
url: 'instorage/cate_brand_list_all',
method: 'post',
data
})
}
//---采购单编辑机器
export function purchase_order_edit_phone(data) {
return request({
url: 'purchase_order/purchase_order_edit_phone',
method: 'post',
data
})
}
//---草稿箱编辑
export function edit_drafts_box(data) {
return request({
url: 'instorage/edit_drafts_box',
method: 'post',
data
})
}
//---批量添加网页版---草稿箱
export function batch_save_drafts_box(data) {
return request({
url: 'instorage/batch_save_drafts_box',
method: 'post',
data
})
}
//---批量更新网页版---草稿箱
export function batch_edit_drafts_box(data) {
return request({
url: 'instorage/batch_edit_drafts_box',
method: 'post',
data
})
}
//小程序入库---获取草稿箱单条数据
export function get_drafts_box(data) {
return request({
url: 'instorage/get_drafts_box',
method: 'post',
data
})
}
//小程序入库---是否验证机器信息完整
export function mp_is_validation(data) {
return request({
url: 'instorage/mp_is_validation',
method: 'post',
data
})
}
//小程序---新建采购单
export function mp_add_purchase(data) {
return request({
url: 'purchase_order/mp_add_purchase',
method: 'post',
data
})
}
//小程序入库---立即入库
export function mp_purchase(data) {
return request({
url: 'instorage/mp_purchase',
method: 'post',
data
})
}
//关联单据---入库单关联的采购单
export function associated(data) {
return request({
url: 'order/associated_order',
method: 'post',
data
})
}
//草稿箱添加重复的机器
export function drafts_box_add_repeat(data) {
return request({
url: 'instorage/drafts_box_add_repeat',
method: 'post',
data
})
}
//将草稿箱中的采购单机器设为实物
export function drafts_box_not_purchase(data) {
return request({
url: 'instorage/drafts_box_not_purchase',
method: 'post',
data
})
}
//正在查询的机器可以取消
export function purchase_storage_cancel_query(data) {
return request({
url: 'purchase_order/purchase_storage_cancel_query',
method: 'post',
data
})
}
//入库的时候批量收货及取消退货并收货
export function storage_purchase_confirm_goods(data) {
return request({
url: 'refunds/storage_purchase_confirm_goods',
method: 'post',
data
})
}
//机器详情保修查完获取机器信息
export function warranty_res_info(data) {
return request({
url: 'res/warranty_res_info',
method: 'post',
data
})
}
//导出操作订单详情
export function parts_export(data) {
return request({
url: 'order/parts_export',
method: 'post',
data
})
}
//编辑报价师
export function edit_quote_user(data) {
return request({
url: 'res/edit_quote_user',
method: 'post',
data
})
}
//批量添加采购备注
export function batch_remark(data) {
return request({
url: 'purchase_order/batch_remark',
method: 'post',
data
})
}
//配件入库快速添加库位
export function add_location(data) {
return request({
url: 'location/add_location',
method: 'post',
data
})
}

View File

@ -1,458 +0,0 @@
/*
* @Author: your name
* @Date: 2020-10-09 16:35:34
* @LastEditTime: 2021-05-14 15:30:28
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \aiguo_erp_vue\src\api\Income.js
*/
import request from '@axioshooks'
// 多账号详情
export function new_xy_product_details(data) {
return request({
url: 'xy/new_xy_product_details',
method: 'post',
data
})
}
// 多账号添加
export function new_add_xy_product(data) {
return request({
url: 'xy/new_add_xy_product',
method: 'post',
data
})
}
// 多账号编辑
export function new_edit_xy_product(data) {
return request({
url: 'xy/new_edit_xy_product',
method: 'post',
data
})
}
// 删除图片
export function upload_image(data) {
return request({
url: 'xy/upload_img',
method: 'post',
data
})
}
// 保修回填
export function res_warranty_backfill(data) {
return request({
url: 'xy/res_warranty_backfill',
method: 'post',
data
})
}
// 已售出快速重新发布
export function edit_item(data) {
return request({
url: 'xy/edit_item',
method: 'post',
data
})
}
// 已售出快速重新发布
export function sale_again_publish(data) {
return request({
url: 'xy/sale_again_publish',
method: 'post',
data
})
}
// 闲鱼服务商发布---获取在库机器
export function xy_choose_model(data) {
return request({
url: 'xy/xy_choose_model',
method: 'post',
data
})
}
// 闲鱼服务商发布---获取分类
export function xy_channel_cat(data) {
return request({
url: 'xy/xy_channel_cat',
method: 'post',
data
})
}
// 闲鱼服务商发布---根据分类获取属性
export function xy_property(data) {
return request({
url: 'xy/xy_property',
method: 'post',
data
})
}
// 闲鱼服务商发布---获取质检项
export function xy_qc_item(data) {
return request({
url: 'xy/xy_qc_item',
method: 'post',
data
})
}
// 闲鱼服务商发布---根据品牌获取型号
export function xy_model(data) {
return request({
url: 'xy/xy_model',
method: 'post',
data
})
}
// 详情、质检报告
export function xy_product_details(data) {
return request({
url: 'xy/xy_product_details',
method: 'post',
data
})
}
// 添加
export function add_xy_product(data) {
return request({
url: 'xy/add_xy_product',
method: 'post',
data
})
}
// 编辑
export function edit_xy_product(data) {
return request({
url: 'xy/edit_xy_product',
method: 'post',
data
})
}
// 发布
export function xy_publish(data) {
return request({
url: 'xy/xy_publish',
method: 'post',
data
})
}
// 获取自己拍的图片,或闲鱼同城帮图片
export function get_img(data) {
return request({
url: 'xy/get_img',
method: 'post',
data
})
}
// 商品列表
export function xy_product_list(data) {
return request({
url: 'xy/xy_product_list',
method: 'post',
data
})
}
// 订单列表
export function xy_order_list(data) {
return request({
url: 'xy/xy_order_list',
method: 'post',
data
})
}
// 修改订单收货地址
export function up_order_delivery_address(data) {
return request({
url: 'xy/up_order_delivery_address',
method: 'post',
data
})
}
// 售后列表
export function xy_sale_after_list(data) {
return request({
url: 'xy/xy_sale_after_list',
method: 'post',
data
})
}
// 下架
export function batch_off_shelf(data) {
return request({
url: 'xy/batch_off_shelf',
method: 'post',
data
})
}
// 批量删除
export function batch_product_del(data) {
return request({
url: 'api/xy/batch_product_del',
method: 'post',
data
})
}
// 订单发货
export function order_delivery_idle(data) {
return request({
url: 'xy/order_delivery',
method: 'post',
data
})
}
// 售后退款 同意/拒绝
export function refund_after_sale(data) {
return request({
url: 'xy/refund_after_sale',
method: 'post',
data
})
}
// 添加售后地址
export function add_after_sale_address(data) {
return request({
url: 'xy/add_after_sale_address',
method: 'post',
data
})
}
// 获取售后地址
export function get_after_sale_address(data) {
return request({
url: 'xy/get_after_sale_address',
method: 'post',
data
})
}
// 获取行政区划
export function administrative_division(data) {
return request({
url: 'xy/administrative_division',
method: 'post',
data
})
}
// 编辑售后地址
export function edit_after_sale_address(data) {
return request({
url: 'xy/edit_after_sale_address',
method: 'post',
data
})
}
// 删除售后地址
export function del_after_sale_address(data) {
return request({
url: 'xy/del_after_sale_address',
method: 'post',
data
})
}
// 自动匹配
export function auto_match(data) {
return request({
url: 'xy/auto_match',
method: 'post',
data
})
}
// 订单列表---换货发---根据imei获取对应机器
export function get_keywords_order_model(data) {
return request({
url: 'xy/get_keywords_order_model',
method: 'post',
data
})
}
// 日志
export function xy_log(data) {
return request({
url: 'xy/xy_log',
method: 'post',
data
})
}
// 删除商品
export function xy_product_del(data) {
return request({
url: 'xy/xy_product_del',
method: 'post',
data
})
}
// 批量改价
export function batch_change_price(data) {
return request({
url: 'xy/batch_change_price',
method: 'post',
data
})
}
// 批量翻库
export function xy_republish(data) {
return request({
url: 'xy/xy_republish',
method: 'post',
data
})
}
// 批量改价---分类
export function batch_change_price_group(data) {
return request({
url: 'xy/batch_change_price_group',
method: 'post',
data
})
}
// 自动调价
export function auto_change_price(data) {
return request({
url: 'xy/auto_change_price',
method: 'post',
data
})
}
// 获取可使用的闲鱼账号
export function get_site_account(data) {
return request({
url: 'xy/get_site_account',
method: 'post',
data
})
}
// 获取可使用的闲鱼账号
export function real_time_preview(data) {
return request({
url: 'xy/real_time_preview',
method: 'post',
data
})
}
// 闲鱼列表批量发布
export function batch_xy_publish(data) {
return request({
url: 'xy/batch_xy_publish',
method: 'post',
data
})
}
// 根据质检项选择版本类型
export function match_version_type(data) {
return request({
url: 'xy/match_version_type',
method: 'post',
data
})
}
// 计算服务费
export function compute_server_fee(data) {
return request({
url: 'xy/compute_server_fee',
method: 'post',
data
})
}
//获取全部可用模版
export function get_all_desc(data) {
return request({
url: 'xy/get_all_desc',
method: 'post',
data
})
}
//获取默认模板
export function get_default_desc(data) {
return request({
url: 'xy/get_default_desc',
method: 'post',
data
})
}
//新增闲鱼内容模板
export function add_xy_desc(data) {
return request({
url: 'xy/add_xy_desc',
method: 'post',
data
})
}
//删除闲鱼内容模板
export function del_xy_desc(data) {
return request({
url: 'xy/del_xy_desc',
method: 'post',
data
})
}
//修改闲鱼内容模板
export function up_xy_desc(data) {
return request({
url: 'xy/up_xy_desc',
method: 'post',
data
})
}
//补订单
export function make_up_for_order(data) {
return request({
url: 'xy/make_up_for_order',
method: 'post',
data
})
}
//同步订单
export function order_synchronous(data) {
return request({
url: 'xy/order_synchronous',
method: 'post',
data
})
}
//立即发货校验
export function check_order_after_sale(data) {
return request({
url: 'xy/check_order_after_sale',
method: 'post',
data
})
}
// 当前商户退货率
export function merchant_return_rate(data) {
return request({
url: 'xy/merchant_return_rate',
method: 'post',
data
})
}
// 驳回原因
export function get_reject_reason(data) {
return request({
url: 'ag_server/get_reject_reason',
method: 'post',
data
})
}
//瑕疵拍照-获取瑕疵项
export function get_defect_term(data) {
return request({
url: 'xy/get_defect_term',
method: 'post',
data
})
}
//瑕疵拍照-保存瑕疵图
export function save_defect_term_img(data) {
return request({
url: 'xy/save_defect_term_img',
method: 'post',
data
})
}

View File

@ -1,10 +0,0 @@
import request from '@axioshooks'
//获取质检项
export function xy_qc_item(data) {
return request({
url: 'inspection_center/xy_qc_item',
method: 'post',
data
})
}

View File

@ -1,177 +0,0 @@
import request from '@axioshooks'
// 质检中心
// 机器信息(系统识别)
export function choose_model(data) {
return request({
url: 'inspection_center/choose_model',
method: 'post',
data
})
}
export function machine_info(data) {
return request({
url: 'trusteeship/machine_info',
method: 'post',
data
})
}
// 质检sku
export function xy_channel_cat(data) {
return request({
url: 'inspection_center/xy_channel_cat',
method: 'post',
data
})
}
// 获取回填sku
export function get_backfill_model(data) {
return request({
url: 'inspection_center/get_backfill_model',
method: 'post',
data
})
}
//获取质检项
export function xy_qc_item(data) {
return request({
url: 'inspection_center/xy_qc_item',
method: 'post',
data
})
}
//获取自己拍的图片
export function get_img(data) {
return request({
url: 'inspection_center/get_img',
method: 'post',
data
})
}
// //上传照片
// export function upload_img(data) {
// return request({
// url: 'inspection_center/upload_img',
// method: 'post',
// data
// })
// }
//
//添加保存质检报告
export function add_product(data) {
return request({
url: 'inspection_center/add_product',
method: 'post',
data
})
}
//打印质检报告
export function inspection_report_print(data) {
return request({
url: 'inspection_center/inspection_report_print',
method: 'post',
data
})
}
//质检报告详情
export function product_details(data) {
return request({
url: 'inspection_center/product_details',
method: 'post',
data
})
}
//质检报告列表
export function inspection_report_list(data) {
return request({
url: 'inspection_center/inspection_report_list',
method: 'post',
data
})
}
//编辑质检报告
export function edit_product(data) {
return request({
url: 'inspection_center/edit_product',
method: 'post',
data
})
}
//删除质检报告
export function del_inspection_report(data) {
return request({
url: 'inspection_center/del_inspection_report',
method: 'post',
data
})
}
// 与实物一致
export function consistent_with_actual(data) {
return request({
url: 'trusteeship/consistent_with_actual',
method: 'post',
data
})
}
// 保存质检结果
export function quality_inspection(data) {
return request({
url: 'trusteeship/quality_inspection',
method: 'post',
data
})
}
export function receiving_goods(data) {
return request({
url: 'trusteeship/receiving_goods',
method: 'post',
data
})
}
export function quality_inspection_report(data) {
return request({
url: 'trusteeship/quality_inspection_report',
method: 'post',
data
})
}
export function judgment_responsibility(data) {
return request({
url: 'trusteeship/judgment_responsibility',
method: 'post',
data
})
}
export function batch_qc_code_print(data) {
return request({
url: 'trusteeship/print_quality_inspection_codes',
method: 'post',
data
})
}
export function get_oss_sign_aliyun(data) {
return request({
url: 'base_config/get_oss_sign_aliyun',
method: 'post',
data
})
}
export function get_defect_term(data) {
return request({
url: 'xy/get_defect_term',
method: 'post',
data
})
}

View File

@ -1,302 +0,0 @@
import request from '@axioshooks'
// 订单列表---换货发---根据imei获取对应机器
export function add_chx_info(data) {
return request({
url: 'chx/add_chx_info',
method: 'post',
data
})
}
// 订单列表---换货发---根据imei获取对应机器
export function get_keywords_order_model1(data) {
return request({
url: 'chx/get_keywords_order_model',
method: 'post',
data
})
}
// 获取转转、闲鱼定价、销售周期
export function chx_take_picture(data) {
return request({
url: 'chx/chx_take_picture',
method: 'post',
data
})
}
// 获取转转、闲鱼定价、销售周期
export function zz_xy_sale_info(data) {
return request({
url: 'chx/zz_xy_sale_info',
method: 'post',
data
})
}
// 手动啦取更新收货人信息
export function get_consignee_info(data) {
return request({
url: 'chx/get_consignee_info',
method: 'post',
data
})
}
// 获取近7天的拍卖场次
export function session_room(data) {
return request({
url: 'chx/session_room',
method: 'post',
data
})
}
// 场次查询
export function chx_session_query(data) {
return request({
url: 'chx/chx_session_query',
method: 'post',
data
})
}
// 商品日志
export function chx_product_log(data) {
return request({
url: 'chx/chx_product_log',
method: 'post',
data
})
}
// 一键询价
export function batch_query_price(data) {
return request({
url: 'chx/batch_query_price',
method: 'post',
data,
})
}
// 一键上拍(批量发布)
export function batch_product_release(data) {
return request({
url: 'chx/batch_product_release',
method: 'post',
data
})
}
// 历史询价
export function history_query_price(data) {
return request({
url: 'chx/history_query_price',
method: 'post',
data
})
}
// 打印条码
export function back_print(data) {
return request({
url: 'chx/back_print',
method: 'post',
data
})
}
// 获取机器等级
export function chx_match_grade(data) {
return request({
url: 'chx/chx_match_grade',
method: 'post',
data
})
}
// 批量下架
export function batch_exit_auction(data) {
return request({
url: 'chx/batch_exit_auction',
method: 'post',
data
})
}
// 获取闲鱼图片上传到采货侠
export function xy_img_upload(data) {
return request({
url: 'chx/xy_img_upload',
method: 'post',
data
})
}
// 获取转转图片上传到采货侠
export function zz_img_upload(data) {
return request({
url: 'chx/zz_img_upload',
method: 'post',
data
})
}
// 订单发布
export function order_delivery(data) {
return request({
url: 'chx/order_delivery',
method: 'post',
data
})
}
// 售后列表
export function chx_after_sale_list(data) {
return request({
url: 'chx/chx_after_sale_list',
method: 'post',
data
})
}
// 订单列表
export function chx_order_list(data) {
return request({
url: 'chx/chx_order_list',
method: 'post',
data
})
}
// 恢复
export function chx_product_recover(data) {
return request({
url: 'chx/chx_product_recover',
method: 'post',
data
})
}
// 忽略
export function chx_product_ignore(data) {
return request({
url: 'chx/chx_product_ignore',
method: 'post',
data
})
}
//
export function chx_product_list(data) {
return request({
url: 'chx/chx_product_list',
method: 'post',
data
})
}
// 重新质检、重新定价、重新拍照、重新发布
export function copy_chx_product(data) {
return request({
url: 'chx/copy_chx_product',
method: 'post',
data
})
}
// 主动下架
export function exit_auction(data) {
return request({
url: 'chx/exit_auction',
method: 'post',
data
})
}
// 获取手机型号
export function chx_choose_model(data) {
return request({
url: 'chx/chx_choose_model',
method: 'post',
data
})
}
// 获取质检项
export function get_qc_item(data) {
return request({
url: 'chx/get_qc_item',
method: 'post',
data
})
}
// 保存质检项
export function save_qc_item(data) {
return request({
url: 'chx/save_qc_item',
method: 'post',
data
})
}
// 获取拍卖场次
export function chx_auction_room(data) {
return request({
url: 'chx/chx_auction_room',
method: 'post',
data
})
}
// 添加商品
export function chx_add_product(data) {
return request({
url: 'chx/chx_add_product',
method: 'post',
data
})
}
// 查询起拍价
export function query_price(data) {
return request({
url: 'chx/query_price',
method: 'post',
data
})
}
// 查询维护起拍价
export function chx_product_details(data) {
return request({
url: 'chx/chx_product_details',
method: 'post',
data
})
}
// 保存定价
export function pricing(data) {
return request({
url: 'chx/pricing',
method: 'post',
data
})
}
// 立即发布
export function product_release(data) {
return request({
url: 'chx/product_release',
method: 'post',
data
})
}
//获取采货侠分类、品牌、型号
export function chx_model(data) {
return request({
url: 'chx/chx_model',
method: 'post',
data
})
}
//批量忽略
export function batch_product_ignore(data) {
return request({
url: 'chx/batch_product_ignore',
method: 'post',
data
})
}
//批量删除
export function del_chx_product(data) {
return request({
url: 'chx/del_chx_product',
method: 'post',
data
})
}
//采货侠-上传图片
export function upload_img(data) {
return request({
url: 'chx/upload_img',
method: 'post',
data
})
}

View File

@ -109,7 +109,7 @@ const onNavTo=(path)=>{
align-items: center;
}
.breadcrumbitem{
font-size: 14px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
padding: 0px 12px;

View File

@ -90,6 +90,7 @@ const data = reactive({
});
const params = ref([]); //
const fileList = ref(props.imgList); //
const new_fileList = ref([]);
const uploadingPromises = ref([]);
// fileList
const beforeUpload = (file) => {
@ -173,9 +174,27 @@ const handleUpload = (file) => {
//
const allFilesUploaded = () => {
params.value = [];
for (var i = 0; i < fileList.value.length; i++) {
params.value.push(fileList.value[i].raw);
let imglist = [];
imglist = fileList.value.filter((e) => e.raw);
if (!new_fileList.value.length) {
for (var i = 0; i < imglist.length; i++) {
params.value.push(imglist[i].raw);
}
} else {
const new_name = [];
new_fileList.value.map((item) => {
if (item.raw) {
new_name.push(item.uid);
}
});
imglist = fileList.value.filter(
(item) => !new_name.includes(item.uid) && item.name
);
for (var i = 0; i < imglist.length; i++) {
params.value.push(imglist[i].raw);
}
}
new_fileList.value = fileList.value;
$emit("onSuccessFiles", params.value);
};
</script>
@ -186,7 +205,7 @@ const allFilesUploaded = () => {
.el-upload-list--picture-card .el-upload-list__item {
width: 62px;
height: 62px;
line-height: 72px;
line-height: 1;
display: flex;
align-items: center;
justify-content: center;

View File

@ -211,7 +211,7 @@ const scrollHeight = () => {
<style lang="scss" scoped>
.table-box {
height: calc(100vh - 250px);
height: calc(100vh - 265px);
}
ul,

View File

@ -1,17 +1,12 @@
import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
import CommodityManagement from './views/CommodityManagement/index.vue';
import NewlyBuiltGoods from './views/NewlyBuiltGoods/index.vue';
import Home from './views/Home.vue';
import QualityWork from './views/qualityWork/index.vue';
import NotFound from "./views/NotFound.vue";
import Revicerecord from './views/reviceRecord/index.vue';
import QualityRecord from "./views/qualityRecord/index.vue";
import Qualityreport from "./views/qualityreport/index.vue";
import XyShop from "./views/XyShop/index.vue";
import ServiceProviderList from "./views/ServiceProviderList/index.vue";
import OperationCenter from "./views/OperationCenter/index.vue";
import { markRaw } from 'vue';
import Home from './views/Home.vue';
import NotFound from "./views/NotFound.vue";
import CommodityManagement from './views/CommodityManagement/index.vue';
import OrderManagement from './views/OrderManagement/index.vue';
import AfterSalesManagement from './views/AfterSalesManagement/index.vue';
import NewlyBuiltGoods from './views/NewlyBuiltGoods/index.vue';
import XyShop from "./views/XyShop/index.vue";
import {
@ -38,14 +33,6 @@ export const routes = [
icon: markRaw(Location)
},
children: [
{
meta: {
label: "商品管理",
icon: markRaw(Location)
},
path: '/CommodityManagement',
component: CommodityManagement,
},
{
meta: {
label: "新建商品",
@ -56,47 +43,31 @@ export const routes = [
},
{
meta: {
label: "收货记录",
label: "商品管理",
icon: markRaw(Location)
},
path: '/revicerecord',
component: Revicerecord,
path: '/CommodityManagement',
component: CommodityManagement,
},
{
meta: {
label: "质检报告",
label: "订单管理",
icon: markRaw(Location)
},
hidden: true,
path: '/qualityreport',
component: Qualityreport,
}
]
path: '/OrderManagement',
component: OrderManagement,
},
{
meta: {
label: "开发平台",
icon: markRaw(Setting)
},
children: [
{
meta: {
label: "质检工作台",
label: "售后管理",
icon: markRaw(Location)
},
path: '/qualityWork',
component: QualityWork,
},
{
meta: {
label: "质检记录",
icon: markRaw(Location)
},
path: '/qualityRecord',
component: QualityRecord,
path: '/AfterSalesManagement',
component: AfterSalesManagement,
},
]
},
{
meta: {
label: "设置",
@ -110,22 +81,8 @@ export const routes = [
path: '/XyShop',
component: XyShop,
},
{
meta: {
label: "站点用户列表",
icon: markRaw(Location)
},
path: '/serviceProviderList',
component: ServiceProviderList,
},
{
meta: {
label: "运营中心",
icon: markRaw(Location)
},
path: '/OperationCenter',
component: OperationCenter,
},
]
},
{ path: '/:pathMatch(.*)*', name: 'NotFound', component: NotFound },

View File

@ -146,13 +146,13 @@ export default ({
if (fileindex) {
filekey = newdatas["filekey"];
}
console.log(newdatas,'newdatas',filekey);
// console.log(newdatas,'newdatas',filekey);
_Object.values(data).map((d, index) => {
if (filekey != "" && Object.keys(data)[index] == filekey) {
if (d && Array.isArray(d)) {
console.log(d,'ddd');
// console.log(d,'ddd');
d.map((h, index) => {
console.log(h,'file');
// console.log(h,'file');
params.append(filekey,h, h.name);
})
} else {

View File

@ -0,0 +1,420 @@
<template>
<div class="Special_offer_box">
<div class="table_box_header">
<el-tabs class="demo-tabs" v-model="activeName" @tab-change="TabChange">
<el-tab-pane
v-for="item in tabs"
:key="item.value"
:label="item.label"
:name="item.value"
></el-tab-pane>
</el-tabs>
<SearchForm :inputs="Inputs" @onSearch="onSearch" @onRest="onRest" />
</div>
<div class="table_box_center">
<Table
ref="TableRef"
:key="TableKey"
:TabLoading="TabLoading"
:TableData="TableData"
:TableLabel="TableLabel"
>
<template #OperateButton="{ row }">
<OperateButton
:ButtonList="row.ButtonGroup"
:row="row"
></OperateButton></template
></Table>
<PaginaTion
:total="totalNumbel"
v-model:current-page="commodityInfoDto.pageNo"
v-model:page-size="commodityInfoDto.pageSize"
@handleSizeChange="handleSizeChange"
@handleCurrentChange="getDatas"
></PaginaTion>
</div>
</div>
</template>
<script setup>
import { ref, unref, computed, reactive, onMounted } from "vue";
import { router } from "@/router.js";
import { Plus } from "@element-plus/icons-vue";
import { ElMessage } from "element-plus";
import SearchForm from "@components/searchForm/index.vue";
import Table from "@components/table.vue";
import OperateButton from "@/components/OperateButton.vue";
import PaginaTion from "@components/Pagination.vue";
import {
select_by_conditions,
edit_product,
publish,
pull_off,
delete_one,
} from "@/api/CommodityManagement";
import { getshopInfo } from "@/api/newlybuiltgoods";
const activeName = ref("");
const tabs = ref([
{ label: "全部", value: "", total: 0 },
{ label: "草稿箱", value: "1", total: 0 },
{ label: "待发布", value: "2", total: 0 },
{ label: "发布成功", value: "-3", total: 0 },
{ label: "发布失败", value: "-4", total: 0 },
{ label: "手动下架", value: "-2", total: 0 },
{ label: "已售出", value: "3", total: 0 },
{ label: "其他", value: "99", total: 0 },
]);
const Inputs = ref([
{
type: "el-input",
placeholder: "查询闲鱼商品ID",
title: "闲鱼商品ID",
name: "commodityId",
value: "",
popover: true,
},
{
type: "el-select",
placeholder: "请选择闲鱼店铺",
title: "闲鱼店铺",
name: "xyId",
value: "",
options: [],
},
{
type: "el-select",
placeholder: "请输入商品类型",
title: "商品类型",
name: "auctionType",
value: "",
options: [
{ label: "一口价", value: "a" },
{ label: "拍卖", value: "b" },
],
},
{
type: "el-select",
placeholder: "请选择分类",
title: "商品分类",
name: "itemBizType",
value: "",
options: [
{ label: "普通商品", value: "2" },
{ label: "特卖商品", value: "24" },
],
},
{
type: "el-input",
placeholder: "请输入商品名称",
name: "title",
value: "",
title: "商品名称",
},
{
type: "el-date-picker",
title: "创建时间",
placeholder: "",
name: "createTime",
value: [],
width: "215px",
},
{
type: "el-date-picker",
title: "上架时间",
placeholder: "",
name: "shelfTime",
value: [],
width: "215px",
},
]);
const TableRef = ref(null);
const TableKey = ref(new Date().getTime());
const TabLoading = ref(false);
const TableData = ref([]);
const TableLabel = ref([
{
label: "闲鱼商品ID",
param: "commodityId",
align: "center",
show: true,
display: "top_left",
},
{
label: "创建时间",
param: "createTime",
align: "center",
show: true,
display: "top_left",
},
{
label: "上架时间",
param: "createTime",
align: "center",
show: true,
display: "top_left",
},
{
label: "商品",
param: "",
align: "center",
show: true,
minwidth: "210",
},
{
label: "商品状态",
param: "publishStatusName",
align: "center",
show: true,
minwidth: "150",
},
{
label: "商品类型",
param: "itemBizType",
align: "center",
show: true,
minwidth: "150",
},
{
label: "分类",
param: "auctionType",
align: "center",
show: true,
minwidth: "150",
},
{
label: "售价(元)",
param: "retailPrice",
align: "center",
show: true,
minwidth: "150",
},
{
label: "库存(个)",
param: "stock",
align: "center",
show: true,
minwidth: "150",
},
{
label: "销量",
param: "salesVolume",
align: "center",
show: true,
minwidth: "150",
},
{
label: "闲鱼店铺",
param: "xyName",
align: "center",
show: true,
minwidth: "150",
},
{
label: "操作",
align: "center",
show: true,
fixed: "right",
minwidth: "150",
},
]);
const New_TableLabel = ref([]);
const ButtonListGroup = ref([
{
AssemblyName: "el-link",
name: "编辑",
show: false,
type: "primary",
mode: "detail",
confirm: (row) => {
edit_product(row.id).then((res) => {
if (res.code === "200") {
router.push({
path: "/NewlyBuiltGoods",
query: {
params: JSON.stringify(res.data),
},
});
}
});
},
},
{
AssemblyName: "el-link",
name: "复制",
show: false,
type: "primary",
mode: "detail",
confirm: (row) => {},
},
{
AssemblyName: "el-link",
name: "上架",
show: false,
type: "primary",
mode: "detail",
confirm: (row) => {
publish(row.id).then((res) => {
if (res.code === "200") {
ElMessage.success(res.msg);
getDatas();
}
});
},
},
{
AssemblyName: "el-popconfirm",
name: "下架",
title: "是否下架?",
cancelText: "不用了",
popconfirmIcon: "el-icon-info",
iconColor: "red",
type: "danger",
show: false,
confirm: (row) => {
pull_off(row.id).then((res) => {
if (res.code === "200") {
ElMessage.success(res.msg);
getDatas();
}
});
},
},
{
AssemblyName: "el-popconfirm",
name: "删除",
title: "是否删除?",
cancelText: "不用了",
popconfirmIcon: "el-icon-info",
iconColor: "red",
type: "danger",
show: false,
confirm: (row) => {
delete_one(row.id).then((res) => {
if (res.code === "200") {
ElMessage.success(res.msg);
getDatas();
}
});
},
},
{
AssemblyName: "el-link",
name: "日志",
show: false,
type: "warning",
mode: "detail",
confirm: (row) => {},
},
]);
let commodityInfoDto = reactive({
pageNo: 1,
pageSize: 20,
publishStatus: "",
});
const totalNumbel = ref(0);
const getDatas = () => {
TabLoading.value = true;
select_by_conditions(commodityInfoDto)
.then((res) => {
TabLoading.value = false;
if (res.code === "200") {
const newData = Object.assign([], res.data.data);
newData.map((item) => {
item.ButtonGroup = ButtonListGroup.value.map((el) => {
if (
(el.name === "编辑" &&
[1, -4, -2].includes(item.publishStatus)) ||
(el.name === "下架" && [-3].includes(item.publishStatus)) ||
(el.name === "复制" &&
[1, -2, -3, -4, 3].includes(item.publishStatus)) ||
(el.name === "上架" && [-2, -4].includes(item.publishStatus)) ||
(el.name === "删除" && [1, -4, -2].includes(item.publishStatus))
) {
return { ...el, show: true };
}
return el;
});
});
console.log(newData);
TableData.value = newData;
totalNumbel.value = res.data.totalCount;
}
})
.catch((err) => {
TabLoading.value = false;
});
};
//
const onSearch = (value) => {
if (value.createTime) {
value.startCreateTime = new Date(value.createTime[0]).getTime();
value.endCreateTime = new Date(value.createTime[1]).getTime() + 86399999;
} else if (value.shelfTime) {
value.startShelfTime = new Date(value.shelfTime[0]).getTime();
value.endShelfTime = new Date(value.shelfTime[1]).getTime() + 86399999;
}
commodityInfoDto = {
...commodityInfoDto,
...value,
};
getDatas();
};
//
const onRest = (value) => {
commodityInfoDto = {
pageNo: 1,
pageSize: 20,
publishStatus: activeName.value,
};
getDatas();
};
const get_shopInfo = () => {
getshopInfo().then((res) => {
if (res.code === "200") {
const storeList = [];
res.data.forEach((item) => {
storeList.push({ label: item.xyName, value: item.id });
});
Inputs.value.find((e) => e.title == "闲鱼店铺").options = storeList;
}
});
};
onMounted(() => {
TabChange();
get_shopInfo();
});
const handleSizeChange = () => {
commodityInfoDto.pageNo = 1;
getDatas();
};
const TabChange = (val) => {
commodityInfoDto.publishStatus = activeName.value;
getDatas();
TableLabel.value.forEach((e) => {
e.show = !(
e.hasOwnProperty("NumberType") && !e.NumberType.includes(Number(val))
);
});
New_TableLabel.value = TableLabel.value;
TableKey.value = new Date().getTime();
};
</script>
<style lang="scss" scoped>
.Special_offer_box {
height: calc(100vh - 38px);
background: #f1f2f5;
}
.table_box_header {
width: 100%;
padding: 0 20px;
box-sizing: border-box;
background: #fff;
}
.table_box_center {
padding: 20px;
box-sizing: border-box;
}
</style>

View File

@ -48,10 +48,11 @@ import OperateButton from "@/components/OperateButton.vue";
import PaginaTion from "@components/Pagination.vue";
import {
select_by_conditions,
get_commodity_id,
edit_product,
publish,
pull_off,
delete_one,
get_commodity
} from "@/api/CommodityManagement";
import { getshopInfo } from "@/api/newlybuiltgoods";
const activeName = ref("");
@ -228,7 +229,7 @@ const ButtonListGroup = ref([
type: "primary",
mode: "detail",
confirm: (row) => {
get_commodity_id(row.id).then((res) => {
edit_product(row.id).then((res) => {
if (res.code === "200") {
router.push({
path: "/NewlyBuiltGoods",
@ -246,7 +247,18 @@ const ButtonListGroup = ref([
show: false,
type: "primary",
mode: "detail",
confirm: (row) => {},
confirm: (row) => {
get_commodity(row.id).then((res) => {
if (res.code === "200") {
router.push({
path: "/NewlyBuiltGoods",
query: {
params: JSON.stringify(res.data),
},
});
}
});
},
},
{
AssemblyName: "el-link",
@ -348,6 +360,7 @@ const getDatas = () => {
};
//
const onSearch = (value) => {
commodityInfoDto.pageNo=1;
if (value.createTime) {
value.startCreateTime = new Date(value.createTime[0]).getTime();
value.endCreateTime = new Date(value.createTime[1]).getTime() + 86399999;

View File

@ -2,7 +2,7 @@
<script setup>
import {useRouter} from "vue-router";
const router=useRouter();
router.push("/saleorder");
router.push("/NewlyBuiltGoods");
</script>

View File

@ -83,7 +83,7 @@
<div>
<el-button
style="margin: 2px 5px 2px 0px"
v-for="(el, ind) in item.valueGrop"
v-for="(el, ind) in item.valueGroup"
:key="ind"
:type="el.type"
round
@ -186,7 +186,7 @@ const submit_specification = (formEl) => {
valueName: "",
placeholder: "请输入规格属性,按回车健确认",
},
valueGrop: [],
valueGroup: [],
});
ruleForm.name = "";
});
@ -199,38 +199,38 @@ function operation(status, item, index) {
}
}
function onDelValueItem(index, ind) {
newDataList.value[index].valueGrop.splice(ind, 1);
newDataList.value[index].valueGroup.splice(ind, 1);
}
function input_child_keydown(e, name, index) {
if (e.key !== "Enter" || !name) return;
if (
newDataList.value[index].valueGrop.find(
newDataList.value[index].valueGroup.find(
(e) => e.label.replace(/\s+/g, "") === name.replace(/\s+/g, "")
)
)
return ElMessage.warning("商品属性不能重复!");
if (newDataList.value.length <= 1) {
if (newDataList.value[index].valueGrop.length >= 10) return;
if (newDataList.value[index].valueGroup.length >= 10) return;
} else {
if (
newDataList.value[0].valueGrop.length *
newDataList.value[1].valueGrop.length >=
newDataList.value[0].valueGroup.length *
newDataList.value[1].valueGroup.length >=
100
)
return;
}
newDataList.value[index].valueGrop.push({
newDataList.value[index].valueGroup.push({
type: "danger",
label: newDataList.value[index].inputGroup.valueName,
});
newDataList.value[index].num = newDataList.value[index].valueGrop.length;
newDataList.value[index].num = newDataList.value[index].valueGroup.length;
newDataList.value[index].inputGroup.valueName = "";
}
const submitForm = () => {
console.log(newDataList.value, "newDataList.value", newDataList.value.length);
if (!newDataList.value.length)
return ElMessage.warning("没有添加任何规格属性!");
if (!newDataList.value.every((item) => item.valueGrop.length))
if (!newDataList.value.every((item) => item.valueGroup.length))
return ElMessage.warning("添加规格后至少添加一个属性值!");
console.log(newDataList.value, "newDataList.value");
$emit("specificationSubmit", newDataList.value);

View File

@ -21,7 +21,7 @@
v-for="el in createGoods.radio_group_goods.options"
:key="el.value"
:value="el.value"
@change="el.change"
@change="changeGoodsType"
>{{ el.label }}</el-radio
>
</el-radio-group>
@ -30,7 +30,7 @@
<el-form-item :label="createGoods.radio_group_select.label">
<div style="margin-right: 10px">
<el-radio-group
@change="createGoods.radio_group_select.change"
@change="changeClass"
v-model="ruleForm[createGoods.radio_group_select.params]"
>
<el-radio-button
@ -53,7 +53,7 @@
v-model="
ruleForm.flashSaleDO[createGoods.radio_group_sell.params]
"
@change="createGoods.radio_group_sell.change"
@change="changeSellType"
>
<el-radio
v-for="el in createGoods.radio_group_sell.options"
@ -497,8 +497,8 @@ import {
address_default,
publish_shelve,
} from "@/api/newlybuiltgoods";
let ruleForm = reactive({
let routerParams = reactive({});
let ruleForm = ref({
bidDate: [],
auctionType: "b", //
itemBizType: 24, // 0 1 2 24
@ -536,11 +536,12 @@ let ruleForm = reactive({
xyImages: [], //
aliImages: [], //
whiteBgImage: "", //()
whiteAliImage: "",
flag: "1", //稿-0 -1
republishId: 0, //id
logistics: "1", // 1 2 bidStep
logistics: 1, // 1 2 bidStep
transportFee: "", //2
templateId: 0, // 3
templateId: "", //3
});
const createGoods = reactive({
@ -554,51 +555,78 @@ const createGoods = reactive({
{
label: "一口价",
value: "b",
change: () => {
ruleFormRef.value.clearValidate();
priceList.fixPrice = [
{
type: "add",
label: "商品规格",
add: () => {
priceList.specificationDialogVisible = true;
},
},
{
type: "el-input",
label: "售价",
prop: "reservePrice",
params: "reservePrice",
disabled: false,
},
{
type: "el-input",
label: "原价",
params: "originalPrice",
disabled: false,
},
{
type: "el-input",
label: "库存",
prop: "quantity",
params: "quantity",
disabled: true,
},
{
type: "el-select",
label: "成色",
prop: "stuffStatus",
params: "stuffStatus",
disabled: true,
options: qualityData.value,
},
];
},
},
{
label: "拍卖",
value: "a",
change: () => {
},
],
},
radio_group_select: {
type: "el-radio-group",
params: "itemBizType",
options: [
{
label: "闲鱼特卖",
value: 24,
},
{
label: "普通商品",
value: 2,
},
],
},
radio_group_sell: {
type: "el-radio-group",
label: "特卖类型",
params: "tag",
prop: "tag",
loading: false,
options: [
{
label: "临期",
value: 1,
},
{
label: "孤品",
value: 2,
},
{
label: "断码",
value: 3,
},
{
label: "微瑕",
value: 4,
},
{
label: "尾货",
value: 5,
},
{
label: "官翻",
value: 6,
},
{
label: "全新",
value: 7,
},
{
label: "福袋",
value: 8,
},
{
label: "其他",
value: 9,
},
],
},
});
const changeGoodsType = (e) => {
console.log(e, "eree");
ruleFormRef.value.clearValidate();
if (e == "a") {
ruleFormRef.value.clearValidate();
priceList.fixPrice = [
{
@ -647,9 +675,7 @@ const createGoods = reactive({
}
// 15
const maxEndTime = new Date(
now.getTime() + 15 * 24 * 60 * 60 * 1000
); // 15
const maxEndTime = new Date(now.getTime() + 15 * 24 * 60 * 60 * 1000); // 15
if (
endTime.getTime() <= startTime.getTime() ||
endTime.getTime() > maxEndTime.getTime()
@ -660,11 +686,11 @@ const createGoods = reactive({
return false; //
}
if (e) {
ruleForm.bidDto.bidStartTime = new Date(e[0]).getTime();
ruleForm.bidDto.bidEndTime = new Date(e[1]).getTime();
ruleForm.value.bidDto.bidStartTime = new Date(e[0]).getTime();
ruleForm.value.bidDto.bidEndTime = new Date(e[1]).getTime();
} else {
ruleForm.bidDto.bidStartTime = "";
ruleForm.bidDto.bidEndTime = "";
ruleForm.value.bidDto.bidStartTime = "";
ruleForm.value.bidDto.bidEndTime = "";
}
},
},
@ -685,87 +711,63 @@ const createGoods = reactive({
options: qualityData.value,
},
];
} else if (e == "b") {
priceList.fixPrice = [
{
type: "add",
label: "商品规格",
add: () => {
priceList.specificationDialogVisible = true;
},
},
],
{
type: "el-input",
label: "售价",
prop: "reservePrice",
params: "reservePrice",
disabled: false,
},
radio_group_select: {
type: "el-radio-group",
params: "itemBizType",
change: (e) => {
if (!ruleForm.classValue.length) {
ruleForm.spBizType = 99;
{
type: "el-input",
label: "原价",
params: "originalPrice",
disabled: false,
},
{
type: "el-input",
label: "库存",
prop: "quantity",
params: "quantity",
disabled: true,
},
{
type: "el-select",
label: "成色",
prop: "stuffStatus",
params: "stuffStatus",
disabled: true,
options: qualityData.value,
},
];
}
};
const changeClass = (e) => {
console.log(e);
if (!ruleForm.value.classValue.length) {
ruleForm.value.spBizType = 99;
return;
}
e == "24"
? (ruleForm.spBizType = "99")
: (ruleForm.spBizType = ruleForm.classValue[0]);
},
options: [
{
label: "闲鱼特卖",
value: "24",
},
{
label: "普通商品",
value: "2",
},
],
},
radio_group_sell: {
type: "el-radio-group",
label: "特卖类型",
params: "tag",
prop: "tag",
loading: false,
options: [
{
label: "临期",
value: 1,
},
{
label: "孤品",
value: 2,
},
{
label: "断码",
value: 3,
},
{
label: "微瑕",
value: 4,
},
{
label: "尾货",
value: 5,
},
{
label: "官翻",
value: 6,
},
{
label: "全新",
value: 7,
},
{
label: "福袋",
value: 8,
},
{
label: "其他",
value: 9,
},
],
change: () => {
? (ruleForm.value.spBizType = "99")
: (ruleForm.value.spBizType = ruleForm.value.classValue[0]);
};
const changeSellType = () => {
getGoodsType().then((res) => {
if (res.code === "200") {
information.goods_class.options = res.data;
}
});
},
},
});
};
const information = reactive({
title: "基本信息",
goods_class: {
@ -778,28 +780,33 @@ const information = reactive({
options: [],
visibleChange: (isshow) => {
if (isshow) return;
ruleForm.itemBizType == "24"
? (ruleForm.spBizType = "99")
: (ruleForm.spBizType = ruleForm.classValue[0]);
ruleForm.channelCatId = ruleForm.classValue[2];
ruleForm.categoryId = ruleForm.classValue[1];
ruleForm.value.itemBizType == 24
? (ruleForm.value.spBizType = "99")
: (ruleForm.value.spBizType = ruleForm.value.classValue[0]);
ruleForm.value.channelCatId = ruleForm.value.classValue[2];
ruleForm.value.categoryId = ruleForm.value.classValue[1];
information.goods_class.loading = true;
information.goods_class.show = true;
setTimeout(() => {
getGoodsInfo(`${ruleForm.classValue[2]}`)
getGoodsInfo(`${ruleForm.value.classValue[2]}`)
.then((res) => {
information.goods_class.loading = false;
if (res.code === "200") {
let new_data = Object.assign([], res.data);
ruleForm.pvListDtoList = [];
routerParams
? (ruleForm.value.pvListDtoList = routerParams.pvListDtoList)
: (ruleForm.value.pvListDtoList = []);
information.goods_attribute.group = [];
new_data.map((item) => {
ruleForm.pvListDtoList.push({
if (!routerParams) {
ruleForm.value.pvListDtoList.push({
propertyId: "",
propertyName: "",
valueId: "",
valueName: "",
});
}
item.child = item.child.map((e) => {
return {
value: e.property_name,
@ -825,10 +832,8 @@ const information = reactive({
}, 500 * Math.random());
},
handleSelect: (item, el, index) => {
console.log(item, "itemtemtekte");
const pvlistdto = item.options.find((e) => e.link == el);
ruleForm.pvListDtoList[index] = {
ruleForm.value.pvListDtoList[index] = {
propertyId: item.propertyId,
propertyName: item.label,
valueId: pvlistdto.link,
@ -846,7 +851,6 @@ const information = reactive({
information.goods_class.show = false;
});
}, 500);
console.log(ruleForm, "ruleform");
},
},
goods_attribute: {
@ -880,27 +884,42 @@ const goodsInfo = reactive({
onSuccessFiles: (filelist) => {
uploadImage({
filekey: "files",
xyShopId: ruleForm.xyShopId,
xyShopId: ruleForm.value.xyShopId,
files: filelist,
}).then((res) => {
})
.then((res) => {
if (res.code === "200") {
ruleForm.xyImages = res.data.xy; //
ruleForm.aliImages = res.data.ali; //
if (!routerParams) {
ruleForm.value.xyImages = res.data.xy; //
ruleForm.value.aliImages = res.data.ali; //
} else {
ruleForm.value.xyImages = [
...ruleForm.value.xyImages,
...res.data.xy,
];
ruleForm.value.aliImages = [
...ruleForm.value.aliImages,
...res.data.ali,
];
}
} else {
ElMessage.warning(res.msg);
}
})
.catch((err) => {
ElMessage.error("上传失败");
});
},
handleRemove: (filelist) => {
if (!ruleForm.aliImages.length) return;
if (!ruleForm.value.aliImages.length) return;
const nameToFind = filelist[0].name;
const index = ruleForm.aliImages.findIndex((url) => {
const index = ruleForm.value.aliImages.findIndex((url) => {
const urlParts = url.split("/");
const filename = urlParts[urlParts.length - 1];
return filename.includes(nameToFind);
});
ruleForm.aliImages.splice(index, 1);
ruleForm.xyImages.splice(index, 1);
ruleForm.value.aliImages.splice(index, 1);
ruleForm.value.xyImages.splice(index, 1);
},
},
White_src: {
@ -914,16 +933,17 @@ const goodsInfo = reactive({
onSuccessFiles: (filelist) => {
uploadImage({
filekey: "files",
xyShopId: ruleForm.xyShopId,
xyShopId: ruleForm.value.xyShopId,
files: filelist,
}).then((res) => {
if (res.code === "200") {
ruleForm.whiteBgImage = res.data.xy[0];
ruleForm.value.whiteBgImage = res.data.xy[0];
ruleForm.value.whiteAliImage = res.data.ali[0];
}
});
},
handleRemove: () => {
ruleForm.whiteBgImage = "";
ruleForm.value.whiteBgImage = "";
},
},
Deliver_location: {
@ -935,7 +955,8 @@ const goodsInfo = reactive({
options: [],
visibleChange: (e) => {
if (e) return;
ruleForm.divisionId = goodsInfo.Deliver_location.params.slice(-1)[0];
ruleForm.value.divisionId =
goodsInfo.Deliver_location.params.slice(-1)[0];
},
},
});
@ -993,29 +1014,29 @@ const logistics = reactive({
options: [
{
label: "包邮",
value: "1",
value: 1,
},
{
label: "统一运费",
value: "2",
value: 2,
},
{
label: "运费模板",
value: "3",
value: 3,
},
],
change: () => {},
},
});
const bidStep = (rule, value, callback) => {
if (ruleForm.bidDto.bidStep === "") {
if (ruleForm.value.bidDto.bidStep === "") {
callback(new Error("出价幅度,不能为空"));
} else {
callback();
}
};
const bidBail = (rule, value, callback) => {
if (ruleForm.bidDto.bidBail === "") {
if (ruleForm.value.bidDto.bidBail === "") {
callback(new Error("保证金,不能为空"));
} else {
callback();
@ -1067,7 +1088,7 @@ const add_xyShop = () => {
};
//
const select_store = (item) => {
ruleForm.xyShopId = item.id;
ruleForm.value.xyShopId = item.id;
};
const newDataList = ref([]);
@ -1078,7 +1099,6 @@ const specificationSubmit = (row) => {
priceList.specification_arr = deepClone(row);
const specification_list = [];
const tabelList = [];
priceList.fixPrice = [
{
type: "edit",
@ -1172,7 +1192,7 @@ const specificationSubmit = (row) => {
params: "inventory",
keydown: (e, data, el) => {
if (e.key !== "Enter") return;
if (data.tableData.every((item) => !item.price)) {
if (data.tableData.every((item) => !item.inventory)) {
data.tableData.forEach((item) => {
item.inventory = el.search;
});
@ -1202,7 +1222,7 @@ const specificationSubmit = (row) => {
},
];
row.forEach((item) => {
specification_list.push({ key: item.label, value: item.valueGrop });
specification_list.push({ key: item.label, value: item.valueGroup });
tabelList.push({
label: item.label,
@ -1257,6 +1277,7 @@ const specificationSubmit = (row) => {
if (item.type === "edit") {
item.specification_list = specification_list;
} else if (item.type === "el-table") {
console.log(item.tabelList, "fsdfdsfsd");
item.tabelList = [...tabelList, ...item.tabelList];
}
});
@ -1265,7 +1286,7 @@ const specificationSubmit = (row) => {
const get_filters = (arr) => {
let filters = [];
arr.valueGrop.map((e) => {
arr.valueGroup.map((e) => {
filters.push({ label: e.label, value: e.label });
});
return filters;
@ -1280,7 +1301,7 @@ const generateCombinations = (attributeGroups) => {
}
//
const group = attributeGroups[index];
group.valueGrop.forEach((value) => {
group.valueGroup.forEach((value) => {
//
generate(index + 1, {
...current,
@ -1311,7 +1332,7 @@ const get_shopInfo = () => {
const get_region = () => {
address_default(1).then((res) => {
if (res.code === "200") {
ruleForm.divisionId = res.data.district_id;
ruleForm.value.divisionId = res.data.district_id;
goodsInfo.Deliver_location.params = [
res.data.province_id,
res.data.city_id,
@ -1337,6 +1358,7 @@ const get_region = () => {
}
});
};
//
const get_qualityList = () => {
qualityList().then((res) => {
@ -1366,9 +1388,11 @@ const publish = (formRef) => {
dataList.tableData,
dataList.tabelList
);
ruleForm.skuList = ruleFormSkuList;
ruleForm.value.skuList = ruleFormSkuList;
}
publish_shelve(ruleForm).then((res) => {
ruleForm.value.flag = "1";
ruleform.value.republishId='';
publish_shelve(ruleForm.value).then((res) => {
if (res.code === "200") {
ElMessage.success(res.msg);
} else {
@ -1386,9 +1410,7 @@ function generateSkuList(array1, array2) {
property: [], //
};
array2.forEach((item) => {
console.log(item, "item,");
let value = skuVariant[item.params];
console.log(value, "value", skuVariant, "skuVariant");
sku.quantity = skuVariant.inventory;
sku.price = skuVariant.price;
if (
@ -1404,59 +1426,85 @@ function generateSkuList(array1, array2) {
return skuList;
}
onMounted(() => {
if (route.query.params) {
let params = JSON.parse(route.query.params);
// console.log(params,"praaafsdf");
// ruleForm = {
// bidDate: [],
// auctionType: params.auctionType, //
// itemBizType: params.itemBizType, // 0 1 2 24
// flashSaleDO: {
// tag: params.flashSaleType,
// foodProDate: "", // -
// foodExpireDate: "", // -
// }, //
// xyShopId: "",
// channelCatId: "", //id
// classValue: [],
// spBizType: "99", //99 :1, :2, :3, :8, 3C:9, :16, :17, :18, /:19, :20, :21
// pvListDtoList: [],
// title: "", //
// desc: "", //
// reservePrice: "", //
// originalPrice: "", //
// stuffStatus: "", //
// divisionId: "", //
// categoryId: 0, //Id,: 50025386long810
// bidDto: {
// bidBail: "", //
// bidStep: "", //
// bidEndTime: "", //
// bidStartTime: "", //
// }, //
// quantity: 1, //
// skuList: [
// {
// quantity: 0, //
// price: 0, //
// property: [{ key: "", value: "" }], //
// },
// ],
// xyImages: [], //
// aliImages: [], //
// whiteBgImage: "", // ()
// flag: "1", //稿-0 -1
// republishId: 0, //id
// logistics: "1", // 1 2 bidStep
// transportFee: "", // 2
// templateId: 0, // 3
// };
const transformSkuList = (skuList) => {
//
const uniqueProperties = {};
// skuList uniqueProperties
skuList.forEach((sku) => {
sku.propertyList.forEach((prop) => {
if (!uniqueProperties[prop.propertyText]) {
uniqueProperties[prop.propertyText] = new Set();
}
uniqueProperties[prop.propertyText].add(prop.valueText);
});
});
// uniqueProperties
let index = 1;
const result = [];
for (const [propertyText, values] of Object.entries(uniqueProperties)) {
result.push({
label: propertyText,
num: values.size, // 使 Set size
index: index++, // index 1
disabled: false,
buttonGroup: [
{ type: "primary", label: "编辑" },
{ type: "danger", label: "删除" },
],
inputGroup: {
valueName: "",
placeholder: "请输入规格属性,按回车健确认",
},
valueGroup: Array.from(values).map((valueText) => ({
type: "danger",
label: valueText,
})),
});
}
return result;
};
onMounted(() => {
get_shopInfo();
get_region();
get_qualityList();
createGoods.radio_group_sell.change();
changeSellType();
if (route.query.params) {
try {
routerParams = JSON.parse(route.query.params);
} catch (err) {
console.log(err);
}
console.log(routerParams, "params");
if (routerParams.classValue && routerParams.classValue.length) {
routerParams.classValue[0] = Number(routerParams.classValue[0]);
routerParams.classValue[1] = Number(routerParams.classValue[1]);
}
routerParams.logistics = Number(routerParams.logistics);
routerParams.aliImages.map((e) => {
goodsInfo.more_src.fileImgList.push({ url: e });
});
if (routerParams.whiteAliImage) {
goodsInfo.White_src.fileImgList.push({ url: routerParams.whiteAliImage });
}
if (routerParams.skuList && routerParams.skuList.length) {
let row = transformSkuList(routerParams.skuList);
specificationSubmit(row);
console.log(priceList.fixPrice.find((e) => e.label == "销售规格").tableData);
priceList.fixPrice.find((e) => e.label == "销售规格").tableData.forEach((item,index)=>{
item.price=routerParams.skuList[index].price
item.inventory=routerParams.skuList[index].quantity
})
priceList.fixPrice.find((e) => e.label == "销售规格").new_tableData.forEach((item,index)=>{
item.price=routerParams.skuList[index].price
item.inventory=routerParams.skuList[index].quantity
})
}
ruleForm.value = routerParams;
information.goods_class.visibleChange(false);
}
});
</script>
@ -1545,6 +1593,7 @@ onMounted(() => {
display: inline-block;
padding: 10px;
box-sizing: border-box;
font-size: 14px;
border-radius: 8px;
margin: 5px 10px 5px 0;
cursor: pointer;
@ -1563,7 +1612,6 @@ onMounted(() => {
}
.create_shop {
width: 135px;
display: flex;
border: 1px dashed #409eff;
color: #409eff;
@ -1633,6 +1681,7 @@ onMounted(() => {
line-height: 80px;
text-align: right;
padding: 0 40px;
box-sizing: border-box;
background-color: #fff;
}
}
@ -1648,3 +1697,14 @@ onMounted(() => {
}
}
</style>

View File

@ -1,803 +0,0 @@
<template>
<div class="box">
<div style="padding:10px 20px">
<div class="formContainer">
<div >
<h4 class="leftBox" style="margin-left: 10px;">运营数据</h4>
</div>
<div class="righrContainer">
<el-select size="small" v-model="data.form.region" :style="{width:'120px'}" placeholder="全部店铺" clearable @change="seleteChange">
<el-option v-for="item in data.accountData" :key="item.account_config_id" :label="item.account" :value="item.account_config_id"></el-option>
</el-select>
<div class="rightBox">
<el-radio-group v-model="data.radio1" size="small" @change="tableTimeChange">
<el-radio-button label="今日"></el-radio-button>
<el-radio-button label="本月"></el-radio-button>
<el-radio-button label="自定义"></el-radio-button>
</el-radio-group>
<div class="righttime">
<el-date-picker
v-if="data.radio1 == '自定义'"
v-model="data.transactionDataTime1"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
size="small"
@change="transactionchange1"
:value-format="'X'"
format="YYYY-MM-DD"
:default-time="[
new Date(0, 0, 0, 0, 0, 0),
new Date(0, 0, 0, 23, 59, 59)
]"
/>
</div>
</div>
</div>
</div>
<div class="header" v-loading="data.headerLoading">
<div class="right">
<div class="top">
<div class="one">
<p>运营收入 ()</p>
<p style="color:red;font-size:18px;margin:10px 0">{{data.operateData.operating_income}}</p>
</div>
<div class="one" >
<div>新增上架数量</div>
<div style="font-size:18px;margin:10px 0">{{data.operateData.today_shelf_num}}</div>
<!-- <div v-if="data.radio1 != '自定义'">{{data.radio1 == "今日" ? "昨日" : data.radio1 == "本月" ? "上月" : ''}} {{data.operateYesterData.today_shelf_num}}</div> -->
</div>
<div class="one">
<div>待审核数量</div>
<div style="font-size:18px;margin:10px 0">{{data.operateData.wait_examine_num}}</div>
</div>
<div class="one">
<div>在架数量</div>
<div style="font-size:18px;margin:10px 0">{{data.operateData.on_shelf_num}}</div>
</div>
<div class="one">
<div>待发货</div>
<div style="font-size:18px;margin:10px 0">{{data.operateData.wait_deliver_goods_num}}</div>
</div>
<div class="one">
<div>待售后</div>
<div style="font-size:18px;margin:10px 0">{{data.operateData.wait_sale_after_num}}</div>
</div>
</div>
<div class="bottom">
<div class="two salesNum" style="display:flex;padding:10px 10px">
<div style="margin-right:105px">
<div>销售数量</div>
<div style="font-size:18px;margin:9px 0">{{data.salesInfo.sales_num}}</div>
<div v-if="data.radio1 != '自定义'">{{data.radio1 == "今日" ? "昨日" : data.radio1 == "本月" ? "上月" : ''}} {{data.yrsterSalesInfo.sales_num}}</div>
</div>
<div>
<p>销售金额 ()</p>
<p style="color:red;font-size:18px">{{ isNaN(Number(data.salesInfo.payment)) ? 0 : Number(data.salesInfo.payment)}}</p>
</div>
</div>
<div class="two refundsNum" style="display:flex;padding:10px 10px" >
<div style="margin-right:105px">
<div>退货数量</div>
<div style="font-size:18px;margin:9px 0">{{data.refundsInfo.refunds_num}}</div>
<div v-if="data.radio1 != '自定义'">{{data.radio1 == "今日" ? "昨日" : data.radio1 == "本月" ? "上月" : ''}} {{data.yrsterSalesInfo.sales_num}}</div>
</div>
<div>
<p>退货率</p>
<p style="color:red;font-size:18px">
{{
isNaN(Number(data.salesInfo.sales_num)) || isNaN(Number(data.refundsInfo.refunds_num))
? 0
: Number(data.salesInfo.sales_num) === 0 || Number(data.refundsInfo.refunds_num) === 0
? '0'
: (Number(data.refundsInfo.refunds_num) / Number(data.salesInfo.sales_num) * 100).toFixed(2) + '%'
}}
</p>
</div>
</div>
<div class="two payment" style="padding:10px 10px">
<div>客单价 ()</div>
<div style="font-size:18px;margin:10px 0">{{ isNaN(Number(data.salesInfo.payment) / Number(data.salesInfo.sales_num)) ? 0 : (Number(data.salesInfo.payment) / Number(data.salesInfo.sales_num)).toFixed(2) }}</div>
<div v-if="data.radio1 != '自定义'">{{data.radio1 == "今日" ? "昨日" :data.radio1 == "本月" ? "上月" : ''}} {{ isNaN( Number(data.yrsterSalesInfo.payment) / Number(data.yrsterSalesInfo.sales_num)) ? 0 : (Number(data.yrsterSalesInfo.payment) / Number(data.yrsterSalesInfo.sales_num)).toFixed(2) }}</div>
</div>
<div class="two turnover" style="padding:10px 10px" >
<div>动销率</div>
<div style="font-size:18px;margin:10px 0">
{{ isNaN(Number(data.salesInfo.sales_num) / Number(data.operateData.on_shelf_num)) ? 0 : (Number(data.salesInfo.sales_num) / Number(data.operateData.on_shelf_num) * 100).toFixed(2) + '%'
}}
</div>
<div v-if="data.radio1 != '自定义'">{{data.radio1 == "今日" ? "昨日" : data.radio1 == "本月" ? "上月" : ''}} {{ isNaN(Number(data.yrsterSalesInfo.sales_num) / Number(data.operateYesterData.on_shelf_num)) ? 0 : (Number(data.yrsterSalesInfo.sales_num) / Number(data.operateYesterData.on_shelf_num ) * 100).toFixed(2) + '%'}}</div>
</div>
</div>
</div>
</div>
</div>
<!-- 表格 -->
<div class="bottomContainer">
<div class="center" style="display:flex;justify-content: space-between;margin: 20px 0">
<div class="left" style="font-size:16px;font-weight:600">
<span style="margin-right:5px">本页数据:</span>
<span style="margin-right:5px">{{data.numberAll}}</span>
<span style="margin-right:5px">今日上架{{data.operateData.on_shelf_num}}</span>
<span style="margin-right:5px">今日售出{{data.operateData.wait_deliver_goods_num}}</span>
<span style="margin-right:5px">销售金额{{ salesPayment }} 客单价 {{ isNaN(Number(data.salesInfo.payment) / Number(data.salesInfo.sales_num)) ? 0 : (Number(data.salesInfo.payment) / Number(data.salesInfo.sales_num)).toFixed(2) }} </span>
</div>
<div class="right" style="margin-left:20px">
<el-button
class="custom-button"
@click="refreshhandler"
type="text"
size="small"
>
<i class="el-icon-refresh" style="font-size: 20px"></i>
</el-button>
<el-button
class="custom-button"
type="text"
size="small"
>
<i class="el-icon-upload2" style="font-size: 20px"></i>
</el-button>
</div>
</div>
<div class="bottomBox">
<div class="footer" style="display:flex;justify-content: space-between;margin-top:10px">
<div class="zhandian">
<el-form ref="formRef" :model="data.form" style="display:flex">
<el-form-item>
<el-select size="small" v-model="data.form.region1" style="margin-left:10px;min-width:120px" placeholder="全部用户" clearable @change="seleteChange2">
<el-option v-for="item in data.serviceList" :key="item.p_user_id" :label="item.username" :value="item.p_user_id"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select size="small" v-model="data.form.region2" style="margin-left:10px;min-width:120px" clearable placeholder="全部店铺" @change="seleteChange3">
<el-option v-for="item in data.accountData" :key="item.account_config_id" :label="item.account" :value="item.account_config_id"></el-option>
</el-select>
</el-form-item>
<el-form-item style="margin-left:10px">
<el-button size="small" type="primary" @click="search">查询</el-button>
<el-button size="small" type="danger" @click="resetData">重置</el-button>
</el-form-item>
</el-form>
</div>
<div class="time">
<div class="rightBottomBox">
<el-radio-group v-model="data.radio2" size="small" @change="tableTimeChange2">
<el-radio-button label="今日"></el-radio-button>
<el-radio-button label="本月"></el-radio-button>
<el-radio-button label="自定义"></el-radio-button>
</el-radio-group>
<div style="margin-left:10px">
<el-date-picker
v-if="data.radio2 == '自定义'"
v-model="data.transactionDataTime2"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
size="small"
@change="transactionchange2"
:value-format="'X'"
format="YYYY-MM-DD"
:default-time="[
new Date(0, 0, 0, 0, 0, 0),
new Date(0, 0, 0, 23, 59, 59)
]"
/>
</div>
</div>
</div>
</div>
<vxe-table
ref="xTable"
:data="newtableData"
border
:span-method="colspanMethod"
:row-config="{ isHover: true }"
:loading="data.loading"
:fixed="true"
:height="height"
:header-cell-style="{
height: '70px',
color: '#606266',
'text-align': 'center',
}"
>
<vxe-column
v-for="(item,index) in data.tableLabel"
:key="index"
:title="item.label"
:field="item.param"
:width="item.width"
>
<template #default="{ row }">
<span v-if="row.render" class="topSpan">
<span style="margin-left:15px;letter-spacing:0px;">
0{{row.index}}
</span>
<span v-if="row.truename" style="margin-left:50px"><a class="aIcon"><i class="el-icon-user" style="font-size:20px"></i></a>用户名称:{{row.truename}}</span>
<span v-if="row.company">公司名称:{{row.company}}</span>
<span v-if="row.account" style="margin-left:52px"><a class="aIcon"><i class="el-icon-takeaway-box" style="font-size:20px"></i></a>商户拥有店铺:{{row.account}}</span>
</span>
<span v-else-if="!row.render">
<span v-if="item.label == '销售金额'" class="spanBottom">
{{ Number(row.sales_amount) ? Number(row.sales_amount).toFixed(2): 0}}
</span>
<span v-else-if="item.label == '客单价'" class="spanBottom">
{{isNaN(Number(row.sales_amount) / Number(row.sales_num)) ? 0 : (Number(row.sales_amount) / Number(row.sales_num)).toFixed(2)}}
</span>
<span v-else-if="item.label == '动销率'" class="spanBottom" >{{
isNaN(Number(row.sales_num)) || isNaN(Number(row.on_shelf_num))
? 0
: row.sales_num === 0 || row.on_shelf_num == 0
? '0'
: (Number(row.sales_num) / Number(row.on_shelf_num) * 100).toFixed(2) + '%'
}}</span>
<span v-else-if="item.label == '退货率'" class="spanBottom">
{{
isNaN(Number(row.refunds_num)) || isNaN(Number(row.sales_num))
? 0
: Number(row.refunds_num) === 0 || Number(row.sales_num) === 0
? '0'
: (Number(row.refunds_num) / Number(row.sales_num) * 100).toFixed(2) + '%'
}}
</span>
<span v-else class="spanBottom">{{ row[item.param] }}</span>
</span>
</template>
</vxe-column>
</vxe-table>
</div>
</div>
</div>
</template>
<script setup>
import { ElMessage } from "element-plus";
import {site_operation_data_statistics,site_operation_data_details,get_site_account,service_provider_list} from "@/api/OperationCenter"
import { getToday, getCurrMonthDays, getYesterday ,getLastMonthDays} from '@/utils/timeData';
import { computed, reactive,ref,onMounted } from 'vue';
const formRef=ref(null);
const data=reactive({
radio1: '今日',
radio2:'今日',
form:{},
region:'' ,
region1:'',
region2:'',
formLabelAlign:{},
formLabelAlign2:{},
operateData:{},
transactionDataTime1:[],
transactionDataTime2:[],
ReconciliationCenterList:[],
accountData:[],
serviceList:[],
tableDate:[],
refundsInfo:[],
salesInfo:[],
yrsterSalesInfo:[],
yesterRefundsInfo:[],
yesterTime:{},
operateYesterData:[],
numberAll:0,
loading:false,
headerLoading:false,
tableLabel:[
{ label: "新增上架数量", id: 1,param:"today_shelf_num",show:true,align: "center",width: "120",},
{ label: "待审核数量", id: 2,param:"wait_examine_num",show:true,align: "center", },
{ label: "在架数量", id: 3,param:"on_shelf_num",show:true,align: "center",},
{ label: "销售数量", id: 4 ,param:"sales_num",show:true,align: "center",},
{ label: "销售金额", id: 5, param:"sales_amount",show:true,align: "center",},
{ label: "退货数量", id: 6, param:"refunds_num",show:true,align: "center",},
{ label: "退货率", id: 7, param:"refunds_amount",show:true,align: "center",},
{ label: "客单价", id: 8, param:"",show:true,align: "center",},
{ label: "动销率", id: 9, param:"",show:true,align: "center",},
{ label: "待发货", id: 10, param:"wait_deliver_goods_num",show:true,align: "center",},
{ label: "待售后", id: 11, param:"wait_sale_after_num",show:true,align: "center",},
// { label: "", id:12, param:"",show:true,align: "center",},
{ label: "运营收入", id:13, param:"operating_income",show:true,align: "center",},
// { label: "", id:14, param:"operating_income",show:true,align: "center",},
],
});
const newtableData=computed(()=>{
if (data.tableDate.length == 0) return;
let result = [];
let truncatedAccount = ''
// const arr = this._.cloneDeep(data.tableDate);
const arr = JSON.parse(JSON.stringify(data.tableDate));
arr.sort((a, b) => b.sales_num - a.sales_num);
result = arr.map((item) => [{ ...item }, { ...item }]).flat();
result.map((e, i) => {
if (e && e.account && e.account.length > 11) {
truncatedAccount = e.account.substring(0, 11) + '...';
} else {
truncatedAccount = e.account;
}
e.index=i/2 + 1;
// this.$set(e, "index", i/2 + 1);
if (i % 2 === 0) {
e.account=truncatedAccount;
e.render=true;
e.checked=false;
} else {
e.render=false;
}
});
console.log('--------000',result);
return result;
});
const tablelabelLen=computed(()=>{
let num = 0;
data.tableLabel.forEach((item) => {
if (item.show) {
num++;
}
});
return num;
});
const height=computed(()=>{
let height = "";
height = document.documentElement.clientHeight - 180;
return height;
});
const salesPayment = computed(() => {
let num = 0;
data.tableDate.forEach((item) => {
if (item.sales_amount !== undefined && item.sales_amount !== null) {
num += Number(item.sales_amount);
}
});
return num;
});
const colspanMethod = ({ _rowIndex, _columnIndex }) => {
if (_rowIndex % 2 === 0) {
if (_columnIndex === 0) {
return { rowspan: 0, colspan: 1 };
} else if (_columnIndex === 1) {
return { rowspan: 1, colspan: tablelabelLen.value };
} else {
return { rowspan: 0, colspan: 0 };
}
}
};
//
const getSiteOperation=()=>{
data.headerLoading = true;
const obj = {
...data.formLabelAlign
}
site_operation_data_statistics({start_time:obj.start_time,end_time:obj.end_time,account_config_id:obj.account_config_id}).then((res)=>{
if(res.errcode==0){
data.operateData = res.datas;
if(res.datas.refunds_info){
data.refundsInfo = res.datas.refunds_info[0]
data.salesInfo = res.datas.sales_info[0]
}
data.headerLoading = false;
}
});
}
//
const getYesterOperation=()=>{
// this.loading = true;
const obj = {
...data.yesterTime
}
site_operation_data_statistics({start_time:obj.start_time,end_time:obj.end_time,account_config_id:obj.account_config_id}).then((res)=>{
if(res.errcode==0){
data.operateYesterData = res.datas;
if(res.datas.refunds_info){
data.yesterRefundsInfo = res.datas.refunds_info[0];
data.yrsterSalesInfo = res.datas.sales_info[0];
}
}
});
}
//
const tableTimeChange=(e)=>{
// console.log('-----------------333',e,this.radio1);
if (e == '今日' || data.radio1 == '今日') {
//
let todaytime = getToday();
data.formLabelAlign.start_time = new Date(todaytime.starttime).getTime();
data.formLabelAlign.end_time = new Date(todaytime.endtime).getTime();
getSiteOperation()
yesterTimeChange(e)
data.transactionDataTime1 = ''
} else if (e == '本月') {
let currMonth = getCurrMonthDays();
data.formLabelAlign.start_time = new Date(currMonth.starttime).getTime();
data.formLabelAlign.end_time = new Date(currMonth.endtime).getTime();
getSiteOperation()
yesterTimeChange(e)
data.transactionDataTime1 = ''
} else {
data.headerLoading = true;
setTimeout(()=>{
data.headerLoading = false;
},300)
};
}
//
const currentTime=()=>{
let todaytime = getToday();
data.formLabelAlign.start_time = new Date(todaytime.starttime).getTime();
data.formLabelAlign.end_time = new Date(todaytime.endtime).getTime();
}
//
const yesterdayTime=()=>{
let todaytime = getYesterday();
data.yesterTime.start_time = new Date(todaytime.starttime).getTime();
data.yesterTime.end_time = new Date(todaytime.endtime).getTime();
}
const yesterTimeChange=(e)=>{
if (e == '今日' || data.radio1 == '今日') {
//
let todaytime = getYesterday();
data.yesterTime.start_time = new Date(todaytime.starttime).getTime();
data.yesterTime.end_time = new Date(todaytime.endtime).getTime();
getYesterOperation();
} else if (e == '本月') {
let lastMonth = getLastMonthDays();
data.yesterTime.start_time = new Date(lastMonth.starttime).getTime();
data.yesterTime.end_time = new Date(lastMonth.endtime).getTime();
// console.log('--------66',this.yesterTime);
getYesterOperation()
} else {
};
}
//change
const transactionchange1=(e)=>{
console.log(e,"111");
data.formLabelAlign.start_time = e[0];
data.formLabelAlign.end_time = e[1];
getSiteOperation();
}
//
const getSiteAccount=()=>{
get_site_account().then(res=>{
data.accountData = res.datas
// console.log('----------222',this.accountData);
})
}
const serviceProvide=()=>{
service_provider_list().then(res=>{
if(res.errcode==0){
data.serviceList = res.datas;
}else{
ElMessage(res.msg)
}
});
}
const seleteChange=(val)=>{
data.formLabelAlign.account_config_id = val
data.yesterTime.account_config_id = val
getSiteOperation()
getYesterOperation()
}
const siteOperationDetails=()=>{
data.loading = true;
const obj = {
...data.formLabelAlign2
}
site_operation_data_details({start_time:obj.start_time,end_time:obj.end_time,account_config_id:obj.account_config_id,p_user_id:obj.p_user_id}).then(res=>{
if(res.errcode==0){
console.log(res.datas);
data.tableDate = res.datas
data.numberAll = res.datas.length
// console.log('------------333',this.tableDate);
data.loading = false
}
})
}
const search=()=>{
siteOperationDetails()
}
//
const tableTimeChange2=(e)=>{
// console.log('-----------------333',e,this.radio1);
if (e == '今日' || data.radio2 == '今日') {
//
let todaytime = getToday();
data.formLabelAlign2.start_time = new Date(todaytime.starttime).getTime();
data.formLabelAlign2.end_time = new Date(todaytime.endtime).getTime();
siteOperationDetails()
data.transactionDataTime2 = '';
} else if (e == '本月') {
let currMonth = getCurrMonthDays();
data.formLabelAlign2.start_time = new Date(currMonth.starttime).getTime();
data.formLabelAlign2.end_time = new Date(currMonth.endtime).getTime();
siteOperationDetails()
data.transactionDataTime2 = '';
} else {
};
}
//
const currentTime2=()=>{
let todaytime = getToday();
data.formLabelAlign2.start_time = new Date(todaytime.starttime).getTime();
data.formLabelAlign2.end_time = new Date(todaytime.endtime).getTime();
}
//change
const transactionchange2=(e)=>{
data.formLabelAlign2.start_time = e[0];
data.formLabelAlign2.end_time = e[1];
siteOperationDetails();
}
const seleteChange2=(val)=>{
data.formLabelAlign2.p_user_id = val
}
const seleteChange3=(val)=>{
data.formLabelAlign2.account_config_id = val
}
const resetData=()=>{
data.formLabelAlign2 = {},
data.form.region1 = ''
data.form.region2 = ''
data.radio2 = '今日'
currentTime2()
siteOperationDetails()
}
//
const refreshhandler=()=>{
resetData()
}
currentTime()
currentTime2()
getSiteOperation()
getSiteAccount()
serviceProvide()
siteOperationDetails()
yesterdayTime()
getYesterOperation()
</script>
<style lang="scss" scoped>
.iconjingshi div {
display: none; /*默认隐藏*/
}
.iconjingshi:hover div {
display: initial; /*当鼠标hover时展示*/
}
.formContainer{
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom:15px;
.leftBox{
font-weight: 800;
}
.righrContainer{
display: flex;
align-items:center;
}
.rightBox{
display: flex;
margin-top: 3px;
margin-left: 10px;
// align-items: center;
.righttime{
margin-left: 10px;
}
}
}
.header{
display: flex;
// .left{
// height: 100px;
// width: 200px;
// background-color: #f7f8f9;
// margin-right: 10px;
// .serve{
// width: 175px;
// height: 50%;
// padding: 10px 10px;
// }
// }
.right{
width: 100%;
height: 210px;
.top{
display: flex;
height: 100px;
margin-bottom: 10px;
.one{
width: 16.66%;
height: 100%;
// background-color: orange;
background-color: #f7f8f9;
margin-left: 10px ;
padding: 10px 10px;
}
}
.bottom{
display: flex;
height: 100px;
width: 100%;
// background-color: skyblue;
.one{
height: 100%;
// width: 375px;
background-color: #f7f8f9;
margin-left: 10px;
}
.two{
height: 100%;
// width: 246px;
background-color: #f7f8f9;
margin-left: 10px;
}
.salesNum{
width: calc((100% - 50px)*(2 / 6) + 10px) ;
}
.refundsNum{
width: calc((100% - 50px)*(2 / 6) + 10px) ;
}
.payment{
width: calc((100% - 50px)*(1 / 6)) ;
}
.turnover{
width: calc((100% - 50px)*(1 / 6)) ;
}
}
}
}
// @media screen and (max-width: 1600px) {
// .header{
// .left{
// width: 200px;
// .serve{
// width: 175px;
// }
// }
// .right{
// // width: 1244px;
// width: calc(1280px * 80%);
// .top{
// width: calc(1280px * 80%);
// .one{
// width: 20%;
// }
// }
// .bottom{
// width: 100%;
// .one{
// width: 350px;
// }
// .two{
// width: 200px;
// }
// }
// }
// }
// }
// @media screen and (min-width: 1800px) {
// .header{
// .left{
// width: 200px;
// .serve{
// width: 175px;
// }
// }
// .right{
// // width: 1244px;
// width: calc(1280px * 120%);
// .top{
// width: calc(1280px * 120%);
// .one{
// width: 20%;
// }
// }
// .bottom{
// width: 100%;
// .one{
// // width: 412px;
// width:450px;
// }
// .two{
// // width: 270px;
// width:295px;
// }
// }
// }
// }
// }
.rightBottomBox{
display: flex;
}
.tableGap{
display: flex;
row-gap: 10px;
}
.topSpan{
span{
font-size: 14px;
color: #3D3D3D;
letter-spacing: 1px;
font-weight: normal;
margin-left: 30px;
}
}
::v-deep{
.vxe-table--header{
text-align: center;
}
}
.spanBottom{
display: inline-block;
text-align: center;
width: 100%;
}
.aIcon{
position: relative;
margin: 0px 8px 0 0 ;
.el-icon-takeaway-box{
position: absolute;
left: -20px;
top: 1px
}
.el-icon-user{
position: absolute;
left: -20px;
top: -1px
}
}
.bottomContainer{
background: #EEEEEE;
padding: 10px 20px 20px 25px;
.bottomBox{
background-color: #FFFFFF;
padding: 10px 20px 20px 20px;
}
}
// ::v-deep {
// .vxe-table--body .col--seq:nth-child(odd) :after {
// content: "";
// position: absolute;
// top: 0px;
// right: -5px;
// display: inline-block;
// width: 20px;
// height: calc(100% - 1px);
// background-color: #ffffff;
// }
// .vxe-body--row.row--hover {
// .col--seq:nth-child(odd) :after {
// background-color: #f5f7fa;
// }
// }
// /* */
// .vxe-table .vxe-table--body-wrapper,
// .vxe-table .vxe-table--footer-wrapper {
// border: none;
// background-color: rgba(255, 255, 255);
// }
// .col--seq:nth-child(odd) {
// display: flex;
// align-items: center;
// justify-content: center;
// }
// .vxe-body--row:nth-child(even) {
// background-color: rgb(248 248 249);
// }
// }
</style>

View File

@ -0,0 +1,434 @@
<template>
<div class="Special_offer_box">
<div class="table_box_header">
<el-tabs class="demo-tabs" v-model="activeName" @tab-change="TabChange">
<el-tab-pane
v-for="item in tabs"
:key="item.value"
:label="item.label"
:name="item.value"
></el-tab-pane>
</el-tabs>
<SearchForm :inputs="Inputs" @onSearch="onSearch" @onRest="onRest" />
</div>
<div class="table_box_center">
<Table
ref="TableRef"
:key="TableKey"
:TabLoading="TabLoading"
:TableData="TableData"
:TableLabel="TableLabel"
>
<template #OperateButton="{ row }">
<OperateButton
:ButtonList="row.ButtonGroup"
:row="row"
></OperateButton></template
></Table>
<PaginaTion
:total="totalNumbel"
v-model:current-page="orderInfoDto.pageNo"
v-model:page-size="orderInfoDto.pageSize"
@handleSizeChange="handleSizeChange"
@handleCurrentChange="getDatas"
></PaginaTion>
</div>
</div>
</template>
<script setup>
import { ref, unref, computed, reactive, onMounted } from "vue";
import { router } from "@/router.js";
import { Plus } from "@element-plus/icons-vue";
import { ElMessage } from "element-plus";
import SearchForm from "@components/searchForm/index.vue";
import Table from "@components/table.vue";
import OperateButton from "@/components/OperateButton.vue";
import PaginaTion from "@components/Pagination.vue";
import {
order_info,
// get_commodity_id,
// publish,
// pull_off,
// delete_one,
} from "@/api/OrderManagement";
import { getshopInfo } from "@/api/newlybuiltgoods";
const activeName = ref("");
const tabs = ref([
{ label: "全部", value: "", total: 0 },
{ label: "订单已创建", value: "1", total: 0 },
{ label: "待发货", value: "2", total: 0 },
{ label: "已发货", value: "3", total: 0 },
{ label: "交易成功", value: "4", total: 0 },
{ label: "已退款", value: "5", total: 0 },
{ label: "交易关闭", value: "6", total: 0 },
{ label: "待处理", value: "0", total: 0 },
]);
const Inputs = ref([
{
type: "el-input",
placeholder: "查询订单编号",
title: "订单编号",
name: "commodityId",
value: "",
popover: true,
},
{
type: "el-select",
placeholder: "请选择闲鱼店铺",
title: "闲鱼店铺",
name: "xyId",
value: "",
options: [],
},
{
type: "el-select",
placeholder: "请选择订单状态",
title: "订单状态",
name: "",
value: "",
options: [
],
},
{
type: "el-select",
placeholder: "请选择订单类型",
title: "订单类型",
name: "",
value: "",
options: [
],
},
{
type: "el-input",
placeholder: "请输入买家电话",
name: "",
value: "",
title: "买家电话",
},
{
type: "el-date-picker",
title: "创建时间",
placeholder: "",
name: "createTime",
value: [],
width: "215px",
},
{
type: "el-date-picker",
title: "付款时间",
placeholder: "",
name: "",
value: [],
width: "215px",
},
{
type: "el-date-picker",
title: "发货时间",
placeholder: "",
name: "",
value: [],
width: "215px",
},
{
type: "el-date-picker",
title: "交易成功时间",
placeholder: "",
name: "",
value: [],
width: "215px",
},
]);
const TableRef = ref(null);
const TableKey = ref(new Date().getTime());
const TabLoading = ref(false);
const TableData = ref([]);
const TableLabel = ref([
{
label: "订单编号",
param: "",
align: "center",
show: true,
display: "top_left",
},
{
label: "创建时间",
param: "createTime",
align: "center",
show: true,
display: "top_left",
},
{
label: "付款时间",
param: "",
align: "center",
show: true,
display: "top_left",
},
{
label: "发货时间",
param: "",
align: "center",
show: true,
display: "top_left",
},
{
label: "商品",
param: "",
align: "center",
show: true,
minwidth: "210",
},
{
label: "订单状态",
param: "",
align: "center",
show: true,
minwidth: "150",
},
{
label: "规格",
param: "",
align: "center",
show: true,
minwidth: "150",
},
{
label: "商品总价(元)",
param: "",
align: "center",
show: true,
minwidth: "150",
},
{
label: "订单类型",
param: "",
align: "center",
show: true,
minwidth: "150",
},
{
label: "买家信息",
param: "",
align: "center",
show: true,
minwidth: "150",
},
{
label: "闲鱼店铺",
param: "xyName",
align: "center",
show: true,
minwidth: "150",
},
{
label: "操作",
align: "center",
show: true,
fixed: "right",
minwidth: "150",
},
]);
const New_TableLabel = ref([]);
const ButtonListGroup = ref([
{
AssemblyName: "el-link",
name: "编辑",
show: false,
type: "primary",
mode: "detail",
confirm: (row) => {
// get_commodity_id(row.id).then((res) => {
// if (res.code === "200") {
// router.push({
// path: "/NewlyBuiltGoods",
// query: {
// params: JSON.stringify(res.data),
// },
// });
// }
// });
},
},
{
AssemblyName: "el-link",
name: "复制",
show: false,
type: "primary",
mode: "detail",
confirm: (row) => {},
},
{
AssemblyName: "el-link",
name: "上架",
show: false,
type: "primary",
mode: "detail",
confirm: (row) => {
// publish(row.id).then((res) => {
// if (res.code === "200") {
// ElMessage.success(res.msg);
// getDatas();
// }
// });
},
},
{
AssemblyName: "el-popconfirm",
name: "下架",
title: "是否下架?",
cancelText: "不用了",
popconfirmIcon: "el-icon-info",
iconColor: "red",
type: "danger",
show: false,
confirm: (row) => {
// pull_off(row.id).then((res) => {
// if (res.code === "200") {
// ElMessage.success(res.msg);
// getDatas();
// }
// });
},
},
{
AssemblyName: "el-popconfirm",
name: "删除",
title: "是否删除?",
cancelText: "不用了",
popconfirmIcon: "el-icon-info",
iconColor: "red",
type: "danger",
show: false,
confirm: (row) => {
delete_one(row.id).then((res) => {
if (res.code === "200") {
ElMessage.success(res.msg);
getDatas();
}
});
},
},
{
AssemblyName: "el-link",
name: "日志",
show: false,
type: "warning",
mode: "detail",
confirm: (row) => {},
},
]);
let orderInfoDto = reactive({
pageNo: 1,
pageSize: 20,
publishStatus: "",
});
const totalNumbel = ref(0);
const getDatas = () => {
TabLoading.value = true;
order_info(orderInfoDto)
.then((res) => {
TabLoading.value = false;
if (res.code === "200") {
const newData = Object.assign([], res.data.data);
newData.map((item) => {
item.ButtonGroup = ButtonListGroup.value.map((el) => {
if (
(el.name === "编辑" &&
[1, -4, -2].includes(item.publishStatus)) ||
(el.name === "下架" && [-3].includes(item.publishStatus)) ||
(el.name === "复制" &&
[1, -2, -3, -4, 3].includes(item.publishStatus)) ||
(el.name === "上架" && [-2, -4].includes(item.publishStatus)) ||
(el.name === "删除" && [1, -4, -2].includes(item.publishStatus))
) {
return { ...el, show: true };
}
return el;
});
});
console.log(newData);
TableData.value = newData;
totalNumbel.value = res.data.totalCount;
}
})
.catch((err) => {
TabLoading.value = false;
});
};
//
const onSearch = (value) => {
if (value.createTime) {
value.startCreateTime = new Date(value.createTime[0]).getTime();
value.endCreateTime = new Date(value.createTime[1]).getTime() + 86399999;
} else if (value.shelfTime) {
value.startShelfTime = new Date(value.shelfTime[0]).getTime();
value.endShelfTime = new Date(value.shelfTime[1]).getTime() + 86399999;
}
orderInfoDto = {
...orderInfoDto,
...value,
};
getDatas();
};
//
const onRest = (value) => {
orderInfoDto = {
pageNo: 1,
pageSize: 20,
publishStatus: activeName.value,
};
getDatas();
};
const get_shopInfo = () => {
getshopInfo().then((res) => {
if (res.code === "200") {
const storeList = [];
res.data.forEach((item) => {
storeList.push({ label: item.xyName, value: item.id });
});
Inputs.value.find((e) => e.title == "闲鱼店铺").options = storeList;
}
});
};
onMounted(() => {
TabChange();
get_shopInfo();
});
const handleSizeChange = () => {
orderInfoDto.pageNo = 1;
getDatas();
};
const TabChange = (val) => {
orderInfoDto.publishStatus = activeName.value;
getDatas();
TableLabel.value.forEach((e) => {
e.show = !(
e.hasOwnProperty("NumberType") && !e.NumberType.includes(Number(val))
);
});
New_TableLabel.value = TableLabel.value;
TableKey.value = new Date().getTime();
};
</script>
<style lang="scss" scoped>
.Special_offer_box {
height: calc(100vh - 38px);
background: #f1f2f5;
}
.table_box_header {
width: 100%;
padding: 0 20px;
box-sizing: border-box;
background: #fff;
}
.table_box_center {
padding: 20px;
box-sizing: border-box;
}
</style>

View File

@ -1,404 +0,0 @@
<template>
<div>
<div class="w">
<el-row>
<el-col style="margin-top: 7px">
<el-card>
<el-button type="primary" size="small" @click="search"
>刷新</el-button
>
</el-card>
</el-col>
<el-col style="margin-top: 15px">
<el-table :data="data.tableData" style="width: 100%" height="250" v-loading="data.loading">
<el-table-column :fixed="item.fixed" :prop="item.param" :label="item.label" width="150" v-for="(item,index) in data.tableLabel" :key="String(index)">
<template #default="scope">
<span v-if="item.label=='状态'">{{scope.row[item.param]=='0'?"正常":"异常"}}</span>
<el-button size="small" type="primary" @click="editUserDate('edit', scope.row)" v-if="item.label=='操作'">
编辑
</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<el-dialog
:close-on-click-modal="false"
v-model="data.addEditUser"
:width="700"
:title="data.title"
>
<el-row>
<el-form
ref="ruleFormRef"
:model="ruleForm"
:rules="data.rules"
:width="120"
:label-width="120"
>
<el-col :span="24">
<el-form-item prop="name" label="用户名称">
<el-input
v-model="ruleForm.name"
placeholder="请输入用户名称"
size="small"
:disabled="true"
style="width: 200px"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="company_unique_id" label="公司ID">
<el-input
:disabled="true"
v-model="ruleForm.company_unique_id"
placeholder="请输入公司账号ID"
size="small"
style="width: 200px"
@change="namechange"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="status" label="状态">
<el-select v-model="ruleForm.status" size="small" style="width: 200px">
<el-option label="正常" value="0" />
<el-option label="失效" value="1" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="account_config_id" label="授权店铺">
<el-select
v-model="ruleForm.account_config_id"
size="small"
multiple
clearable
style="width: 200px"
filterable
collapse-tags
placeholder="请选择"
>
<el-option
v-for="item in data.accountList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="收费内容" >
<el-select
v-model="ruleForm.ag_server_fee_id"
multiple
size="small"
:disabled="true"
clearable
filterable
style="width: 200px"
placeholder="请选择"
>
<el-option
v-for="item in data.options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col style="text-align: right">
<el-button size="small" @click="data.addEditUser = false"
>取消</el-button
>
<el-button size="small" type="primary" @click="submit(ruleFormRef)"
>确定</el-button
>
</el-col>
</el-form>
</el-row>
</el-dialog>
</div>
</div>
</template>
<script setup>
import CoatPriceTable from "@components/newtable/index.vue";
import Pagination from "@components/pagination/pagination.vue";
import {
get_ag_service,
service_provider_edit,
service_provider_list,
search_account,
get_search_company,
batch_start_exemption,
batch_stop_exemption,
} from "@/api/FundDetails";
import { account_config_list } from "@/api/user";
import { ElMessage } from "element-plus";
import { computed, reactive,ref,onMounted } from 'vue';
import {debunce} from "@services/commont";
const ruleFormRef=ref(null);
const ruleForm=ref({
name: "",
company_unique_id: "",
status: "",
account_config_id: "",
});
const data=reactive({
addEditUser: false,
loading: false,
title: "",
p_user_id: "",
accountList: [],
tableData: [],
value2: [],
value3: "",
options: [],
rules: {
company_unique_id: [
{ required: true, message: "请输入公司ID", trigger: "blur" },
],
name: [{ required: true, message: "请输入用户名称", trigger: "blur" }],
status: [{ required: true, message: "请选择状态", trigger: "change" }],
desc: [{ required: true, message: "请填写公司名称", trigger: "blur" }],
account_config_id: [
{ required: true, message: "请选择授权店铺", trigger: "blur" },
],
},
page: {
total: 0, //
pageSize: 100, //
pageNum: 1, //
pagesizes: [100, 200, 500, 1000, 2000],
},
inputDate: [{ label: "账号", prop: "accout" }],
tableLabel: [
{ label: "商户名称", param: "name", align: "center", show: true },
// { label: '', param: 'account_num', align: 'center', show: true },
{ label: "公司名称", param: "truename", align: "center", show: true },
{ label: "公司账号", param: "company_unique_id", align: "center", show: true },
{ label: "授权店铺", param: "dianpu", align: "center", show: true },
{ label: "状态", param: "status", align: "center", show: true },
{
label: "操作",
param: "serviceProviderList",
align: "center",
fixed:'right',
show: true,
},
],
selectdateList: [],
});
//
const get_search_account=(e)=>{
get_search_company({company_id:e}).then((res)=>{
if (res.errcode == 0) {
ruleForm.value.p_user_id = res.datas.p_user_id;
if (res.datas.p_user_id == null) {
ElMessage("没有找到此账号!");
}
}
});
}
//
const getList=()=>{
data.loading = true;
service_provider_list({ type: ["2"]}).then((res)=>{
if(res.errcode==0){
data.tableData = res.datas;
data.tableData.forEach((item) => {
item.is_exemption
? (item.is_exemption = true)
: (item.is_exemption = false);
if (item.account.length > 0) {
item.account_num = item.account[0].account;
item.dianpu = item.account[0].contact_name;
}
});
data.loading = false;
}
});
// this.page.total = res.datas.total
}
const getCompanyId=debunce(get_search_account,500);
const getListApi=debunce(getList,1000);
const search=()=>{
getListApi();
}
const submit=(formName)=>{
formName.validate(async (valid) => {
if (valid) {
const obj = { ...ruleForm.value};
if(obj.is_exemption){
obj.is_exemption = 1
}else{
obj.is_exemption = 0
}
service_provider_edit(obj).then((res)=>{
if(res.errcode==0){
getListApi();
data.addEditUser = false;
}else{
ElMessage(res.msg);
}
});
} else {
console.log("error submit!!");
ElMessage("表单内容有误");
return false;
}
});
}
//
const getService_provider_list=()=>{
data.loading=true;
get_ag_service().then((res1)=>{
if(res1.errcode==0){
if (res1.datas.length !== 0) {
data.options = res1.datas.map((item) => {
return {
label: item.name,
value: item.ag_server_fee_id,
};
});
}
data.loading=false;
}else{
data.loading=false;
}
});
account_config_list({
is_config_data: 1,
status: [1],
jstatus: 1,
class_id: "17",
}).then((res2)=>{
if(res2.errcode==0){
data.accountList = res2.datas.datas_list.map((item) => {
return {
label: item.account,
value: item.account_config_id,
};
});
}
});
}
//
const editUserDate=(str, row)=>{
data.addEditUser = true;
if (str === "add") {
data.title = "新增用户";
ruleForm.value= {};
} else {
data.title = "编辑用户";
ruleForm.value = row;
row.is_exemption == 1
? ( ruleForm.value.is_exemption = true)
: ( ruleForm.value.is_exemption = false);
row.ag_server_fee_id == 0
? ( ruleForm.value.ag_server_fee_id = "")
: ( ruleForm.value.ag_server_fee_id = row.ag_server_fee_id);
ruleForm.value .status = ruleForm.value.status.toString();
ruleForm.value .ag_server_fee_id = ruleForm.value.server_fee_map;
}
}
//
const handleCurrentChange=(data)=>{
data.loading = true;
Object.assign(data.formLabelAlign, data);
gettableDate();
}
//
const handleSizeChange=(data)=>{
data.loading = true;
Object.assign(data.formLabelAlign, data);
gettableDate();
}
// change
const namechange=(e)=>{
if (e != "") {
getCompanyId(e);
}
}
const SelectionChange=(val)=>{
data.selectdateList = val;
}
const changeInspection=(row)=>{
const params = [row.id];
if (row.is_exemption) {
batch_start_exemption({ ids: params }).then((res) => {
if (res.errcode === 0) {
data.selectdateList = [];
getList();
}
});
} else {
batch_stop_exemption({ ids: params }).then((res) => {
if (res.errcode === 0) {
data.selectdateList = [];
getList();
}
});
}
}
const openInspection=()=>{
if (!this.selectdateList.length) {
ElMessage("请先勾选机器");
return;
}
const params = [];
data.selectdateList.forEach((item) => {
params.push(item.id);
});
batch_start_exemption({ ids: params }).then((res) => {
if (res.errcode === 0) {
data.selectdateList = [];
getList();
}
});
}
const offInspection=()=>{
if (!data.selectdateList.length) {
ElMessage("请先勾选机器");
return;
}
const params = [];
data.selectdateList.forEach((item) => {
params.push(item.id);
});
batch_stop_exemption({ ids: params }).then((res) => {
if (res.errcode === 0) {
data.selectdateList = [];
this.getList();
}
});
}
getService_provider_list();
getList();
</script>
<style lang="scss" scoped>
.w {
margin: 0 15px;
}
</style>

View File

@ -1,420 +0,0 @@
<template>
<div class="salecontainer">
<div class="saletopbox">
<!-- <el-tabs v-model="activeName" class="demo-tabs" @tab-click="onTabChange">
<el-tab-pane v-for="item in tabsdatas" :key="item.value" :label="renderlaebl(item)"
:name="item.value"></el-tab-pane>
</el-tabs> -->
<div class="searchbox">
<el-input v-model="imeivalue" size="large" class="topinput" placeholder="查询IMEI/SN/机器编号">
<!-- <template #suffix>
<i class="iconfont icon-icon-piliangcaozuo imeiicondefault"
:class="imeipopover ? 'imeiiconActive' : 'imeiicon'" style="font-size: 12px;"
@click.prevent="imeiiconClick"></i>
</template> -->
</el-input>
<el-input v-model="imeivalue" size="large" class="topinput" placeholder="查询质检码">
<!-- <template #suffix>
<i class="iconfont icon-icon-piliangcaozuo imeiicondefault"
:class="imeipopover ? 'imeiiconActive' : 'imeiicon'" style="font-size: 12px;"
@click.prevent="imeiiconClick"></i>
</template> -->
</el-input>
<el-button type="primary">查询</el-button>
<el-button>重置</el-button>
</div>
</div>
<Table :data="list" @looksLogs="looksLogs" @delivery="doDelivery" :columns="newcolumns" :loading="loading"
:pageSize="pageSize" :page="page" :total="total" :handleSizeChange="handleSizeChange"
:handleCurrentChange="handleCurrentChange" @quality="onQuality" @processing="onProcessing"
@judgment="onJudgment" />
</div>
</template>
<script setup>
import { ref, unref, computed, reactive } from 'vue';
import Table from "@components/qcTable.vue";
import axioshooks from "@axioshooks";
import { ElMessage } from "element-plus";
import { formatDate } from "@services/commont";
import DriverForm from "@components/driverForm/index.vue"
import { useRouter } from 'vue-router';
import { Plus } from "@element-plus/icons-vue";
import { initOss } from '@services/commont';
const router = useRouter();
const activeName = ref('0');
const imeipopover = ref(false);
const imeivalue = ref('');
const pageSize = ref(10);
const page = ref(1);
const total = ref(0);
const loading = ref(false);
const logsList = ref(false);
const logsState = ref(false);
const logsloading = ref(false);
const draveState = ref(false);
const refund_status = ref('');
const DeliveryInfoList = ref({});
const processState = ref(false);
const processData = ref({ xy_sale_after_additional_id: '' });
const processValue = ref(1);
const judgState = ref(false);
const judgData = ref({ xy_sale_after_additional_id: '' });
const judgValue = ref({ mode: "1", info: "", imageUrl: "" });
const imeiiconClick = () => {
}
const renderlaebl = (item) => {
if (item.total > 0) {
return `${item.label} ${item.total}`
}
return item.label
}
const list = ref([]);
const columns = [
{
dataKey: `machine_name`,
label: "机器信息",
width: 300,
show: true,
align: "center",
},
{
dataKey: `title`,
label: "商品标题",
show: true,
width: 100,
align: "center",
},
{
dataKey: `merchant_name`,
label: "闲鱼账号",
width: 100,
align: "center",
}, {
dataKey: `price`,
label: "订单价格",
width: 100,
align: "center",
}, {
dataKey: `buy_info`,
label: "买家信息",
width: 150,
align: "center",
show: true,
}, {
dataKey: `buyer_apply_reason`,
label: "售后原因",
show: true,
align: "center",
width: 100,
align: "center",
}, {
dataKey: `inspect_report`,
label: "售前质检报告",
width: 150,
show: true,
align: "center",
}, {
key: `买家退货物流`,
dataKey: `refund_post_no`,
label: "买家退货物流",
width: 150,
show: true,
align: "center",
},
{
key: `收货人`,
dataKey: ``,
label: "收货人",
width: 150,
show: true,
align: "center",
},
{
key: `质检员`,
dataKey: ``,
label: "质检员",
width: 150,
show: true,
align: "center",
},
{
key: `操作`,
dataKey: `opction`,
label: "操作",
width: 120,
show: true,
align: "center",
status: []
}
];
const newcolumns = computed(() => {
let cludata = Object.assign([], columns);
return cludata;
});
const getDatas = (p) => {
page.value = p ? p : 1;
loading.value = true;
total.value = 0;
axioshooks({
data: { sale_after_additional_status: Number(activeName.value) < 9 ? activeName.value : "0", list_row: pageSize.value, page: page.value, refund_status: refund_status.value },
url: "trusteeship/after_sales_list",
customHandler: (err, e) => {
if (!err && e) {
if (e.errcode == 0) {
list.value = e.datas.datas_list;
total.value = e.datas.total;
loading.value = false;
} else {
ElMessage(e.msg);
loading.value = false;
}
} else if (err) {
ElMessage(err);
loading.value = false;
}
}
});
}
getDatas(1);
const handleSizeChange = (v) => {
pageSize.value = v;
getDatas(1);
}
const looksLogs = (data) => {
logsloading.value = true;
logsState.value = true;
axioshooks({
data: { refund_id: data.after_sales_order_number },
url: "xy/sale_after_log",
customHandler: (err, e) => {
if (!err && e) {
if (e.errcode == 0) {
logsList.value = e.datas;
logsloading.value = false;
} else {
ElMessage(e.msg);
logsloading.value = false;
}
} else if (err) {
ElMessage(err);
logsloading.value = false;
}
}
});
}
const doDelivery = (data) => {
draveState.value = true;
logsloading.value = true;
axioshooks({
data: { xy_sale_after_additional_id: data.xy_sale_after_additional_id },
url: "trusteeship/shipping_info",
customHandler: (err, e) => {
if (!err && e) {
if (e.errcode == 0) {
DeliveryInfoList.value = Object.assign({}, data, e.datas);
logsloading.value = false;
} else {
ElMessage(e.msg);
logsloading.value = false;
}
} else if (err) {
ElMessage(err);
logsloading.value = false;
}
}
});
}
const handleCurrentChange = (v) => {
getDatas(v);
}
const DeliveryCancel = () => {
draveState.value = false;
}
const DeliveryConfirm = () => {
draveState.value = false;
getDatas(page.value);
}
const onProcessing = (data) => {
processData.value = data;
processState.value = true;
}
const onJudgment = (data) => {
judgState.value = data;
judgData.value = true;
}
const onQuality = (data) => {
router.push({ path: 'qualityWork', query: { xy_sale_after_additional_id: data.xy_sale_after_additional_id } });
}
const doProcess = (data) => {
if (!processValue.value) {
ElMessage('请选择处理结果');
return false;
}
if (!data.xy_sale_after_additional_id) {
ElMessage('非法点击');
return false;
}
axioshooks({
url: 'trusteeship/exception_handling',
data: { address_accord_with: processValue.value, xy_sale_after_additional_id: data?.xy_sale_after_additional_id },
customHandler: (err, e) => {
if (!err && e) {
if (e.errcode == 0) {
ElMessage("操作成功");
processData.value = {};
processValue.value = 1;
processState.value = false;
getDatas(page.value);
} else {
ElMessage(e.msg);
}
} else if (err) {
ElMessage(err);
}
}
});
}
const doJudg = (data) => {
if (!judgValue.value.mode) {
ElMessage('请选择处理结果');
return false;
}
// if(!data.xy_sale_after_additional_id){
// ElMessage('');
// return false;
// }
axioshooks({
url: 'trusteeship/judgment_responsibility',
data: { responsibility_type: judgValue.value.mode, xy_sale_after_additional_id: data?.xy_sale_after_additional_id, responsibility_explanation: judgValue.value.info, responsibility_img: judgValue.value.imageUrl },
customHandler: (err, e) => {
if (!err && e) {
if (e.errcode == 0) {
ElMessage("操作成功");
processData.value = {};
processValue.value = 1;
processState.value = false;
getDatas(page.value);
} else {
ElMessage(e.msg);
}
} else if (err) {
ElMessage(err);
}
}
});
}
const beforeAvatarUpload = (rawFile) => {
let types=["image/jpeg","image/png","image/gif","image/bmp","image/jpg"];
if(!types.includes(rawFile.type)){
ElMessage.error('图片格式有误!')
return false
}
if (rawFile.size / 1024 / 1024 > 2) {
ElMessage.error('Avatar picture size can not exceed 2MB!')
return false
}
initOss(rawFile).then((link)=>{
judgValue.value.imageUrl = link;
}).catch((err) => {
ElMessage(err.message);
});
return false;
}
</script>
<style lang="scss" scoped>
.avatar-uploader .avatar {
width: 80px;
height: 80px;
display: block;
}
.salecontainer {
background: #F1F2F5;
flex: 1;
display: flex;
flex-direction: column;
}
.saletopbox {
background: #fff;
padding: 20px;
}
.searchbox {
margin-top: 5px;
display: grid;
align-items: center;
grid-gap: 10px;
grid-template-columns: 3fr 3fr 1fr 1fr 4fr;
}
.receivingWorkbenchbox {
padding: 10px;
flex: 1;
}
.topinput {
height: 36px;
}
.imeiicondefault {
height: 26px;
width: 26px;
box-sizing: border-box;
border-radius: 4px;
background: #f0f2f5;
cursor: pointer;
}
.avatar-uploader .el-upload {
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 80px;
height: 80px;
text-align: center;
background: #f1f1f1;
}
</style>

View File

@ -1,752 +0,0 @@
<template>
<div class="salecontainer">
<SearchForm :inputs="Inputs" @onSearch="onSearch" @onRest="onRest"/>
<Table :data="list" @looksLogs="looksLogs" :select="false" :spanMethod="true" @onSelect="onSelect" @delivery="doDelivery" :columns="newcolumns" :loading="loading" :pageSize="pageSize" :page="page" :total="total" :handleSizeChange="handleSizeChange" :handleCurrentChange="handleCurrentChange" @quality="onQuality" @processing="onProcessing" @judgment="onJudgment" @ConfirmReceipt="onConfirmReceipt"/>
<el-dialog v-model="logsState" :before-close="()=>logsState=false" title="售后日志">
<el-table
:data="logsList"
border
height="260px"
style="width: 100%"
v-loading="logsloading"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
>
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="content" label="内容" min-width="180">
<template #default="scope">
<span v-if="scope.row.content">
{{ scope.row.content }}
</span>
<span v-else-if="scope.row.log_content">
{{ scope.row.log_content }}
</span>
<span v-else>
{{ scope.row.content }}
</span>
</template>
</el-table-column>
<el-table-column prop="truename" label="操作人">
<template #default="scope">
<span v-if="scope.row.truename">
{{ scope.row.truename }}({{ scope.row.username }})
</span>
<span v-else>
{{ scope.row.username }}
</span>
</template>
</el-table-column>
<el-table-column prop="add_time" label="操作时间" min-width="180" />
</el-table>
<template #footer>
<span class="dialog-footer">
<el-button size="small" @click="()=>logsState=false"> </el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="draveState" :before-close="()=>draveState=false" title="发货" :width="900">
<DriverForm :DeliveryInfoList="DeliveryInfoList" @deliveryConfirm="DeliveryConfirm" @deliveryCancel="DeliveryCancel"/>
</el-dialog>
<el-dialog v-model="processState" :before-close="()=>processState=false" title="人工处理" :width="600">
<el-radio-group v-model="processValue">
<el-radio :value="1">已核实地址符合情况--售后单状态改为待售后收货</el-radio>
<el-radio :value="2">忽略本次异常--状态改为已处理</el-radio>
</el-radio-group>
<div class="btnbox">
<el-button text class="btn" @click="()=>processState=false"
>取消<i
class="el-icon-circle-close"
style="margin-left: 5px"
/></el-button>
<el-button
text
type="primary"
class="btn"
@click="doProcess(processData)"
>确定</el-button
>
</div>
</el-dialog>
<el-dialog v-model="judgState" :before-close="()=>judgState=false" title="判责情况" :width="600">
<h4>判责</h4>
<el-radio-group v-model="judgValue.mode">
<el-radio :value="1">卖家责任</el-radio>
<el-radio :value="2">买家责任</el-radio>
</el-radio-group>
<el-row :gutter="24">
<el-col :span="12">
<h4>说明</h4>
<el-input placeholder="请输入说明" type="textarea" v-model="judgValue.info"></el-input>
</el-col>
<el-col :span="10">
<h4>图片</h4>
<el-upload
class="avatar-uploader"
:show-file-list="false"
:before-upload="beforeAvatarUpload"
>
<img v-if="judgValue.imageUrl" :src="judgValue.imageUrl" class="avatar" />
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
</el-upload>
</el-col>
</el-row>
<div class="btnbox">
<el-button text class="btn" @click="()=>judgState=false"
>取消<i
class="el-icon-circle-close"
style="margin-left: 5px"
/></el-button>
<el-button
text
type="primary"
class="btn"
@click="doJudg(judgData)"
>确定</el-button
>
</div>
</el-dialog>
<el-dialog v-model="receState.state" :before-close="()=>judgState=false" title="手动收货" :width="600">
<h4>快递单号/说明</h4>
<el-input placeholder="请输入快递单号/说明" type="textarea" v-model="receState.value"></el-input>
<div class="btnbox" style="margin-top:15px">
<el-button text class="btn" @click="()=>receState.state=false"
>取消<i
class="el-icon-circle-close"
style="margin-left: 5px"
/></el-button>
<el-button
text
type="primary"
class="btn"
@click="doRecive(receState.data)"
>确定</el-button
>
</div>
</el-dialog>
</div>
</template>
<script setup>
import { ref,unref,computed,reactive,onMounted} from 'vue';
import Table from "@components/table.vue";
import axioshooks from "@axioshooks";
import {ElMessage} from "element-plus";
import {formatDate} from "@services/commont";
import DriverForm from "@components/driverForm/index.vue"
import { useRouter } from 'vue-router';
import {Plus} from "@element-plus/icons-vue";
import SearchForm from "@components/searchForm/index.vue";
import { initOss } from '@services/commont';
const router=useRouter();
const activeName=ref('0');
const murecedata=reactive({
data:[],
state:false
});
const receState=reactive({
state:false,data:[],value:""
});
const imeipopover=ref(false);
const imeivalue=reactive({
imei:"",
inspect:""
});
const searchparams=reactive({
imei:"",
inspect:""
});
const pageSize=ref(10);
const page=ref(1);
const total=ref(0);
const loading=ref(false);
const logsList=ref(false);
const logsState=ref(false);
const logsloading=ref(false);
const draveState=ref(false);
const refund_status=ref('');
const DeliveryInfoList=ref({});
const processState=ref(false);
const processData=ref({xy_sale_after_additional_id:''});
const processValue=ref(1);
const judgState=ref(false);
const judgData=ref({xy_sale_after_additional_id:''});
const judgValue=ref({mode:"1",info:"",imageUrl:""});
const list=ref([]);
const select=computed(()=>{
if(activeName.value=="2"){
return true;
}else{
return false;
}
});
const onTabChange=(e)=>{
if(activeName.value!=e.props.name){
activeName.value=e.props.name;
if(e.props.name=="9"){
refund_status.value="1";
}else if(e.props.name=="10"){
refund_status.value="6";
}else{
refund_status.value="";
}
getDatas(1);
}
}
const params=ref({});
const onSearch=(values)=>{
values = {
...values,
quality_inspection_time_start:values.quality_inspection_time[0],
quality_inspection_time_end:values.quality_inspection_time[1]
}
params.value=values;
getDatas(1);
}
const onRest=()=>{
params.value={};
getDatas(1);
}
const renderlaebl=(item)=>{
if(item.total>0){
return `${item.label} ${item.total}`
}
return item.label
}
const mutrevice=()=>{
if(!murecedata.data){
ElMessage("请选择要收货的订单");
return false;
}
murecedata.state=true;
}
const onSelect=(values)=>{
murecedata.data=values;
}
const Inputs=ref([
{
type:"el-input",
placeholder:"查询IMEI/SN/机器编号",
value:"",
title:"IMEI/SN/机器编号",
name:"imei",
popover:true
},
{
type:"el-input",
placeholder:"查询质检码",
name:"quality_inspection_code",
value:"",
popover:true,
title:"查询质检码",
},
{
type:"el-input",
placeholder:"请输入销售单号",
name:"sales_order_number",
value:"",
title:"销售单号",
},
{
type:"el-input",
placeholder:"请输入售后订单号",
name:"after_sales_order_number",
value:"",
title:"售后订单号",
},
{
type:"el-input",
placeholder:"请输入商品名称",
name:"title",
value:"",
title:"商品名称",
},
{
type:"el-input",
placeholder:"请输入买家姓名",
name:"consignee_name",
value:"",
title:"买家姓名",
},
{
type:"el-input",
placeholder:"请输入买家手机号",
name:"consignee_phone",
value:"",
title:"买家手机号",
},
{
type:"el-input",
placeholder:"请输入买家地址",
name:"consignee_address",
value:"",
title:"收货人",
},
{
type:"el-input",
placeholder:"请输入快递单号",
name:"refund_post_no",
value:"",
title:"快递单号",
},
{
type:"el-date-picker",
placeholder:"",
name:"quality_inspection_time",
value:"",
title:"质检时间",
width:"215px"
},
]);
const columns=[
{
dataKey: `machine_name`,
title:"机器信息",
width:300,
show:true,
align: "center",
},
{
dataKey: `title`,
title:"商品标题",
show:true,
width:100,
align: "center",
},
{
dataKey: `merchant_name`,
title:"闲鱼账号",
width:100,
align: "center",
},{
dataKey: `price`,
title:"订单价格",
width:100,
align: "center",
},{
dataKey: `buy_info`,
title:"买家信息",
width:150,
align: "center",
show:true,
},{
dataKey: `buyer_apply_reason`,
title:"售后原因",
show:true,
align: "center",
width:100,
align: "center",
},{
dataKey: `inspect_report`,
title:"质检员/售后质检报告",
width:170,
show:true,
align: "center",
},
{
dataKey: `quality_inspection_code`,
title:"售后质检码",
width:150,
show:true,
align: "center",
},
{
dataKey: `responsibility_type`,
title:"判责情况",
width:150,
show:true,
align: "center",
},
{
dataKey: `quality_inspection_time`,
title:"质检时间",
width:150,
show:true,
align: "center",
},
{
dataKey: `return_tracking_number`,
title:"寄回物流信息",
width:150,
show:true,
align: "center",
},
{
key: `买家退货物流`,
dataKey: `refund_post_no`,
title:"买家退货物流",
width:150,
show:true,
align: "center",
},{
dataKey: `receiver`,
title:"收货人/收货时间",
width:140,
show:true,
align: "center",
},{
dataKey: `sale_after_additional_status`,
title:"售后状态",
width:100,
show:true,
align: "center",
},{
key: `操作`,
dataKey: `opction`,
title:"操作",
width:100,
show:true,
fixed:'right',
align: "center",
status:['Logs']
}
];
const newcolumns=computed(()=>{
let cludata=Object.assign([],columns);
if(activeName.value=='10'){
cludata.splice(columns.length-2,0,{
dataKey: `seller_refuse_reason`,
label:"卖家拒绝原因",
show:true,
align: "center",
width:150,
align: "center",
});
}
// else if(activeName.value=='8'){
// cludata.splice(columns.length-2,0,{
// dataKey: `address_accord_with`,
// label:"",
// show:true,
// align: "center",
// width:100,
// align: "center",
// });
// }
return cludata;
});
const getDatas=(p)=>{
page.value=p?p:1;
loading.value=true;
total.value=0;
axioshooks({
data:{sale_after_additional_status:'9',list_row:pageSize.value,page:page.value,refund_status:refund_status.value,...params.value},
url:"trusteeship/after_sales_list",
customHandler:(err,e)=>{
if(!err&&e){
if(e.errcode==0){
list.value=e.datas.datas_list;
total.value=e.datas.total;
loading.value=false;
list.value.forEach(item=>{
item.responsibility = true
})
}else{
ElMessage(e.msg);
loading.value=false;
}
}else if(err){
ElMessage(err);
loading.value=false;
}
}
});
}
onMounted(()=>{
getDatas(1);
});
const handleSizeChange=(v)=>{
if(pageSize.value!=v){
pageSize.value=v;
getDatas(1);
}
}
const looksLogs=(data)=>{
logsloading.value=true;
logsState.value=true;
axioshooks({
data:{refund_id:data.xy_sale_after_additional_id},
url:"xy/sale_after_log",
customHandler:(err,e)=>{
if(!err&&e){
if(e.errcode==0){
logsList.value=e.datas;
logsloading.value=false;
}else{
ElMessage(e.msg);
logsloading.value=false;
}
}else if(err){
ElMessage(err);
logsloading.value=false;
}
}
});
}
const doDelivery=(data)=>{
draveState.value=true;
logsloading.value=true;
axioshooks({
data:{xy_sale_after_additional_id:data.xy_sale_after_additional_id},
url:"trusteeship/shipping_info",
customHandler:(err,e)=>{
if(!err&&e){
if(e.errcode==0){
DeliveryInfoList.value=Object.assign({},data,e.datas);
logsloading.value=false;
}else{
ElMessage(e.msg);
logsloading.value=false;
}
}else if(err){
ElMessage(err);
logsloading.value=false;
}
}
});
}
const handleCurrentChange=(v)=>{
if(page.value!=v){
getDatas(v);
}
}
const DeliveryCancel=()=>{
draveState.value=false;
}
const DeliveryConfirm=()=>{
draveState.value=false;
getDatas(page.value);
}
const onProcessing=(data)=>{
processData.value=data;
processState.value=true;
}
const onJudgment=(data)=>{
judgState.value=data;
judgData.value=true;
}
const onQuality=(data)=>{
let imei=data.imei1?data.imei1:data.imei2||data.sn;
router.push({path:'qualityWork',query:{imei:imei}});
}
const doProcess=(data)=>{
if(!processValue.value){
ElMessage('请选择处理结果');
return false;
}
if(!data.xy_sale_after_additional_id){
ElMessage('非法点击');
return false;
}
axioshooks({
url:'trusteeship/exception_handling',
data:{address_accord_with:processValue.value,xy_sale_after_additional_id:data?.xy_sale_after_additional_id},
customHandler:(err,e)=>{
if(!err&&e){
if(e.errcode==0){
ElMessage("操作成功");
processData.value={};
processValue.value=1;
processState.value=false;
getDatas(page.value);
}else{
ElMessage(e.msg);
}
}else if(err){
ElMessage(err);
}
}
});
}
const doJudg=(data)=>{
if(!judgValue.value.mode){
ElMessage('请选择处理结果');
return false;
}
if(!data.xy_sale_after_additional_id){
ElMessage('非法点击');
return false;
}
axioshooks({
url:'trusteeship/judgment_responsibility',
data:{responsibility_type:judgValue.value.mode,xy_sale_after_additional_id:data?.xy_sale_after_additional_id,responsibility_explanation:judgValue.value.info,responsibility_img:judgValue.value.imageUrl},
customHandler:(err,e)=>{
if(!err&&e){
if(e.errcode==0){
ElMessage("操作成功");
processData.value={};
processValue.value=1;
processState.value=false;
getDatas(page.value);
}else{
ElMessage(e.msg);
}
}else if(err){
ElMessage(err);
}
}
});
}
const beforeAvatarUpload=(rawFile)=>{
let types=["image/jpeg","image/png","image/gif","image/bmp","image/jpg"];
if(!types.includes(rawFile.type)){
ElMessage.error('图片格式有误!')
return false
}
if (rawFile.size / 1024 / 1024 > 2) {
ElMessage.error('图片超过 2MB 大小!')
return false
}
initOss(rawFile).then((link)=>{
judgValue.value.imageUrl=link;
}).catch((err) => {
ElMessage(err.message);
});
return false;
}
const onConfirmReceipt=(data)=>{
receState.data=data;
receState.state=true;
}
const doRecive=(data)=>{
if(!receState.value){
ElMessage("请输入快递单号或说明");
return false;
}
if(!data.xy_sale_after_additional_id){
ElMessage('非法点击');
return false;
}
axioshooks({
url:'trusteeship/receiving_goods',
data:{xy_sale_after_additional_id:data.xy_sale_after_additional_id||1,tracking_number:receState.value},
customHandler:(err,e)=>{
if(!err&&e){
if(e.errcode==0){
ElMessage("操作成功");
receState.value="";
receState.data={};
receState.state=false;
getDatas(page.value);
}else{
ElMessage(e.msg);
}
}else if(err){
ElMessage(err);
}
}
});
}
</script>
<style lang="scss" scoped>
.avatar-uploader .avatar {
width:80px;
height:80px;
display: block;
}
.salecontainer{
background:#F1F2F5;
flex:1;
display:flex;
flex-direction:column;
}
.saleordertopbox{
background: #fff;
padding:20px 20px 0;
}
.searchbox{
margin-top:5px;
display:grid;
align-items:center;
grid-gap: 10px;
grid-template-columns:3fr 3fr 1fr 1fr 4fr;
}
.receivingWorkbenchbox {
padding: 10px;
flex:1;
}
.topinput{
height:36px;
}
.imeiicondefault{
height:26px;
width:26px;
box-sizing: border-box;
border-radius: 4px;
background: #f0f2f5;
cursor: pointer;
}
.avatar-uploader .el-upload {
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.toolbox{
display:flex;
align-items:center;
justify-content: space-between;
padding:20px 20px 0;
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 80px;
height:80px;
text-align: center;
background: #f1f1f1;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -1,286 +0,0 @@
<template>
<div class="l-footer">
<div class="title" style="margin-bottom: 0">
<div class="text">商品图片</div>
</div>
<div class="img-box">
<div class="img-title">
<div class="l-t">
图片来源于拍照app
<i class="iconfont icon-shuaxin" @click="Refresh"></i>
</div>
<span @click="lookcode">查看手机条码</span>
</div>
<div class="imglist">
<draggable
v-model="srcListAccount"
style="display: inline-block"
v-if="srcListAccount.length"
@end="end"
>
<!-- 图片展示 -->
<transition-group>
<div
v-for="(item, ind) in srcListAccount"
:key="ind"
class="image-container"
>
<el-image
style="width: 100px; height: 100px; margin-right: 7px"
fit="cover"
:src="item"
:preview-src-list="srcListAccount"
/>
<el-button
icon="el-icon-delete"
class="delete-button"
style="z-index: 5"
@click="deleteImage(ind, $event)"
/>
</div>
</transition-group>
</draggable>
<!-- 没有图片显示 -->
<div class="nothing" v-else>
<el-empty
:image-size="90"
description="暂无图片,可点击查看手机条码扫码获取照片"
/>
</div>
<!-- 图片上传样式 -->
<div
class="image-upload"
v-loading="dialogVisible"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 0, 0, 0.0)"
>
<el-upload
multiple
action=""
:show-file-list="false"
:http-request="handleUpload"
:before-upload="beforeAvatarUpload"
>
<el-button class="btn-upload" style="border: 2px #ccc dashed">
<i style="font-size: 31px" :class="dialogVisible?'':'el-icon-picture-outline'" />
</el-button>
</el-upload>
</div>
</div>
</div>
<el-dialog
width="390px"
title="条码"
:visible="printDate"
@opened="generateBarcode"
>
<div style="text-align: center">
<img id="barcode" width="333px" height="190px" alt="" src="" />
</div>
<div style="text-align: center">
<el-button round @click="printcode">打印条码</el-button>
<el-button round @click="barcode">刷新条码</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
// import draggable from "vuedraggable";
import { back_print } from "@/api/shoppingman";
// import { upload_img } from "@/api/qualityInspectioncenter";
import { ElMessage } from 'element-plus';
// import * as imageConversion from "image-conversion";
export default {
props: ["dateOne", "srcList"],
data() {
return {
printDate: false,
imgStatus: "",
srcListAccount: this.srcList,
dialogVisible: false,
};
},
components: {
// draggable,
},
watch: {
srcList: {
handler(old) {
this.srcListAccount = old;
},
deep: true,
},
},
methods: {
//
lookcode() {
this.printDate = true;
},
generateBarcode() {
this.$nextTick(() => {
JsBarcode("#barcode", this.dateOne.serial_number, {
displayValue: true,
});
});
},
//
barcode() {
this.generateBarcode();
this.$message.success("刷新成功");
},
//
printcode() {
back_print({ res_id: this.dateOne.res_id }).then((res) => {
if (res.errcode == 0) {
this.$message.success("打印成功");
}
});
},
//
end() {
this.$emit("moveimglist", this.srcListAccount);
},
//
beforeAvatarUpload(file) {
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M)
return new Promise((resolve) => {
// 2M
imageConversion.compressAccurately(file, 700).then((res) => {
resolve(res);
});
});
},
//
handleUpload(fileimg) {
this.dialogVisible = true;
if (this.srcListAccount) {
console.log(this.srcListAccount.length);
if (this.srcListAccount.length >= 9) {
this.$message.warning("上传图片数量不能超过九张");
return;
}
}
initOss(fileimg.file).then((url)=>{
this.srcListAccount.push(url);
this.dialogVisible = false;
ElMessage("上传成功");
}).catch((err)=>{
ElMessage(err.message);
});
},
//
deleteImage(ind, event) {
event.target.blur();
if (event.target.nodeName == "SPAN" || event.target.nodeName == "I") {
event.target.parentNode.blur();
}
this.srcListAccount.splice(ind, 1);
this.$message.warning("删除成功");
// this.uploadimg(1);
},
//
Refresh() {
this.$emit("getimglist", 1);
},
},
};
</script>
<style scoped lang='scss'>
.l-footer {
border-radius: 6px;
background-color: #fff;
margin-top: 20px;
.img-box {
display: inline-block;
max-width: 635px;
margin-left: 20px;
padding-bottom: 15px;
.img-title {
min-width: 635px;
display: flex;
align-items: center;
justify-content: space-between;
.l-t {
font-size: 16px;
font-weight: 400;
color: #333333;
.icon-shuaxin {
color: #4091ff;
font-size: 18px;
cursor: pointer;
}
}
span {
font-size: 16px;
font-weight: 400;
color: #4091ff;
cursor: pointer;
}
}
.imglist {
display: flex;
// align-items: center;
margin-top: 10px;
}
}
}
.image-container {
position: relative;
display: inline-block;
// display: flex;
justify-content: space-between;
}
image-container:hover {
background-color: rgba(0, 0, 0, 0.3);
}
.image-upload {
height: 100px;
display: inline-block;
}
.image-upload ::v-deep .el-button {
width: 100px;
height: 100px;
}
.nothing {
margin-right: 20px;
}
.delete-button {
width: 20px;
// height: 100px;
padding: 10px 30px 10px 10px;
position: absolute;
top: 0;
right: 10px;
border: 1px solid transparent;
font-size: 18px;
color: white;
background-color: rgba(0, 0, 0, 0.3);
//opacity: 0; /* */
transition: opacity 0.3s ease; /* 添加过渡效果 */
}
::v-deep .delete-button:hover {
//opacity: 1; /* */
//border-color: red;
color: white;
font-weight: bold;
font-size: 19px;
border: 1px solid transparent;
background: rgba(0, 0, 0, 0.3);
}
.delete-button:active {
// color: white;
border: 1px solid transparent;
background-color: transparent;
}
//
::v-deep .el-icon-loading {
font-size: 48px;
color:#ccc ;
}
</style>

View File

@ -1,41 +0,0 @@
<template>
<div class="qcinputbox">
<el-button :type="type" round @click="onSelect" :disabled="disabled">
<slot></slot>
</el-button>
<el-date-picker type="date" :placeholder="placeholder" :disabled="disabled" style="min-width:150px" v-model.lazy="inputvalue" v-if="type=='primary'" @change="onInputChange"/>
</div>
</template>
<script setup>
import {ref,reactive,watch,onMounted} from 'vue';
const props=defineProps(['value','placeholder','type','disabled']);
const $emit=defineEmits(['click','change']);
const inputvalue=ref("");
const {value,placeholder,type}=props;
onMounted(()=>{
if(value){
inputvalue.value=value;
}
});
const onInputChange=(val)=>{
$emit('change',new Date(newval).getTime());
}
const onSelect=()=>{
$emit('click');
}
</script>
<style lang="scss">
.qcinputbox{
display:flex;
align-items: stretch;
margin-right:10px;
}
</style>

View File

@ -1,42 +0,0 @@
<template>
<div class="qcinputbox">
<el-button :type="type" round @click="onSelect" size="small" :disabled="disabled">
<slot></slot>
</el-button>
<el-input :placeholder="placeholder" size="small" style="width:150px" :disabled="disabled" v-model.lazy="inputvalue" v-if="type=='primary'" @change="onInputChange"/>
</div>
</template>
<script setup>
import {ref,reactive,watch,onMounted} from 'vue';
const {value,placeholder,type}=defineProps(['value','placeholder','type','disabled']);
const $emit=defineEmits(['click','change']);
const inputvalue=ref("");
onMounted(()=>{
if(value){
inputvalue.value=value;
}
});
const onInputChange=(val)=>{
$emit('change',new Date(newval).getTime());
}
const onSelect=()=>{
$emit('click');
}
</script>
<style lang="scss">
.qcinputbox{
display:flex;
align-items: stretch;
margin-right:10px;
}
</style>

View File

@ -1,265 +0,0 @@
<template>
<div class="comparisonbox">
<div class="comparisontop">
<h4 class="comparisonitemtitle"> 售前质检报告</h4>
<h4 class="comparisonitemtitle"> 售后质检报告</h4>
</div>
<div class="comparisonitem">
<div class="comparisonitemmain">
<div v-for="im,i in data.new" :key="String(i)" class="comparisonitemmainitem">
<div class="comparisonitemmaintitle">{{im.qc_item}}({{im.oldnoabnormal}}项全部正常{{im.oldabnormal>0?','+im.oldabnormal+'项需注意':null}})</div>
<div v-for="citem,indexs in im.child" :key="String(indexs)" class="comparisonitemmainitemcontainer" >
<div class="comparisonitemmainitemtitle">{{citem.qc_item}}</div>
<div v-for="cim,cis in citem.child" :key="String(cis)" class="comparisonitemmainitemmain" :style="cim?.about==1?{background:'#fbf1ef',border:'1px dashed red'}:null" >
<div class="comparisonitemmainitemattrname">{{cim.qc_item}}</div>
<div class="comparisonitemmainitemattrline"/>
<div class="comparisonitemmainitemattrvalue">{{cim.oldvalue}}{{cim.oldinputStatus&&cim.oldinputDate!=''?cim.oldinputDate:null}}</div>
</div>
</div>
</div>
</div>
<div class="comparisonitemmain">
<div v-for="im,i in data.new" :key="String(i)" class="comparisonitemmainitem">
<div class="comparisonitemmaintitle">{{im.qc_item}}({{im.noabnormalnum}}项全部正常{{im.abnormalnum>0?','+im.abnormalnum+'项需注意':null}})</div>
<div v-for="citem,indexs in im.child" :key="String(indexs)" class="comparisonitemmainitemcontainer" >
<div class="comparisonitemmainitemtitle">{{citem.qc_item}}</div>
<div v-for="cim,cis in citem.child" :key="String(cis)" class="comparisonitemmainitemmain" :style="cim?.about==1?{background:'#fbf1ef',border:'1px dashed red'}:null">
<div class="comparisonitemmainitemattrname">{{cim.qc_item}}</div>
<div class="comparisonitemmainitemattrline"/>
<div class="comparisonitemmainitemattrvalue">{{cim.value}}{{cim.inputStatus&&cim.inputDate!=''?cim.inputDate:null}}</div>
</div>
</div>
</div>
</div>
</div>
<div class="comparisonfooter">
<div v-if="data.totalabount>0" class="comparisonfooterdesc">比对结果:{{data.totalabount}}项不一致</div>
<div v-if="props.responsibility_type!='1'" class="comparisonfooterbtnbox">
<el-button @click="onXiachi">瑕疵图</el-button>
<el-button @click="onNoPanze">暂不判责</el-button>
<el-button type="primary" @click="onDoPanzePrint">判责并打印质检码</el-button>
</div>
<div v-else class="comparisonfooterbtnbox">
<el-button @click="onNoPanze">关闭</el-button>
<el-button @click="onXiachi">瑕疵图</el-button>
<el-button type="primary" @click="print">打印质检码</el-button>
</div>
</div>
</div>
</template>
<script setup>
import {ref,reactive,onMounted,computed,watch} from 'vue';
const props=defineProps(["comparisondata","responsibility_type"]);
const $emit=defineEmits(["print","onNoPanze","onDoPanzePrint",'onXiachi']);
const data=reactive({
old:[],
new:[]
});
watch(props,(newval)=>{
formatdatas(newval.comparisondata);
},{deep:true})
onMounted(()=>{
formatdatas(props.comparisondata);
});
const onXiachi=()=>{
$emit("onXiachi")
}
const formatdatas=(datas)=>{
let newdatas=[];
datas.new.xy_qc_item.map((h,)=>{
let child=[];
let noabnormal=0;
let abnormal=0;
h.child.map((c)=>{
let tchild=[];
c.child.map((t)=>{
let dchild=[];
t.qc_item_value.map((d)=>{
t.abnormal=d.abnormal;
t.inputDate=d.inputDate;
t.inputStatus=d.inputStatus;
if(d.qc_item_value.indexOf('手填')>-1){
dchild.push(datas.new.battery_cycle>-1);
}else if(d.qc_item_value.indexOf('到20XX')>-1){
dchild.push(datas.new.warranty_end_time);
}else{
dchild.push(d.qc_item_value);
}
});
if(t.abnormal==1){
abnormal++;
}else{
noabnormal++;
}
tchild.push({qc_item:t.qc_item,value:dchild.join(',')});
});
child.push({qc_item:c.qc_item ,child:tchild});
});
newdatas.push({qc_item:h.qc_item ,child:child,abnormalnum:abnormal,noabnormalnum:noabnormal});
});
let totalabount=0;
newdatas.map((h,i)=>{
h.oldabnormal=0;
h.oldnoabnormal=0;
const oldh=datas.old.xy_qc_item.find((f)=>f.qc_item==h.qc_item);
h.child.map((c,ii)=>{
const oldc=oldh.child.find((f)=>f.qc_item==c.qc_item);
c.child.map((t)=>{
const oldt=oldc.child.find((f)=>f.qc_item==t.qc_item);
let oldvalues=[];
oldt.qc_item_value.map((d)=>{
t.oldabnormal=d.abnormal;
t.oldinputDate=d.oldinputDate;
t.oldinputStatus=d.oldinputStatus;
if(d.qc_item_value.indexOf('手填')>-1){
oldvalues.push(datas.old.battery_cycle||"暂无");
}else if(d.qc_item_value.indexOf('到20XX')>-1){
oldvalues.push(datas.old.warranty_end_time||"暂无");
}else{
oldvalues.push(d.qc_item_value);
}
});
if(t.oldabnormal==1){
h.oldabnormal++;
}else{
h.oldnoabnormal++;
}
t.oldvalue=oldvalues.join(",");
if(t.value!=t.oldvalue){
t.about=1;
totalabount+=1;
}
});
});
});
data.new=newdatas;
data.totalabount=totalabount;
}
const onDoPanzePrint=()=>{
$emit("onDoPanzePrint");
}
const onNoPanze=()=>{
$emit("onNoPanze");
}
const print=()=>{
$emit("print");
}
</script>
<style lang="scss">
.comparisonbox{
display:flex;
align-items:stretch;
flex:1;
flex-direction:column;
max-height:520px;
.comparisontop{
display:flex;
align-items:stretch;
flex:1;
&:first-child{
margin-right:5px;
}
&:nth-child(2){
margin-left:5px;
}
.comparisonitemtitle{
flex:1;
color:#101010;
font-weight:bold;
font-size:15px;
margin:0 0 12px;
}
}
.comparisonitem{
position: relative;
flex:1;
display:flex;
align-items:stretch;
flex:1;
overflow-y:scroll;
min-height:300px;
max-height:520px;
&::-webkit-scrollbar{
display:none;
}
.comparisonitemmain{
height: 100%;
padding:12px;
background:#fafafa;
flex:1;
&:first-child{
margin-right:5px;
}
&:nth-child(2){
margin-left:5px;
}
.comparisonitemmaintitle{
font-size:15px;
color:#101010;
}
.comparisonitemmainitemtitle{
font-size:14px;
color:#333;
}
.comparisonitemmainitemmain{
display:flex;
justify-content: space-between;
align-items:center;
padding:5px 12px;
margin:5px 0;
border-radius:6px;
}
.comparisonitemmainitemcontainer{
padding:5px 12px;
}
.comparisonitemmainitemattrname{
font-size:14px;
color:#666;
}
.comparisonitemmainitemabout{
position: absolute;
background:#fbf1ef;
border:1px dashed red;
height:36px;
left:0;
right:0;
z-index:-1;
}
.comparisonitemmainitemattrline{
flex:1;
border-top:1px dashed #e5e5e5;
margin:0 20px;
}
}
}
}
.comparisonfooterdesc{
font-size:16px;
color:red;
font-weight:bold;
margin:20px 0;
}
.comparisonfooterbtnbox{
display: flex;
justify-content: flex-end;
align-items: center;
}
</style>

View File

@ -1,281 +0,0 @@
<template>
<div class="qcTablebox">
<div v-for="(it, ix) in tableData" :key="ix" class="qctableitem">
<div class="qctableitemtitle">{{it.qc_item}}</div>
<div class="qctableitemmain">
<div class="qctableitemoneitem" v-for="ict,ici in it.child" :key="ici">
<div class="qctableitemonemainonetitle">
{{ict.qc_item }}
</div>
<div class="qctableitemonemainonemain">
<div v-for="item,icis in ict.child" :key="icis" class="qctableitemonemainonemainitem">
<div class="qctableitemonemainonemaintitle">
{{item.qc_item}}
</div>
<div class="qctableitemonemaintwoitemmain">
<div v-for="iv,ind in item.qc_item_value" :label="iv.qc_item_value_id" :key="ind" >
<QcInput placeholder="请输入" :disabled="disabled" :value="getValue(item,iv)" :battery_cycle="battery_cycle" :type="getType(item,iv)" v-if="iv.qc_item_value && iv.qc_item_value.indexOf('手填')>-1" @change="onInputChange(item,iv,$event)" @click="onSelect(item,iv)">
{{ iv.qc_item_value }}
</QcInput>
<QcDate placeholder="请选择" :disabled="disabled" style="width:150px" :type="getType(item,iv)" :warranty_end_time="warranty_end_time" :value="getValue(item,iv)" v-else-if="iv.qc_item_value.indexOf('到20XX年')>-1" @click="onSelect(item,iv)" @change="onInputChange(item,iv,$event)">
{{ iv.qc_item_value }}
</QcDate>
<el-button :disabled="disabled" :type="getType(item,iv)" @click="onSelect(item,iv)" size="small" round v-else >
{{ iv.qc_item_value }}
</el-button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import {reactive,watch,onMounted,onUpdated,ref,computed,watchEffect} from 'vue';
import QcInput from "./qcInput.vue";
import QcDate from "./qcDate.vue";
import {ElMessage} from "element-plus";
const props=defineProps({'is_easy':String,'xyQcItem':Array,'disabled':Boolean,'battery_cycle':String,'warranty_end_time':String});
const $emit=defineEmits(['change']);
const {is_easy,xyQcItem,disabled,warranty_end_time,battery_cycle}=props;
const tableData=ref([]);
const tablevalue=ref([]);
// 使watch
watch(() =>props.xyQcItem, (newCount, oldCount) => {
let newxyQcItem=Object.assign([],newCount);
if(newxyQcItem.length>0){
tablevalue.value=[];
formatdatas(newxyQcItem);
}
});
watch(tableData,async (newval,oldval)=>{
$emit('change',{datas:newval,value:tablevalue.value});
});
onMounted(()=>{
let newxyQcItem=Object.assign([],xyQcItem);
if(newxyQcItem.length>0){
tablevalue.value=[];
formatdatas(newxyQcItem);
}
});
const onInputChange=(item,iv,e)=>{
let newvalue=e;
if(!isNaN(e)){
if(iv.qc_item_value.indexOf('手填')>-1||iv.qc_item_value.indexOf('到20XX')>-1){
if(tablevalue.value[item.qc_item_id]){
const find= tablevalue.value[item.qc_item_id].find((f)=>f.id==iv.qc_item_value_id);
if(find){
find.key = iv.qc_item_value
find.value=newvalue;
}
}
}
formatdatas(props.xyQcItem);
}
}
const formatdatas=(datas)=>{
let newxyQcItem=Object.assign([],datas);
newxyQcItem.map((h)=>{
if(h.child){
h.child.map((c)=>{
if(c.child){
c.child.map((t)=>{
if(t.qc_item_value){
const find=tablevalue.value[t.qc_item_id];
if(find){
t.value=find;
}else{
if(c.qc_item.indexOf("多选")>-1){
let defaultdata=[];
t.qc_item_value.map((d)=>{
if(d.default==1){
defaultdata.push({id:d.qc_item_value_id});
}
});
if(defaultdata.length>0){
t.value=defaultdata;
}else{
// console.log(t,888);
t.value=[t.qc_item_value[0].qc_item_value_id];
}
tablevalue.value[t.qc_item_id]=t.value;
}else{
let defaultdata=t.qc_item_value.find((f)=>f.default==1);
let itemdata=defaultdata;
if(defaultdata){
itemdata=defaultdata;
}else{
// console.log(t,9090);
itemdata=t.qc_item_value[0].qc_item_value_id;
}
t.value=[{id:itemdata.qc_item_value_id}];
t.abnormal=itemdata.abnormal;
tablevalue.value[t.qc_item_id]=t.value;
}
}
}
});
}
});
}
});
tableData.value=newxyQcItem;
}
const onSelect=(item,iv)=>{
if(item.qc_item.indexOf("多选")>-1){
if(tablevalue.value[item.qc_item_id]){
const find= tablevalue.value[item.qc_item_id].find((f)=>f.id==iv.qc_item_value_id);
if(find){
if(tablevalue.value[item.qc_item_id].length>1){
tablevalue.value[item.qc_item_id]=tablevalue.value[item.qc_item_id].filter((f)=>f.id!=iv.qc_item_value_id);
}else{
ElMessage("至少留一个");
return false;
}
}else{
if(iv.qc_item_value=="正常"){
tablevalue.value[item.qc_item_id]=[{id:iv.qc_item_value_id}];
}else{
const findzc=item.qc_item_value.find((f)=>f.qc_item_value=="正常");
const nozcs=tablevalue.value[item.qc_item_id].filter((f)=>f.id!=findzc.qc_item_value_id);
nozcs.push({id:iv.qc_item_value_id});
tablevalue.value[item.qc_item_id]=nozcs;
}
}
}else{
tablevalue.value[item.qc_item_id]=[{id:iv.qc_item_value_id}];
}
}else{
tablevalue.value[item.qc_item_id]=[{id:iv.qc_item_value_id}];
}
formatdatas(props.xyQcItem);
}
const getType= (item,iv)=>{
if(tablevalue.value[item.qc_item_id]){
const find=tablevalue.value[item.qc_item_id].find((f)=>f.id==iv.qc_item_value_id);
return find?'primary':null
}
return null;
};
//
const getValue=(item,iv)=>{
if(tablevalue.value[item.qc_item_id]){
const find=tablevalue.value[item.qc_item_id].find((f)=>f.id==iv.qc_item_value_id);
if(find){
if(find.value){
return find.value;
}else{
if(iv.qc_item_value.indexOf("手填")>-1){
return battery_cycle;
}else if(iv.qc_item_value.indexOf("到20XX")>-1){
return props.warranty_end_time
}
}
}else{
if(iv.qc_item_value.indexOf("手填")>-1){
return battery_cycle;
}else if(iv.qc_item_value.indexOf("到20XX")>-1){
return props.warranty_end_time;
}
}
}else{
if(iv.qc_item_value.indexOf("手填")>-1){
return battery_cycle;
}else if(iv.qc_item_value.indexOf("到20XX")>-1){
return props.warranty_end_time;
}
}
return null;
};
</script>
<style lang="scss">
.qcTablebox{
min-height:200px;
}
.qctableitem{
display:flex;
flex-direction: column;
border:1px solid #e5e5e5;
.qctableitemtitle{
padding:12px 20px;
background:#F1F2F5;
font-size:18px;
color:#101010;
border-bottom:1px solid #e5e5e5;
}
.qctableitemmain{
.qctableitemoneitem{
display:flex;
align-items: stretch;
}
.qctableitemonemainonetitle{
font-size:14px;
color:#101010;
min-height:60px;
display:flex;
align-items:center;
padding:12px;
justify-content: center;
flex:1.5;
border-right:1px solid #e5e5e5;
box-sizing: border-box;
border-bottom: 1px solid #e5e5e5;
}
.qctableitemonemainonemain{
flex:8;
align-items: stretch;
display:flex;
flex-direction: column;
.qctableitemonemainonemainitem{
align-items: stretch;
display:flex;
}
.qctableitemonemainonemaintitle{
font-size:14px;
color:#101010;
min-height:60px;
display:flex;
padding:12px;
box-sizing: border-box;
align-items:center;
justify-content: center;
flex:1.5;
border-right:1px solid #e5e5e5;
border-bottom: 1px solid #e5e5e5;
}
.qctableitemonemaintwoitemmain{
flex:7;
display:flex;
flex-wrap:wrap;
align-items: flex-start;
justify-content: flex-start;
gap:10px;
padding:12px;
box-sizing: border-box;
border-bottom: 1px solid #e5e5e5;
}
}
}
}
</style>

View File

@ -1,159 +0,0 @@
<template>
<div class="qcreport">
<div class="qcHead">
<div style="font-size: 16px;font-weight: bold">{{props.title}}</div>
<div v-if="quilyDate.stuff_status">
<span>
<span style="font-size: 30px;font-weight: 700" :style="statusTextStyle" >{{props.quilyDate.stuff_status}}</span><span v-show="props.quilyDate.stuff_status !=='不合格'">·</span>{{
props.quilyDate.use_trace }}</span>
</div>
<div v-if="data.abnormalnum > 0"
style="font-size: 16px;margin-top: 16px;color: #CC2E2E">异常质检项 <span v-if="data.abnormalnum>0">·
{{ data.abnormalnum}}</span></div>
<div v-for="(item, index) in data.product_details_date_list" :key="index + 'e'">
<div v-for="(item1, index1) in item.exception_item" v-if="item.exception_item.length > 0"
:key="index1 + 'f'">
<div v-if="item1.msg">
<div style="font-size: 13px;color: #CC2E2E;margin-top: 10px">
<span
style="background-color: #CC2E2E;margin-right: 3px;border-radius: 50%;font-size: 12px">11</span>
<span>{{ item1.label }}</span>
</div>
<div style="padding-left: 10px;font-size: 12px;margin-top: 12px">{{ item1.msg }}</div>
</div>
</div>
</div>
<div style="font-size: 16px;margin-top: 16px" v-if="props.quilyDate.stuff_status">全部质检项 · {{ data.quailyLength }}</div>
<div v-for="(item, index) in data.product_details_date_list" :key="index + 'g'"
style="margin-top: 5px" v-if="props.quilyDate.stuff_status" >
<div style="display: flex;justify-content: space-between">
<span><span
style="background-color: black;font-size: 12px;color: black;border-radius: 50%">11</span>
<span>{{ item.label }}</span></span>
<span v-if="item.exception_item.length > 0" style="color: #CC2E2E">{{ item.exception_item.length
}} 项需注意</span>
<span v-if="item.normal_item.length > 0" style="color: #55CCBC">{{ item.normal_item.length }}
项正常</span>
</div>
<div v-for="(item1, index1) in item.exception_item" :key="index1 + 'h'"
style="padding-left: 7px;color: #CC2E2E;font-size: 12px;margin-top: 8px">
<div style="display: flex;justify-content: space-between;">
<span style="z-index: 20;background-color: #FFFEF3;padding-right: 3px">{{ item1.label
}}</span>
<span style="z-index: 20;background-color: #FFFEF3;padding-left: 3px">{{ item1.value
}}</span>
</div>
<div class="dashed-link" style="" />
</div>
</div>
</div>
<div class="qcFooter" v-if="quilyDate.stuff_status">
<span style="">
{{data.versiondata}}
</span>
</div>
<div v-else class="qcemptybox">
暂无质检
</div>
</div>
</template>
<script setup>
import { reactive,ref,watch,onMounted,computed,watchEffect} from 'vue';
const props=defineProps({quilyDate:Object,title:String});
const data=reactive({
quailyLength:0,
abnormalnum:0,
product_details_date_list:[],
versiondata:"国行"
});
onMounted(()=>{
formatdatas(props.quilyDate);
});
watch(props,(newval,oldval)=>{
formatdatas(newval.quilyDate);
},{deep:true});
const statusTextStyle = computed(() => {
return {
color: props.quilyDate.stuff_status == '不合格' ? '#CC2E2E' : '#000'
};
});
const formatdatas=(datas)=>{
data.quailyLength=0;
data.abnormalnum=0;
data.product_details_date_list=[];
data.versiondata="国行";
console.log(datas,555);
let list=[];
let total=0;
let abnormal=0;
let versiondata="国行";
if( datas&&datas.xy_qc_item){
datas.xy_qc_item.map((h,index)=>{
let listitem={label:h.qc_item,exception_item:[],total:0,normal_item:[]};
if(h.child){
h.child.map((t)=>{
if(t.child){
t.child.map((d)=>{
if(d.qc_item_value){
d.qc_item_value.map((v)=>{
if(v.abnormal==1){
abnormal+=1;
listitem.exception_item.push({label:d.qc_item,value:v.qc_item_value,msg:v.fault_desc});
}else{
listitem.normal_item.push({label:d.qc_item,value:v.qc_item_value});
}
total+=1;
if(d.qc_item=="版本/来源"){
versiondata=v.qc_item_value;
}
});
}
});
}
});
}
list.push(listitem);
});
data.versiondata=versiondata;
data.product_details_date_list=list;
data.quailyLength=total;
data.abnormalnum=abnormal;
console.log(list,"list",abnormal,total);
}
}
</script>
<style lang="scss" scoped>
.qcreport {
.qcHead {
padding: 10px 15px;
}
.qcFooter {
border-radius: 0 0 5px 5px;
font-size: 16px;
text-align: center;
font-weight: 600;
padding-top: 8px;
padding-bottom: 8px;
margin-top: 15px;
background: #4091FF;
color: #fff;
}
}
.qcemptybox{
display:flex;
align-items: center;
justify-content: center;
padding:30px 0;
}
</style>

View File

@ -1,249 +0,0 @@
<template>
<div>
<!-- <div> {{ arrDta }} </div> -->
<!-- <div>{{ tableLabellisttes }}</div> -->
<el-row>
<el-col>
<el-table :data="show == '1'
? arrDta.filter((el) => {
return el.is_easy == 1;
})
: arrDta
" style="width: 100%" :span-method="mergeRowMethod2" border>
<el-table-column v-for="(item, index) in tableLabellisttes" :key="index" :prop="item.param"
:label="item.label" :align="item.align" :width="item.width" :min-width="item.width2">
<template v-slot:default="{ row }">
<div v-if="row.title === '版本'" ref="rowBanben" />
<span v-if="item.param == 'value' && row['child']&&row['child'].length >= 1">
<span v-for="(e, i) in row['child']" :key="i" class="btnclass" style="margin: 10px 10px 5px 12px">
<el-button v-if="row['attr_name'].indexOf('多选') != -1" class="buttonDiv" plain round
:type="row['value'].includes(e.attr_name) ? 'primary' : ''" style="margin: 6px 0 6px 0"
@click="disabled?null:brandclick($event, e, row['attr_name'], row)">{{ e.attr_name }}
</el-button>
<el-button v-else-if="row['attr_name'].indexOf('多选') == -1" class="buttonDiv" plain round
:type="row['value'] == e['option_name'] ? 'primary' : ''"
style="margin: 6px 0 6px 0;display: inline-block"
@click="brandclick($event, e, row['attr_name'], row)">{{ e.attr_name }}</el-button>
<span v-if="row['value'] === '苹果手填' || row['value'] === '到20XX年-XX-XX' || row['value'] === '在保手填'
|| row['value'] === '手填'
|| row['value'] == '运行内存(手填)'
|| row['value'] == '硬盘容量(手填)'
|| row['value'] == '容量(手填)'
|| row['value'] == 'CPU型号(手填)'
|| row['value'] == '分辨率(手填)'
|| row['value'] == '显卡型号(手填)'
|| row['value'] == '屏幕尺寸(手填)'
|| row['value'] == '尺寸(手填)'
|| row['value'] == '刷新率(手填)'
">
<span v-if="e.qc_item_value === '苹果手填' || e.qc_item_value === '到20XX年-XX-XX' || e.qc_item_value === '在保手填' || e.qc_item_value == '手填'
|| e.qc_item_value == '运行内存(手填)'
|| e.qc_item_value == '硬盘容量(手填)'
|| e.qc_item_value == '容量(手填)'
|| e.qc_item_value == 'CPU型号(手填)'
|| e.qc_item_value == '分辨率(手填)'
|| e.qc_item_value == '显卡型号(手填)'
|| e.qc_item_value == '屏幕尺寸(手填)'
|| e.qc_item_value == '尺寸(手填)'
|| e.qc_item_value == '刷新率(手填)'
">
<el-input v-if="e.inputStatus
|| row['value'] === '苹果(手填)'
|| row['value'] === '到20XX年-XX-XX'
|| row['value'] === '在保(手填)'
|| row['value'] === '手填'
|| row['value'] == '运行内存(手填)'
|| row['value'] == '硬盘容量(手填)'
|| row['value'] == '容量(手填)'
|| row['value'] == 'CPU型号(手填)'
|| row['value'] == '分辨率(手填)'
|| row['value'] == '显卡型号(手填)'
|| row['value'] == '屏幕尺寸(手填)'
|| row['value'] == '尺寸(手填)'
|| row['value'] == '刷新率(手填)'
" v-model="e.inputDate" size="small" style="width: 120px;margin-left: 5px"
@blur="inpuStatus(e)" />
</span>
</span>
</span>
</span>
<span v-else>
{{ row[item.param] ? row[item.param] : '/' }}
</span>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
</div>
</template>
<script setup>
import { defineProps, ref, watch, reactive, defineEmits } from 'vue';
const { arrDta, high, show ,disabled} = defineProps(['arrDta', 'high', 'show','disabled'])
const emit = defineEmits(['inpuStatus', 'get_match_version_type', 'brandclick'])
console.log(arrDta, 'data==========', show)
const tableLabellisttes = ref([
{ label: "", param: "title", align: "center", width: 100, show: false },
{
label: "",
param: "attr_name",
align: "center",
width: 130,
show: true,
},
{ label: "", param: "value", align: "left", width2: 580, show: true },
],
)
// ref
watch('arrDta', async (newval) => {
console.log(newval, 'newval--------------');
})
const inpuStatus = (e) => {
emit("inpuStatus", e);
}
const brandclick = (e, v, name, r) => {
if(disabled){
return false;
}
if (v.attr_id === "版本/来源") {
emit("get_match_version_type", v.qc_item_value);
}
if (
v.qc_item_value === "苹果(手填)" ||
v.qc_item_value === "在保(手填)" ||
v.qc_item_value === "到20XX年-XX-XX"
) {
// this.$set(v, "inputStatus", true);
v.inputStatus = true;
} else {
// this.$set(v, "inputStatus", false);
v.inputStatus = false
}
if (name.indexOf("多选") !== -1) {
if (
v.qc_item_value === "正常" ||
v.qc_item_value === "无" ||
v.qc_item_value === "无拆修浸液" ||
v.qc_item_value === "无异常"
) {
r.value = [v.qc_item_value];
} else {
if (
r.value.includes("无") ||
r.value.includes("正常") ||
r.value.includes("无拆修浸液") ||
r.value.includes("无异常")
) {
r.value = [];
r.value.push(v.qc_item_value);
} else {
if (r.value.includes(v.qc_item_value)) {
const index = r.value.findIndex((item) =>
item.includes(v.qc_item_value)
);
if (index !== -1) {
r.value.splice(index, 1);
}
} else {
r.value.push(v.qc_item_value);
}
}
}
} else {
// this.$set(r, "value", v.attr_name);
r.value = v.qc_item_value
}
// let target = e.target;
// if (target.nodeName === "SPAN") {
// target = e.target.parentNode;
// }
// target.blur();
emit("brandclick", "quality");
}
//
const mergeRowMethod2 = ({ row, _rowIndex, column, visibleData }) => {
const fields = ['title']
const cellValue = row[column.field]
if (cellValue && fields.includes(column.field)) {
const prevRow = visibleData[_rowIndex - 1]
let nextRow = visibleData[_rowIndex + 1]
if (prevRow && prevRow[column.field] === cellValue) {
return { rowspan: 0, colspan: 0 }
} else {
let countRowspan = 1
while (nextRow && nextRow[column.field] === cellValue) {
nextRow = visibleData[++countRowspan + _rowIndex]
}
if (countRowspan > 1) {
return { rowspan: countRowspan, colspan: 1 }
}
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .mytable-scrollbar ::-webkit-scrollbar {
//width: 10px;
height: 0;
}
::v-deep .el-dialog__body {
padding: 0 20px 20px 20px;
}
.btnclass ::v-deep .classButton:hover {
border-radius: 20px;
color: #f56c6c;
background: #faeaeb;
border-color: #edaeae;
}
.btnclass ::v-deep .buttonDiv:hover {
border-radius: 20px;
color: #2794f8;
background: #d2e6fc;
border-color: #b3d8ff;
}
.btnclass ::v-deep .el-button--primary:hover {
border-radius: 20px;
color: #2794f8;
background: #d2e6fc;
border-color: #b3d8ff;
}
.btnclass ::v-deep .el-button--danger:hover {
border-radius: 20px;
color: #f56c6c;
background: #faeaeb;
border-color: #edaeae;
}
.btnclass ::v-deep .el-button:focus {
outline: none;
}
.btnclass ::v-deep .el-button {
font-size: 12px;
padding: 8px;
min-width: 78px;
}
.dianji {
background-color: #ecf5ff;
color: #409eff;
border-color: #409eff;
}
.dianji:hover {
background-color: #ecf5ff;
color: #409eff;
border-color: #409eff;
}
</style>

View File

@ -1,104 +0,0 @@
<template>
<div class="container">
<div class="topbox">
<el-input v-model="trackingValue" class="input" placeholder="扫描快递单号收货" @change="onRevice" />
<el-button type="primary" class="searchbtn" @click="startQc">开始质检</el-button>
</div>
<el-scrollbar wrap-class="scrollbarWrapper" style="flex:1" v-if="Object.keys(detail).length > 0">
dfdf
</el-scrollbar>
<div class="bottombox" v-if="Object.keys(detail).length > 0">
<el-input v-model="trackingValue" class="input2" placeholder="输入密封袋编码" @change="onRevice" />
<el-button type="primary" class="searchbtn2">质检完成</el-button>
</div>
</div>
</template>
<script>
import { xy_qc_item } from '@/api/qc.js'
export default {
data() {
return {
detail: {},
trackingValue: '',
reviceList: []
}
},
components: {},
methods: {
handleClick(e) {
console.log(e);
},
onRevice(e) {
console.log(e, "eee");
if (/^[A-Za-z0-9]{4,35}$/.test(e)) {
}
},
startQc() {
xy_qc_item().then(res => {
console.log(res);
})
},
},
}
</script>
<style lang="scss" scoped>
.container {
min-height: calc(100vh - 100px);
background: #F1F2F5;
display: flex;
flex-direction: column;
}
.topbox {
background: #fff;
display: flex;
align-items: center;
justify-content: center;
padding: 18px;
}
.input {
height: 64px;
max-width: 680px;
box-sizing: border-box;
margin: 0 15px;
}
.searchbtn {
height: 64px;
width: 150px;
box-sizing: border-box;
margin: 0 15px;
}
.scrollbarWrapper {
flex: 1;
padding: 12px 0;
}
.input2 {
height: 40px;
width: 227px;
margin: 0 10px;
}
.bottombox {
display: flex;
align-items: center;
justify-content: center;
background: #fff;
height: 83px;
padding: 18px;
box-sizing: border-box;
}
.searchbtn2 {
height: 40px;
width: 120px;
margin: 0 10px;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -1,218 +0,0 @@
<template>
<div class="salecontainer">
<SearchForm :inputs="Inputs" @onSearch="onSearch" @onRest="onRest"/>
<div class="reciverecordtabox">
<el-table
:data="list"
row-key="tracking_number"
v-loading="loading"
border
default-expand-all
>
<el-table-column :prop="item.dataKey" :label="item.label" :sortable="item.sortable" v-for="item,index in columns" :key="String(index)">
<template #default="scope">
<span v-if="item.render" >
<span :style="{color:item.render(scope.row,item.dataKey).type=='error'?'red':'#101010'}">
{{item.render(scope.row,item.dataKey).text}}
</span>
</span>
<span v-else-if="item.label == '销售单号'">
{{ scope.row.sale_after_info.biz_order_id }}
</span>
<span v-else class="firstspan">
{{scope.row[item.dataKey]}}
</span>
</template>
</el-table-column>
</el-table>
<div class="paginationbox">
<el-pagination
v-model:current-page="page"
v-model:page-size="pageSize"
:page-sizes="[10,50,100, 200, 400, 800]"
:disabled="loading"
layout="total, sizes, prev, pager, next, jumper"
:total="total||list.length"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</div>
</div>
</template>
<script setup>
import { ref,unref,computed,reactive,onMounted} from 'vue';
import Table from "@components/table.vue";
import axioshooks from "@axioshooks";
import {ElMessage} from "element-plus";
import { useRouter } from 'vue-router';
import {Plus} from "@element-plus/icons-vue";
import SearchForm from "@components/searchForm/index.vue";
const imeipopover=ref(false);
const imeivalue=ref('');
const pageSize=ref(10);
const page=ref(1);
const total=ref(0);
const loading=ref(false);
const list=ref([]);
const params=ref({});
const Inputs=ref([
{
type:"el-input",
placeholder:"请输入快递单号",
value:"",
popover:true,
title:"快递单号",
name:"tracking_number"
},
{
type:"el-input",
placeholder:"请输入销售单号",
name:"biz_order_id",
value:"",
popover:true,
title:"销售单号",
},
{
type:"el-input",
placeholder:"请输入收货人",
name:"truename",
value:"",
title:"收货人",
}
]);
const columns=[
{
dataKey: `tracking_number`,
label:"快递单号",
width:200,
show:true,
align: "center",
},
{
dataKey: `biz_order_id`,
label:"销售单号",
show:true,
width:200,
align: "center",
},
{
dataKey: `truename`,
label:"收货人",
width:200,
align: "center",
},{
dataKey: `receive_time`,
label:"收货时间",
width:200,
align: "center",
},{
dataKey: `remark`,
label:"说明",
width:200,
align: "center",
},{
dataKey: `receive_result`,
label:"结果",
width:150,
align: "center",
show:true,
render:(item,key)=>{
let data=item[key]?tem[key]:item.children.receive_result;
if(data=="1"){
return {text:'收货成功' ,type:'success'};
}else if(data=="2"){
return {text:'无法匹配,请人工处理',type:'error'};
}else{
return {text:'未收到' ,type:'success'};
}
}
}
];
const onSearch=(values)=>{
params.value=values;
page.value=1;
getDatas();
}
const getDatas=()=>{
loading.value=true;
list.value=[];
axioshooks({
data:{list_row:pageSize.value,page:page.value,...params.value},
url:"trusteeship/receiving_records",
customHandler:(err,e)=>{
if(!err&&e){
if(e.errcode==0){
// list.value=e.datas;
list.value=e.datas.datas_list.map((h)=>{
h.children=h.sale_after_info;
return h;
});
console.log(list.value,'list')
total.value=e.datas.total;
loading.value=false;
}else{
ElMessage(e.msg);
loading.value=false;
}
}else if(err){
ElMessage(err);
loading.value=false;
}
}
});
}
onMounted(()=>{
page.value=1;
getDatas();
});
const onRest=()=>{
params.value={};
page.value=1;
getDatas();
}
const handleSizeChange=(v)=>{
console.log(pageSize,v,"ss");
pageSize.value=v;
page.value=1;
getDatas();
}
const handleCurrentChange=(v)=>{
console.log(page,v,"handleCurrentChange");
page.value=v;
getDatas();
}
</script>
<style lang="scss">
.salecontainer{
background:#F1F2F5;
flex:1;
display:flex;
flex-direction:column;
}
.reciverecordtabox{
margin:20px;
}
.paginationbox{
padding:20px;
background: #fff;
display:flex;
justify-content: flex-end;
}
</style>

View File

@ -1,429 +0,0 @@
<template>
<div class="container">
<div>
<erp-options ref="OptionsRef" :data="input" :model="formLabelAlign" @change="change" @imeichange="imeichange"
@cleartext="cleartext" @resetfrom="resetfrom" @search="inquire" @machineclear="machineclear"
:morepopoverFlag="morepopoverFlag">
</erp-options>
</div>
<div class="AG-table-center tablebox" >
<erp-configuration
:buttonlist="buttonlist"
:exploading="exploading"
:columnconfigvisible="columnconfigvisible"
:columnOptions="columnOptions"
:tableLabel="tableLabel"
@exceldown="exceldown"
@columnConfigClose="columnConfigClose"
@columnCfgRest="columnCfgRest"
@columnConfigSubmit="columnConfigSubmit"
@columnCfgCheck="columnCfgCheck"
@columnCfgAllchange="columnCfgAllchange"
@columnconfigClick="columnconfigClick"
></erp-configuration>
<erp-xy-table :tableDate="reviceList" :tabbar="true" :tablelabel="tableLabel" ref="xTables" >
</erp-xy-table>
<div style="background:#fff;padding-top:10px;height:48px;">
<erp-table-pagination :page="page" @handleCurrentChange="handleCurrentChange" @handleSizeChange="handleSizeChange"
style="padding:0;" />
</div>
</div>
</div>
</template>
<script>
import moment from "moment/moment";
function getToday(type = 'YYYY-MM-DD HH:mm:ss') {
const obj = {
starttime: "",
endtime: "",
};
obj.starttime = moment(moment().startOf("day").valueOf()).format(
type
);
obj.endtime = moment(moment().valueOf()).format(type);
return obj;
}
export default {
data() {
return {
tableData:[
{label:"全部",value:"all"},
{label:"等待寄出",value:"wait"},
{label:"待发货",value:"waitsend"},
{label:"等待质检",value:"waitcheck"},
{label:"质检完成",value:"checkfinish"},
{label:"等待寄回",value:"waitback"},
{label:"已寄回待收货",value:"waitrevice"}
],
activeTab:'all',
morepopoverFlag: false,
page: {
total: 0, //
list_row: 100, //
page: 1, //
pagesizes: [100, 200, 500, 1000, 2000, 5000, 10000],
},
loading:false,
formLabelAlign: {
imei: "",
time: [],
enName:"df",
},
buttonlist: [
],
input:[
{
lable: "imei/机器编号",
type: "el-input",
enName: "imei",
clearable: true,
placeholder: "请输入imei",
filterable: true,
ispopover: true,
display: false,
size: "small",
focus: () => { },
blur: () => { },
handleChange: () => { },
},
{
lable: "查询质检码",
type: "el-input",
enName: "check_code",
clearable: true,
placeholder: "请输入质检码",
filterable: true,
ispopover: true,
display: false,
size: "small",
focus: () => { },
blur: () => { },
handleChange: () => { },
},
],
tableLabel: [
{
label: "机器信息",
param: "model_info",
show: true,
link: true,
minwidth: "280",
},
{
label: "商品标题",
param: "goods_title",
align: "center",
minwidth: "90",
show: true,
},
{
label: "物流单号",
param: "repair_cost",
align: "center",
minwidth: "90",
show: true,
},
{
label: "质检完成时间",
param: "sale_cost",
align: "center",
minwidth: "90",
show: true,
},
{
label: "实物与订单是否一致",
param: "adjustment_cost",
align: "center",
minwidth: "150",
show: true,
},
{
label: "质检报告",
param: "cost_type",
align: "center",
minwidth: "90",
show: true,
},
{
label: "密封袋编码",
param: "receipt_time",
align: "center",
show: true,
minwidth: "80",
},
{
label: "操作",
param: "orderManagement",
align: "center",
show: true,
minwidth: "135",
fixed: "right",
status: ["Logs"],
},
],
reviceList:[
],
exploading:false,
columnconfigvisible: false, //
columnOptions: [
{ label: "机器信息", id: 1, disabled: true },
// { label: "", id: 2, disabled: false },
{ label: "质检员", id: 3, disabled: false },
{ label: "机器状态", id: 4, disabled: false },
{ label: "商品状态", id: 5, disabled: false },
// { label: "", id: 6, disabled: false },
// { label: "", id: 7, disabled: false },
{ label: "发布人", id: 8, disabled: false },
{ label: "机器成本", id: 9, disabled: false },
{ label: "保底价", id: 10, disabled: false },
// { label: "", id: 11, disabled: false },
// { label: "", id: 12, disabled: false },
// { label: "", id: 13, disabled: false },
// { label: "", id: 14, disabled: false },
{ label: "首次发布时间", id: 15, disabled: false },
// { label: "", id: 16, disabled: false },
{ label: "在库周期", id: 17, disabled: false },
// { label: "", id: 18, disabled: false },
{ label: "操作", id: 19, disabled: true },
], //
}
},
components:{},
created:{
},
computed: {
height() {
return document.documentElement.clientHeight - 230
},
},
methods: {
gettbdata(){
this.$nextTick(() => {
this.$refs.xTables.scrollTo(0, 0);
})
this.loading = true;
const obj = {
...this.formLabelAlign,
};
},
onTabClick(e){
console.log(e);
this.activeTab=e.name;
},
change(e){
console.log(e,"eee");
},
imeichange(type, text) {
if (type === "imei") {
this.formLabelAlign.imei = text;
this.$set(this.formLabelAlign, "business_id", "");
} else {
this.formLabelAlign.imei = "";
this.$set(this.formLabelAlign, "business_id", text);
}
},
inquire() {
this.page.page = 1;
this.gettbdata();
},
cleartext() {
this.formLabelAlign.imei = "";
this.formLabelAlign.business_id = "";
},
//
resetfrom() {
this.formLabelAlign = {
};
if(getToday()){
this.formLabelAlign.start_time = dateToTimestamp(getToday().starttime); //
this.formLabelAlign.end_time = dateToTimestamp(getToday().endtime) //
this.$refs["OptionsRef"].datevalue = [this.formLabelAlign.start_time, this.formLabelAlign.end_time];
}
},
getdate(e, date) {
if (e == "time") {
this.formLabelAlign.start_time = e === "time" && date ? date[0] : "";
this.formLabelAlign.end_time = e === "time" && date ? date[1] : "";
}
},
machineclear() {
this.formLabelAlign = {
...this.formLabelAlign,
};
},
//
//
handleSizeChange(data) {
Object.assign(this.formLabelAlign, data)
this.gettbdata()
},
//
handleCurrentChange(data) {
if(page.value!=data){
Object.assign(this.formLabelAlign, data)
this.gettbdata()
}
},
exceldown() {
this.exploading = true;
product_list({ ...this.formLabelAlign, is_excel: 1 }).then((res) => {
this.exploading = false;
// console.log(res);
//
var eleLink = document.createElement("a");
eleLink.download = "订单数据.html";
eleLink.style.display = "none";
eleLink.target = "_blank";
eleLink.href = res.datas.datas;
//
document.body.appendChild(eleLink);
eleLink.click();
//
document.body.removeChild(eleLink);
console.log(res);
});
},
//
columnConfigClose(e) {
this.columnconfigvisible = false;
},
//
columnconfigClick() {
this.columnconfigvisible = true;
},
//
selectAllEvent(val) {
this.selectdateList = val;
},
//
selectEvent(val) {
this.selectdateList = val;
},
//
OffShelf(data) {
const xy_product_id = [data.id];
this.$confirm("确定下架选中机器吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
})
.catch(() => {
this.$message({
type: "info",
message: "已取消下架",
});
});
},
//
Republish(data) {
this.$router.push({
name: "idleFishIssue",
query: { xy_product_id: data.id },
});
},
//
columnCfgCheck(e) {
this.checkedColumns = e;
},
//
columnCfgAllchange(e) {
this.checkedColumns = e;
},
//
columnCfgRest() {
//
this.checkedColumns = [
{ label: "机器信息", id: 1, disabled: true },
// { label: "", id: 2, disabled: false },
{ label: "质检员", id: 3, disabled: false },
{ label: "机器状态", id: 4, disabled: false },
{ label: "商品状态", id: 5, disabled: false },
// { label: "", id: 6, disabled: false },
// { label: "", id: 7, disabled: false },
{ label: "发布人", id: 8, disabled: false },
{ label: "机器成本", id: 9, disabled: false },
{ label: "保底价", id: 10, disabled: false },
// { label: "", id: 11, disabled: false },
// { label: "", id: 12, disabled: false },
// { label: "", id: 13, disabled: false },
// { label: "", id: 14, disabled: false },
{ label: "首次发布时间", id: 15, disabled: false },
// { label: "", id: 16, disabled: false },
{ label: "在库周期", id: 17, disabled: false },
// { label: "", id: 18, disabled: false },
{ label: "操作", id: 19, disabled: true },
];
},
//
columnConfigSubmit(e) {
this.loading = true;
this.dialogVisible = false;
//
this.tableLabel.forEach((item) => {
item.show = false;
});
this.checkedColumns.forEach((item) => {
for (let i = 0; i < this.tableLabel.length; i++) {
if (
this.tableLabel[i].label == item.label &&
item.label != "机器编号" &&
item.label != "质检码"
) {
this.tableLabel[i].show = true;
}
}
});
this.tableLabel1 = e;
// this.tableLabel = e;
this.dynamickey = new Date().getTime();
this.loading = false;
this.columnconfigvisible = false;
},
},
}
</script>
<style lang="scss" scoped>
.container{
background:#F1F2F5;
}
.tabsbox{
background: #fff;
padding:20px;
}
.topdesc{
color:#606060;
font-size:16px;
line-height: 24px;
}
.receivingWorkbenchbox {
padding: 10px;
flex:1;
}
.topinput{
margin-top:12px;
}
.input{
height:155px;
}
.mainbox{
margin-top:40px;
}
</style>