allocatr/public/assets/js/backend/order.js
2025-06-08 23:02:15 +08:00

636 lines
28 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'cascader'], function ($, undefined, Backend, Table, Form) {
function clearInfo() {
$('[name^="row["]').val('');
$("#c-city").citypicker('reset');
$("#item_id").val('');
$("#item_id_value").val('');
$(".selectpicker").val('').selectpicker('refresh');
}
function copyToClipboard(text) {
// 创建一个隐藏的 textarea 元素
const textarea = document.createElement('textarea');
textarea.value = text;
document.body.appendChild(textarea);
// 选中内容并复制
textarea.select();
document.execCommand('copy');
// 移除 textarea 元素
document.body.removeChild(textarea);
Toastr.info('复制成功');
}
// 拼装文本
function assembleOrderMessage(data) {
const message = `
【订单详情】
录单员: ${data.user.nickname}
订单编号: ${data.order_no}
服务名称: ${data.item_title}
客户姓名: ${data.customer}
客户电话: ${data.tel}
上门时间: ${data.plan_time}
优惠码: ${data.coupon?.description||'无'}
订单状态: ${data.status_text}
详细地址: ${data.address}
订单详情: ${data.detail}
订单备注: ${data.remark}
派单方式: ${data.dispatch_type === 1 ? '手动派单' : '自动派单'}
收款方式: ${data.receive_type === 1 ? '已收定金' : '已收全款'}
请查收以上订单信息。`;
return message;
}
var Controller = {
index: function () {
// 初始化表格参数配置
Table.api.init({
extend: {
index_url: 'order/index' + location.search,
add_url: 'order/add',
edit_url: 'order/edit',
//del_url: 'order/del',
multi_url: 'order/multi',
import_url: 'order/import',
push_url: 'order/status',
addabnormal: 'order/addAbnormal',
table: 'order',
}
});
var table = $("#table");
// 初始化表格
table.bootstrapTable({
url: $.fn.bootstrapTable.defaults.extend.index_url,
pk: 'id',
sortName: 'id',
fixedRightNumber: 1,
fixedNumber: 3,
fixedColumns: true,
renderDefault:true,
searchFormVisible:true,
search:false,
columns: [
[
{checkbox: true},
{field: 'id', title: __('Id')},
{
field: 'status',
title: __('Status'),
fixed:true,
searchList: {
"0": __('Status 0'),
"10": __('Status 10'),
"20": __('Status 20'),
"30": __('Status 30'),
"40": __('Status 40'),
"41": __('Status 41'),
"50": __('Status 50'),
"60": __('Status 60'),
"70": __('Status 70'),
"-10": __('Status -10'),
/*"-20": __('Status -20'),
"-30": __('Status -30')*/
},
defaultValue:10,
formatter: Table.api.formatter.status,
custom:{
"10":"my_dispatch"
}
},
{
field: 'dispatch_type',
title: '派单方式',
searchList: {
"1": '手动派单',
"2": '自动派单',
},
formatter: Table.api.formatter.label
},
{field: 'item_title', title: __('Item_title'), operate: 'LIKE'},
{field: 'user.nickname', title: '录单员'},
{field: 'order_no', title: __('Order_no'), operate: 'LIKE'},
{field: 'customer', title: __('Customer'), operate: 'LIKE'},
{field: 'tel', title: __('Tel'), operate: 'LIKE'},
{field: 'area.merge_name', title: __('Area_id'),searchable:false},
{
field: 'address',
title: __('Address'),
operate: 'LIKE',
table: table,
class: 'autocontent',
formatter: Table.api.formatter.content
},
{
field: 'receive_type',
title: '收款方式',
searchList: {
"1": '已收定金',
"2": '已收全款',
},
formatter: Table.api.formatter.label
},
{
field: 'total',
title: '总收款',
formatter: Table.api.formatter.Text
},
// {field: 'worker_id', title: __('Worker_id')},
{field: 'source_shop', title: __('Source')},
// {field: 'source_uid', title: __('Source_uid'), operate: 'LIKE'},
{
field: 'detail',
title: __('Detail'),
operate: 'LIKE',
table: table,
class: 'autocontent',
formatter: Table.api.formatter.content
},
{
field: 'remark',
title: __('Remark'),
operate: 'LIKE',
table: table,
class: 'autocontent',
formatter: Table.api.formatter.content
},
{
field: 'images',
title: __('Images'),
operate: false,
events: Table.api.events.image,
formatter: Table.api.formatter.images
},
{
field: 'create_time',
title: __('Create_time'),
operate: 'RANGE',
addclass: 'datetimerange',
autocomplete: false
},
{
field: 'update_time',
title: __('Update_time'),
operate: 'RANGE',
addclass: 'datetimerange',
autocomplete: false
},
{
field: 'operate',
title: __('Operate'),
table: table,
events: Table.api.events.operate,
formatter: Table.api.formatter.operate,
align: "left",
buttons: [
{
name: 'edit',
text: "修改",
icon: 'fa fa-pencil',
title: __('Edit'),
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-info btn-editone',
visible: function (row) {
if (row.status != 60 && row.status != 70) {
return true;
}
return false;
},
},
{
name: 'push',
icon: 'fa fa-copy',
title: '复制订单',
text: "复制订单",
url: 'order/copy',
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-dialog',
callback: function ($data) {
// console.log($data);
},
dropdown: "更多"
},
{
name: "dispatch",
text: "派单",
title: "派单",
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-info btn-dialog',
icon: 'fa fa-add',
url: function (row) {
return 'orders/dispatch/add?order_id=' + row.id;
},
visible: function (row) {
if (row.status == 10) {
return true;
}
return false;
},
refresh: true,
},
{
name: "warning",
text: "发起异常",
title: "发起异常",
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-dialog',
icon: 'fa fa-add',
url: 'order/warning',
visible: function (row) {
if (row.status == 10) {
return true;
}
return false;
},
dropdown: "更多",
refresh: true,
},
{
name: "mapdispatch",
text: "地图派单",
title: "派单",
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-info btn-dialog',
icon: 'fa fa-add',
url: function (row) {
return 'orders/dispatch/map?order_id=' + row.id;
},
visible: function (row) {
if (row.status == 10) {
return true;
}
return false;
},
callback:function (){
table.bootstrapTable('refresh');
}
},
{
name: "reminder",
text: "催单",
title: "催单",
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-ajax',
icon: 'fa fa-bolt',
url: 'order/reminder',
dropdown: "更多",
success: function (data, ret) {
if (ret.code === 1) {
Layer.alert('催单成功');
} else {
Layer.alert(ret.msg);
}
return false;
//如果需要阻止成功提示则必须使用return false;
//return false;
},
error: function (data, ret) {
Layer.alert(ret.msg);
return false;
},
visible: function (row) {
if (row.status == 10) {
return true;
}
return false;
},
},
{
name: "copy_text",
text: "复制信息",
title: "复制信息",
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-xs btn-info btn-click',
icon: 'fa fa-text',
click: function (data, item) {
const text = assembleOrderMessage(item);
copyToClipboard(text);
}
}, {
name: 'delete',
text: '取消订单',
title: '取消订单',
classname: 'btn btn-dialog',
icon: 'fa fa-trash',
url: 'order/delete',
dropdown: "更多",
visible: function (row) {
if (row.status >= 0 && row.status < 60) {
return true;
}
return false;
},
},
{
name:"error",
text:"订单报错",
title:"订单报错",
extend: 'data-toggle="tooltip" data-container="body"',
classname: 'btn btn-dialog',
icon: 'fa fa-bolt',
url: 'order/addAbnormal',
refresh:true,
dropdown: "更多",
visible: function (row) {
if (row.status != 60 && row.status != 70) {
return true;
}
return false;
},
},
{
name: 'invoice',
text: '申请开票',
title: '申请开票',
classname: 'btn btn-dialog',
icon: 'fa fa-send',
url: 'order/invoice/',
dropdown: "更多",
visible: function (row) {
if (row.status == 60 || row.status == 70) {
return true;
}
return false;
},
},
{
name: 'aftersale',
text: '申请售后',
title: '申请售后',
classname: 'btn btn-dialog',
icon: 'fa fa-phone-square',
url: 'aftersales/aftersale/add',
dropdown: "更多",
visible: function (row) {
if (row.status !== -10 && row.status !== 70) {
return true;
}
return false;
},
},
],
}
]
],
});
// 为表格绑定事件
Table.api.bindevent(table);
let cloneQueryParams = null;
//绑定tab事件
$('a[data-toggle="tab"]').on('show.bs.tab', function (event) {
let type = $(this).attr("data-value");
let options = table.bootstrapTable('getOptions');
$('.nav-tabs li').attr('class', '');
$(this).parent().attr("class", 'active');
options.pageNumber = 1;
if (cloneQueryParams == null) {
cloneQueryParams = options.queryParams;
}
options.queryParams = function (params) {
params.type = type;
return cloneQueryParams(params);
};
table.bootstrapTable('refresh', {});
return false;
});
const timer = setInterval(function () {
table.bootstrapTable('refresh', {});
},1000 * 120);
},
add: function () {
$("#mybuttom").on("click", function () {
const res = $("form[role=form]").isValid();
if (res){
Form.api.submit($("form[role=form]"));
// Toastr.success('录入成功');
}
return false;
});
$("#mysubmit").on("click", function () {
const res = $("form[role=form]").isValid();
if (res){
Form.api.submit($("form[role=form]"));
clearInfo();
// Toastr.success('录入成功');
}
return false;
});
$("#smart").on("click", function () {
$.ajax({
url: "order/smart", // 你的 API 地址
type: "GET",
dataType: "json",
data: {
str: $('#smart_text').val()
},
success: function (data) {
if (data.code === 1) {
data = data.data;
if (data.mobile !== '') {
$('#c-tel').val(data.mobile);
}
if (data.name !== '') {
$('#c-customer').val(data.name);
}
if (data.item.id !== 0) {
$('#item_id_value').val(data.item.id);
$('#item_id').val(data.item.item);
}
if (data.idn) {
$('#c-source-id').val(data.idn);
}
let citypicker = $('#c-city');
// $city.citypicker({
// province: data.province,
// city: data.city,
// district: data.region
// });
citypicker.val(data.province + '/' + data.city + '/' + data.region);
citypicker = citypicker.data("citypicker");
citypicker.refresh();
var code = citypicker.getCode("district") || citypicker.getCode("city") || citypicker.getCode("province");
$("#area_id").val(code);
$("#area_name").val(citypicker.getVal());
}
},
error: function () {
console.error("请求失败");
}
});
});
Controller.api.bindevent();
Controller.api.map();
},
edit: function () {
// 未选择上门时间时,隐藏时间选择框
var planTime = $('input[name="row[plan_time]"]').val()
if (planTime === '' || planTime === 'null') {
$('#set-time').hide();
} else {
$('#set-time').show();
}
Controller.api.bindevent();
Controller.api.map();
},
copy: function () {
// 未选择上门时间时,隐藏时间选择框
var planTime = $('input[name="row[plan_time]"]').val()
if (planTime === '' || planTime === 'null') {
$('#set-time').hide();
} else {
$('#set-time').show();
}
Controller.api.bindevent();
Controller.api.map();
},
saleafter: function () {
Controller.api.bindevent();
},
addabnormal: function () {
Form.api.bindevent($("#add-form"));
},
warning: function () {
Form.api.bindevent($("#add-form"));
},
delete: function () {
Form.api.bindevent($("form[role=form]"));
},
invoice: function () {
function toggleInvoiceFields() {
const type = $('#c-source').val();
if (type === '1') {
// 公司发票
$('#c-tax_number').closest('.form-group').show();
$('#c-company_address').closest('.form-group').show();
$('#c-company_phone').closest('.form-group').show();
$('#c-bank_name').closest('.form-group').show();
$('#c-bank_account').closest('.form-group').show();
} else {
// 个人发票
$('#c-tax_number').closest('.form-group').hide();
$('#c-company_address').closest('.form-group').hide();
$('#c-company_phone').closest('.form-group').hide();
$('#c-bank_name').closest('.form-group').hide();
$('#c-bank_account').closest('.form-group').hide();
}
}
// 初始化时执行一次
toggleInvoiceFields();
// 监听 select 改变
$('#c-source').on('change',function () {
toggleInvoiceFields();
});
Form.api.bindevent($("form[role=form]"));
},
api: {
bindevent: function () {
Form.api.bindevent($("form[role=form]"));
$('input[name="row[set_time]"]').on('change', function () {
var val = $(this).val();
if (val == 1) {
$('#set-time').show();
} else {
$('#set-time').hide();
}
});
},
map:function () {
$("#c-city").on("cp:updated", function () {
var citypicker = $(this).data("citypicker");
var code = citypicker.getCode("district") || citypicker.getCode("city") || citypicker.getCode("province");
$("#area_id").val(code);
$("#area_name").val(citypicker.getVal());
});
// $("#area_map").data("callback", function (res) {
// Form.api.target($('#c-address'));
// });
$(document).on('click', "#area_map", function (e) {
const data = $("#c-city").val();
if (!data){
Toastr.error('请先选择区域');
return false;
}
var that = this;
var callback = $(that).data('callback');
var input_id = $(that).data("input-id") ? $(that).data("input-id") : "";
var lat_id = $(that).data("lat-id") ? $(that).data("lat-id") : "";
var lng_id = $(that).data("lng-id") ? $(that).data("lng-id") : "";
var zoom_id = $(that).data("zoom-id") ? $(that).data("zoom-id") : "";
var lat = lat_id ? $("#" + lat_id).val() : '';
var lng = lng_id ? $("#" + lng_id).val() : '';
var city_code = $("#c-city").val();
var zoom = zoom_id ? $("#" + zoom_id).val() : '';
var url = "/addons/address/index/select?a=1";
url += (lat && lng) ? 'lat=' + lat + '&lng=' + lng +
(input_id ? "&address=" + $("#" + input_id).val() : "")
+(zoom ? "&zoom=" + zoom : "") : ''
;
if (city_code){
url += city_code ? "&city_code=" + city_code : "";
}
// console.log(url);
Fast.api.open(url, '位置选择', {
callback: function (res) {
input_id && $("#" + input_id).val(res.address).trigger("change");
lat_id && $("#" + lat_id).val(res.lat).trigger("change");
lng_id && $("#" + lng_id).val(res.lng).trigger("change");
zoom_id && $("#" + zoom_id).val(res.zoom).trigger("change");
try {
//执行回调函数
if (typeof callback === 'function') {
callback.call(that, res);
}
} catch (e) {
}
}
});
});
var _data = items;
$('#item_id').zdCascader({
data: _data,
onChange: function ($this, data, allPathData) {
// console.log(data,allPathData);
$('#item_id_value').val(data.value);
}
});
$('#item_id').val($('#item_id').data('value')).focus();
}
}
};
return Controller;
});