Files
yiqiu cbd6250967
All checks were successful
continuous-integration/drone/push Build is passing
修改插件
2025-11-21 00:01:45 +08:00

1031 lines
35 KiB
JavaScript

(function (window, undefined) {
var old_onload = window.onload;
window.onload = function () {
const template = document.getElementsByClassName("template")[0];
Vue.prototype.lang = Object.assign(window.lang, window.plugin_lang);
const host = location.origin;
const fir = location.pathname.split("/")[1];
const str = `${host}/${fir}/`;
new Vue({
components: {
comConfig,
comPagination,
comChooseUser,
opinionButton,
},
data () {
return {
message: "template...",
activeTab: "first",
baseUrl: str,
showIdcsmartTicketInternal: false,
params: {
keywords: "", // 关键字
page: 1,
limit: getGlobalLimit(),
status: [], // 状态
ticket_type_id: "", // 工单类型
client_id: "", // 用户搜索
admin_id: "", // 跟进人搜索
},
userParams: {
keywords: "",
page: 1,
limit: 20,
orderby: "id",
sort: "desc",
},
popupProps: {
overlayInnerStyle: (trigger) => ({
width: `${trigger.offsetWidth}px`,
"max-height": "362px",
}),
},
searchLoading: false,
closeRow: null,
closeOrderVisible: false,
// 转发弹窗
forwardDialogVisible: false,
audio_tip: null,
playNum: 1,
isPlayerAudio: false,
forwardFormData: {
admin_role_id: "",
admin_id: "",
ticket_type_id: "",
notes: "",
},
forwardFormRules: {
admin_role_id: [
{
required: true,
message: lang.order_designated_department + lang.isRequired,
type: "error",
},
],
admin_id: [
{
required: true,
message: lang.order_designated_person + lang.isRequired,
type: "error",
},
],
notes: [
{
required: true,
message: lang.order_designated_reson + lang.isRequired,
type: "error",
},
],
ticket_type_id: [
{
required: true,
message: lang.order_designated_type + lang.isRequired,
type: "error",
},
],
},
total: 100,
pageSizeOptions: [10, 20, 50, 100],
tableHeight: 500,
// 工单转内部弹窗
turnInsideDialogVisible: false,
turnInsideFormData: {},
userName: localStorage.getItem("userName") || "-",
turnInsideFormRules: {
title: [
{
required: true,
message: lang.order_title + lang.isRequired,
type: "error",
},
{
validator: (val) => val.length >= 1 && val.length <= 150,
message: lang.verify8 + "1-150",
type: "warning",
},
],
priority: [
{
required: true,
message: lang.order_priority + lang.isRequired,
type: "error",
},
],
ticket_type_id: [
{
required: true,
message: lang.order_name + lang.isRequired,
type: "error",
},
],
admin_role_id: [
{
required: true,
message: lang.order_designated_department + lang.isRequired,
type: "error",
},
],
content: [
{
validator: (val) => !val || val.length <= 3000,
message: lang.verify3 + "3000",
type: "warning",
},
],
},
// 指定部门下拉框数据(管理员分组列表数据)
departmentOptions: [],
// 指定人员下拉框数据(分组下管理员)
adminsOptions: [],
// 所有人员数据
adminList: [],
// 关联客户下拉框数据
clientOptions: [],
// 关联产品下拉框数据
hostOptions: [],
// 工单类型下拉框数据
orderTypeOptions: [],
// 工单状态下拉框数据
order_status_options: [],
// 默认自动刷新时间
order_time: 180000,
timeList: [
{
label: "1" + lang.sales_plugin_text73,
value: 60000,
},
{
label: "3" + lang.sales_plugin_text73,
value: 180000,
},
{
label: "5" + lang.sales_plugin_text73,
value: 300000,
},
{
label: "10" + lang.sales_plugin_text73,
value: 600000,
},
],
// 紧急程度下拉框数据
priorityOptions: [
{
id: "medium",
name: lang.order_priority_medium,
},
{
id: "high",
name: lang.order_priority_high,
},
],
// 上传文件headers设置
uploadHeaders: {
Authorization: "Bearer" + " " + localStorage.getItem("backJwt"),
},
uploadUrl: str + "v1/upload",
uploadTip: "",
// 用户工单列表
userOrderTableloading: false,
userOrderData: [],
userOrderColumns: [
{
align: "left",
width: "100",
colKey: "id",
title: "ID",
},
{
align: "left",
minWidth: "300",
colKey: "title",
title: lang.order_title,
ellipsis: true,
},
{
align: "left",
width: "120",
colKey: "name",
title: lang.order_name,
},
{
align: "left",
width: "200",
colKey: "user",
title: lang.order_user_people,
ellipsis: true,
},
{
align: "left",
width: "150",
colKey: "last_reply_time",
title: lang.order_last_reply_time,
},
{
align: "left",
width: "120",
colKey: "status",
title: lang.order_status,
},
{
align: "left",
width: "120",
colKey: "op",
fixed: "right",
title: lang.operation,
},
],
// 管理工单类型弹窗相关
orderTypeMgtTableloading: false,
orderTypeMgtDialogVisible: false,
orderTypeMgtData: [],
orderTypeMgtColumns: [
{
align: "left",
width: 50,
colKey: "index",
title: lang.order_index,
},
{
align: "left",
width: 130,
colKey: "name",
title: lang.order_type_name,
},
{
align: "left",
width: 180,
colKey: "role_name",
title: lang.order_default_receive_department,
},
{
align: "left",
width: 100,
colKey: "operation",
title: lang.operation,
fixed: "right",
},
],
// 新建工单弹窗
addOrderDialogVisible: false,
addOrderFormData: {},
addOrderFormRules: {
title: [
{
required: true,
message: lang.order_title + lang.isRequired,
type: "error",
},
{
validator: (val) => val.length >= 1 && val.length <= 150,
message: lang.verify8 + "1-150",
type: "warning",
},
],
// priority: [{ required: true, message: lang.order_priority + lang.isRequired, type: 'error' }],
client_id: [
{
required: true,
message: lang.order_text2 + lang.isRequired,
type: "error",
},
],
ticket_type_id: [
{
required: true,
message: lang.order_name + lang.isRequired,
type: "error",
},
],
// admin_role_id: [{
// required: true, message: lang.order_designated_department + lang.isRequired,
// type: 'error'
// }],
content: [
{
validator: (val) => !val || val.length <= 3000,
message: lang.verify3 + "3000",
type: "warning",
},
],
},
submitLoading: false,
};
},
computed: {
calcColor () {
return color => {
return getTextColor(color);
};
}
},
methods: {
changeUser (val) {
this.params.client_id = val;
},
// 选择部门
changeType (type) {
this.adminsOptions = this.orderTypeOptions.filter(
(item) => item.id === type
)[0]?.admin;
this.forwardFormData.admin_id = "";
},
// 获取工单类型数据
getOrderTypeOptions (id) {
const params = {
admin_role_id: id ? id : "",
};
getUserOrderType(params)
.then((result) => {
this.orderTypeOptions = result.data.data.list;
})
.catch();
},
rowClick (e) {
// location.href = `ticket_detail.htm?id=${e.row.id}`;
},
// 工单-转发
internalOrderForward (row) {
// 清除已选人员数据
this.forwardFormData.admin_id = "";
this.forwardFormData.ticket_type_id = "";
this.forwardFormData.admin_role_id = "";
this.forwardFormData.id = row.id;
this.forwardDialogVisible = true;
this.forwardFormData.notes = "";
},
goclient_detail (row) {
location.href = str + `client_detail.htm?client_id=${row.client_id}`;
},
// 工单-转发-提交
forwardFormSubmit ({ validateResult, firstError }) {
if (validateResult === true) {
const data = this.forwardFormData;
const params = {
id: data.id,
notes: data.notes,
// admin_role_id: data.admin_role_id, //指定部门
ticket_type_id: data.ticket_type_id,
admin_id: data.admin_id ? data.admin_id : null, //管理员
};
this.submitLoading = true;
forwardTicket(data.id, params)
.then((result) => {
this.$message.success({
content: result.data.msg,
placement: "top-right",
});
this.forwardDialogClose();
this.getUserOrderList();
})
.catch((result) => {
this.$message.warning({
content: result.data.msg,
placement: "top-right",
});
})
.finally(() => {
this.submitLoading = false;
});
} else {
this.$message.warning({
content: firstError,
placement: "top-right",
});
}
},
// 工单-转发-弹窗关闭
forwardDialogClose () {
this.forwardDialogVisible = false;
},
// 获取部门数据
getDepartmentOptions () {
getAdminRole({ page: 1, limit: 10000 })
.then((result) => {
this.departmentOptions = result.data.data.list;
})
.catch();
},
// 获取已激活插件
getActive_plugin () {
active_plugin().then((res) => {
const arr = res.data.data.list.map((item) => {
return item.name;
});
if (arr.includes("IdcsmartTicketInternal")) {
this.showIdcsmartTicketInternal = true;
this.$forceUpdate();
}
});
},
// 获取人员数据
getAdminList () {
getAdminList({ page: 1, limit: 10000 }).then((result) => {
// 上游
const obj = [
{
id: 0,
name: lang.order_text80,
nickname: lang.order_text80,
phone_code: "86",
status: 1,
phone: "",
email: "",
roles: [],
},
];
this.adminList = [...result.data.data.list, ...obj];
});
},
// 获取工单状态列表
getTicketStatus () {
ticketStatus().then((res) => {
res.data.data.list.forEach((item) => {
if (item["status"] === 0) {
this.params.status.push(item.id);
}
delete item["default"];
});
this.order_status_options = res.data.data.list;
this.isPlayerAudio = true;
this.getUserOrderList();
});
},
// 选择刷新时间
selectTimeChange (value) {
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
this.timer = setInterval(() => {
this.isPlayerAudio = true;
this.doUserOrderClear();
}, value);
},
askNotificationPermission () {
// 检查浏览器是否支持通知
return "Notification" in window;
},
// 工单-获取数据
async getUserOrderList () {
this.userOrderTableloading = true;
const userOrderData = await getUserOrder(this.params);
if (userOrderData && userOrderData.data) {
userOrderData.data.data.list.forEach((item) => {
item.newTitle = "#" + item.ticket_num + "-" + item.title;
});
const orderStatusNameList = this.order_status_options
.filter((item) => {
return item.status === 0 && item.id !== 5;
})
.map((item) => item.name);
const needNotification =
userOrderData.data.data.list.filter(
(item) =>
orderStatusNameList.includes(item.status) &&
(item.admin_name == this.userName || !item.admin_name)
).length > 0;
if (needNotification && this.isPlayerAudio) {
this.audio_tip.addEventListener("ended", this.palyAudio);
this.audio_tip.play();
if (this.askNotificationPermission()) {
new Notification(lang.work_order_tip);
}
}
this.userOrderData = userOrderData.data.data.list;
this.total = userOrderData.data.data.count;
this.userOrderTableloading = false;
}
},
// 播放音频
palyAudio () {
this.playNum++;
if (this.playNum >= 3) {
this.playNum = 1;
this.isPlayerAudio = false;
return;
}
this.audio_tip.play();
},
// 工单-切换分页
changePage (e) {
this.params.page = e.current;
this.params.limit = e.pageSize;
this.getUserOrderList();
},
// 新建工单
goAddorder (row) {
if (row) {
location.href =
str +
`/plugin/idcsmart_ticket_internal/ticket_internal_add.htm?id=${row.id}&client_id=${row.client_id}&host_ids=${row.host_ids}`;
} else {
location.href = `ticket_add.htm`;
}
},
// 工单-查询
doUserOrderSearch (val) {
if (val === "all") {
this.params.status = this.order_status_options.map((item) => {
return item.id;
});
}
this.params.page = 1;
this.getUserOrderList();
},
clearKey () {
this.params.keywords = "";
this.doUserOrderSearch();
},
// 工单-列表-清空
doUserOrderClear () {
this.params.page = 1;
this.params.keywords = "";
this.params.status = []; // 状态
this.params.ticket_type_id = ""; // 工单类型
this.params.client_id = ""; // 用户搜索
this.params.admin_id = ""; // 跟进人搜索
this.getTicketStatus();
},
// 工单-转内部
userOrderTurnInside (row) {
this.turnInsideFormData = {};
getUserOrderDetail(row.id)
.then((result) => {
const data = result.data.data.ticket;
if (data.attachment && data.attachment.length > 0) {
data.attachment.forEach((item, i) => {
data.attachment[i] = { response: {} };
data.attachment[i].name = item.split("^")[1];
data.attachment[i].response.save_name =
item.split("upload/")[1];
});
}
this.turnInsideFormData = { ...row, ...data };
// const client = this.clientOptions.filter(item => item.username === row.username)[0];
// this.turnInsideFormData.client_id = client ? client.id : null;
if (this.turnInsideFormData.client_id) {
this.clientChange(this.turnInsideFormData.client_id, true);
}
if (!this.turnInsideFormData.ticket_type_id) {
const orderType = this.orderTypeOptions.filter(
(item) => item.name === this.turnInsideFormData.name
)[0];
this.turnInsideFormData.ticket_type_id = orderType
? orderType.id
: null;
}
this.orderTypeChange(this.turnInsideFormData.ticket_type_id);
// this.turnInsideFormData.attachment = [];
this.turnInsideDialogVisible = true;
})
.catch((error) => {
console.log(error);
});
},
// 工单-转内部-关联用户变化
clientChange (val, isFirst) {
if (!isFirst) {
// 清除已选产品数据
this.turnInsideFormData.host_ids = [];
}
getHost({ client_id: val, page: 1, limit: 10000 }).then((result) => {
this.hostOptions = result.data.data.list;
this.hostChange();
});
},
// 工单-转内部-关联产品变化
hostChange () {
this.$forceUpdate();
},
// 工单-转内部-选择部门变化
departmentChange (val) {
// 获取部门id对应部门名称
const department = this.departmentOptions.filter(
(item) => item.id === val
)[0];
const name = department ? department.name : null;
const optionList = [];
// 清除已选人员数据
this.forwardFormData.admin_id = "";
this.forwardFormData.ticket_type_id = "";
this.adminList.forEach((item) => {
if (name && item.roles === name) {
optionList.push(item);
}
});
this.adminsOptions = optionList;
this.getOrderTypeOptions(val);
},
// 工单-转发-选择人员变化
adminChange (val) {
this.$forceUpdate();
},
// 工单-转内部-工单类型变化
orderTypeChange (val) {
// 获取当前所选数据工单类型对应部门名称
const type = this.orderTypeOptions.filter(
(item) => item.id === val
)[0];
const admin_role_name = type ? type.role_name : null;
if (admin_role_name) {
// 默认设置部门为工单类型对应的部门
const data = this.departmentOptions.filter(
(item) => item.name && item.name === admin_role_name
)[0];
this.turnInsideFormData.admin_role_id =
data && data.id ? data.id : null;
// 获取该部门下人员列表
this.departmentChange(this.turnInsideFormData.admin_role_id);
}
// 清除已选人员数据
this.turnInsideFormData.admin_id = null;
},
// 工单-转内部-上传附件-返回
uploadFormatResponse (res) {
if (!res || res.status !== 200) {
return { error: lang.upload_fail };
}
return { ...res, save_name: res.data.save_name };
},
// 上传附件-进度
uploadProgress (val) {
if (val.percent) {
this.uploadTip = "uploaded" + val.percent + "%";
if (val.percent === 100) {
this.uploadTip = "";
}
}
},
// 上传附件-成功后
uploadSuccess (res) {
if (
res.fileList.filter((item) => item.name == res.file.name).length > 1
) {
this.$message.warning({
content: lang.upload_same_name,
placement: "top-right",
});
this.turnInsideFormData.attachment.splice(
this.turnInsideFormData.attachment.length - 1,
1
);
}
this.$forceUpdate();
},
removeAttachment (file, i) {
this.turnInsideFormData.attachment.splice(i, 1);
this.$forceUpdate();
},
// 工单-转内部-提交
turnInsideFormSubmit ({ validateResult, firstError }) {
if (validateResult === true) {
const data = this.turnInsideFormData;
const attachmentList = [];
data.attachment.forEach((item) => {
attachmentList.push(item.response.save_name);
});
const params = {
ticket_id: data.id, //工单ID(转内部工单时需要传此参数)
title: data.title, //内部工单标题
ticket_type_id: data.ticket_type_id, //内部工单类型ID
priority: data.priority, //紧急程度:medium一般,high紧急
client_id: data.client_id ? data.client_id : null, //关联用户
admin_role_id: data.admin_role_id, //指定部门
admin_id: data.admin_id ? data.admin_id : null, //管理员ID
host_ids: data.host_ids ? data.host_ids : [], //关联产品ID,数组
content: data.content ? data.content : "", //问题描述
attachment: attachmentList, //附件,数组,取上传文件返回值save_name)
};
this.submitLoading = true;
newInternalOrder(params)
.then((result) => {
this.$message.success({
content: result.data.msg,
placement: "top-right",
});
this.turnInsideDialogClose();
this.getUserOrderList();
})
.catch((result) => {
this.$message.warning({
content: result.data.msg,
placement: "top-right",
});
})
.finally(() => {
this.submitLoading = false;
});
} else {
this.$message.warning({
content: firstError,
placement: "top-right",
});
}
},
// 工单-转内部-弹窗关闭
turnInsideDialogClose () {
this.turnInsideDialogVisible = false;
},
// 工单-接收
userOrderReceive (row) {
receiveUserOrder(row.id)
.then((result) => {
this.$message.success({
content: result.data.msg,
placement: "top-right",
});
this.getUserOrderList();
})
.catch((result) => {
this.$message.warning({
content: result.data.msg,
placement: "top-right",
});
});
},
// 工单-回复
userOrderReply (row) {
(this.$checkPermission("auth_user_ticket_list_ticket_detail") ||
this.$checkPermission("auth_user_ticket_detail")) &&
(location.href = `ticket_detail.htm?id=${row.id}`);
},
isClose (row) {
this.closeRow = row;
this.closeOrderVisible = true;
},
closeDia () {
this.closeOrderVisible = false;
},
// 工单-已解决
userOrderResolved (row) {
this.submitLoading = true;
resolvedUserOrder(row.id)
.then((result) => {
this.$message.success({
content: result.data.msg,
placement: "top-right",
});
this.getUserOrderList();
this.closeDia();
})
.catch((result) => {
this.$message.warning({
content: result.data.msg,
placement: "top-right",
});
})
.finally(() => {
this.submitLoading = false;
});
},
// 时间格式转换
formatDate (dateStr) {
const date = new Date(dateStr * 1000);
const str1 = [
date.getFullYear(),
date.getMonth() + 1,
date.getDate(),
].join("-");
const str2 = [
this.formatDateAdd0(date.getHours()),
this.formatDateAdd0(date.getMinutes()),
this.formatDateAdd0(date.getSeconds()),
].join(":");
return str1 + " " + str2;
},
formatDateAdd0 (m) {
return m < 10 ? "0" + m : m;
},
// 工单-工单类型管理-弹窗显示
orderTypeMgtDialogShow () {
this.orderTypeMgtTableloading = true;
this.getOrderTypeMgtList();
this.orderTypeMgtDialogVisible = true;
},
// 工单-工单类型管理-获取工单类型数据
async getOrderTypeMgtList () {
const result = await getUserOrderType();
if (result.status === 200) {
const data = result.data.data.list;
data.forEach((item) => {
if (item.role_name) {
const department = this.departmentOptions.filter(
(op) => op.name === item.role_name
)[0];
item.admin_role_id = department ? department.id : null;
}
});
this.orderTypeMgtData = data;
this.orderTypeMgtTableloading = false;
}
},
// 工单-工单类型管理-关闭弹窗
orderTypeMgtClose () {
let mydialog = this.$dialog({
theme: "warning",
header: `${lang.sure_cancel}`,
className: "t-dialog-new-class1 t-dialog-new-class2",
style: "color: rgba(0, 0, 0, 0.6)",
confirmBtn: lang.sure,
cancelBtn: lang.cancel,
onConfirm: ({ e }) => {
mydialog.hide();
this.orderTypeMgtDialogVisible = false;
},
});
},
// 工单-工单类型管理-编辑
orderTypeMgtEdit (row) {
const checkResult = this.checkOrderType();
if (checkResult) {
for (let i = 0; i < this.orderTypeMgtData.length; i++) {
if (this.orderTypeMgtData[i].id === row.id) {
this.orderTypeMgtData.splice(i, 1, {
status: "edit",
...row,
});
}
}
}
},
// 工单-工单类型管理-校验当前数据是否都已保存
checkOrderType () {
let result = true;
this.orderTypeMgtData.forEach((item) => {
if (item.status === "edit" || item.status === "add") {
this.$message.warning({
content: lang.order_type_verify3,
placement: "top-right",
});
result = false;
}
});
return result;
},
// 工单-工单类型管理-保存
async orderTypeMgtSave (row) {
if (!row.admin_role_id || !row.name) {
this.$message.warning({
content: lang.order_type_verify1,
placement: "top-right",
});
return;
}
const params = {
admin_role_id: row.admin_role_id,
name: row.name,
};
let result = {};
if (this.isSubmit) {
return;
}
this.isSubmit = true;
if (row.status === "edit") {
params.id = row.id;
orderTypeEdit(row.id, params)
.then((result) => {
this.$message.success({
content: result.data.msg,
placement: "top-right",
});
this.getOrderTypeMgtList();
})
.catch((result) => {
this.$message.warning({
content: result.data.msg,
placement: "top-right",
});
})
.finally(() => {
setTimeout(() => {
this.isSubmit = false;
}, 1000);
});
} else {
orderTypeAdd(params)
.then((result) => {
this.$message.success({
content: result.data.msg,
placement: "top-right",
});
this.getOrderTypeMgtList();
})
.catch((result) => {
this.$message.warning({
content: result.data.msg,
placement: "top-right",
});
})
.finally(() => {
setTimeout(() => {
this.isSubmit = false;
}, 1000);
});
}
},
// 工单-工单类型管理-删除
async orderTypeMgtDelete (row) {
const result = await orderTypeDelete(row.id);
if (result.status === 200) {
this.$message.success({
content: result.data.msg,
placement: "top-right",
});
this.getOrderTypeMgtList();
} else {
this.$message.warning({
content: result.data.msg,
placement: "top-right",
});
}
},
// 工单-工单类型管理-新增
newOrderType () {
const checkResult = this.checkOrderType();
if (checkResult) {
this.orderTypeMgtData.push({
status: "add",
id: Math.random(),
role_name: null,
name: "",
});
}
},
// 工单-新建工单-提交
addOrderFormSubmit ({ validateResult, firstError }) {
if (validateResult === true) {
const data = this.addOrderFormData;
const attachmentList = [];
data.attachment.forEach((item) => {
attachmentList.push(item.response.save_name);
});
const params = {
title: data.title, //内部工单标题
ticket_type_id: data.ticket_type_id, //内部工单类型ID
// priority: data.priority, //紧急程度:medium一般,high紧急
client_id: data.client_id ? data.client_id : null, //关联用户
// admin_role_id: data.admin_role_id, //指定部门
// admin_id: data.admin_id ? data.admin_id : null, //管理员ID
host_ids: data.host_ids ? data.host_ids : [], //关联产品ID,数组
content: data.content ? data.content : "", //问题描述
attachment: attachmentList, //附件,数组,取上传文件返回值save_name)
};
newUserOrder(params)
.then((result) => {
this.$message.success({
content: result.data.msg,
placement: "top-right",
});
this.addOrderDialogClose();
this.getUserOrderList();
})
.catch((result) => {
this.$message.warning({
content: result.data.msg,
placement: "top-right",
});
});
} else {
this.$message.warning({
content: firstError,
placement: "top-right",
});
}
},
// 工单-新建工单-弹窗关闭
addOrderDialogClose () {
this.addOrderDialogVisible = false;
},
// 工单-新建工单-弹窗显示
newOrderDialogShow () {
this.addOrderFormData = {};
this.addOrderFormData.attachment = [];
// this.getClientOptions();
this.getOrderTypeOptions();
this.getAdminList();
this.addOrderDialogVisible = true;
},
},
created () {
const domHeight = template.scrollHeight;
this.tableHeight = domHeight - 230;
this.getDepartmentOptions();
this.getAdminList();
this.getActive_plugin();
this.getOrderTypeOptions();
setTimeout(() => {
this.selectTimeChange(180000);
}, 180000);
window.doUserOrderSearch = this.doUserOrderSearch;
},
mounted () {
this.audio_tip = document.getElementById("audio_tip");
this.getTicketStatus();
},
}).$mount(template);
typeof old_onload == "function" && old_onload();
};
})(window);