Files
BlackFruit-UI/plugins/addon/example/template/clientarea/mobile/mfm201/js/ticket.js
yiqiu cbd6250967
All checks were successful
continuous-integration/drone/push Build is passing
修改插件
2025-11-21 00:01:45 +08:00

443 lines
13 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.
(function (window, undefined) {
var old_onload = window.onload;
window.onload = function () {
typeof old_onload == "function" && old_onload();
window.lang = Object.assign(window.lang, window.plugin_lang);
const { showToast } = vant;
const app = Vue.createApp({
components: {
topMenu,
curSelect,
},
data() {
return {
lang: window.lang,
// 分页
params: {
page: 1,
limit: 20,
pageSizes: [20, 50, 100],
total: 200,
orderby: "id",
sort: "desc",
keywords: "",
status: [3],
ticket_type_id: "",
},
ticketData: {
title: "",
ticket_type_id: "",
host_ids: "",
content: "",
attachment: [],
// 工单部门id
admin_role_id: "",
},
hasApp: false,
rules: {
title: [
{
required: true,
message: lang.ticket_tips9,
trigger: "blur",
},
],
ticket_type_id: [
{
required: true,
message: lang.ticket_tips2,
trigger: "blur",
},
],
content: [
{
required: true,
message: lang.ticket_tips6,
trigger: "blur",
},
],
},
// 通用数据
commonData: {},
// 表格数据
dataList: [],
// 表格加载
tableLoading: false,
tableFinished: false,
// 创建工单弹窗是否显示
isShowDialog: false,
// 创建工单弹窗 数据
formData: {
title: "",
ticket_type_id: "",
host_ids: [],
content: "",
attachment: [],
},
// 表单错误信息显示
errText: "",
// 工单类别
ticketType: [],
ticketStatus: [],
// 关联产品列表
hostList: [],
createBtnLoading: false,
loading: false,
fileList: [],
configObj: {
ticket_notice_open: 0,
ticket_notice_description: "",
},
statusIsChange: false,
};
},
computed: {
calcTicketType() {
return [
{
value: "",
text: lang.all,
},
].concat(this.ticketType);
},
calcStatus() {
const arrName = [];
this.ticketStatus.forEach((item) => {
if (this.params.status.includes(item.id)) {
arrName.push(item.name);
}
});
return arrName.length > 1
? arrName[0] + " +" + (arrName.length - 1).toString()
: arrName.join("、");
},
calcHostName() {
const item = this.hostList.find((item) => {
return item.id == this.ticketData.host_ids;
});
if (item) {
return item.product_name + "(" + item.name + ")";
} else {
return "";
}
},
},
created() {
// 获取通用信息
this.getCommonData();
this.getOrderConfig();
// 获取工单类型
this.getTicketType();
// 获取工单状态
this.getTicketStatus();
// 获取关联产品列表
this.getHostList();
},
mounted() {
this.hasApp = havePlugin("IdcsmartAppMarket");
},
methods: {
handleRenew(item) {
const hostId = item.parent_host_id || item.id;
window.open(`/productdetail.htm?id=${hostId}`);
},
goBack() {
window.history.back();
},
async getOrderConfig() {
try {
const res = await getOrderConfig();
this.configObj = res.data.data;
} catch (error) {}
},
// 获取通用配置
getCommonData() {
this.commonData = JSON.parse(
localStorage.getItem("common_set_before")
);
document.title =
this.commonData.website_name + "-" + lang.ticket_label15;
},
handeSelecFile() {
this.$refs.uploadRef.chooseFile();
},
afterRead(file) {
const arr = [];
if (file instanceof Array) {
arr.push(...file);
} else {
arr.push(file);
}
this.uploadFiles(arr);
},
handeDelFile(file, index) {
this.ticketData.attachment = this.ticketData.attachment.filter(
(item) => {
return item != file.save_name;
}
);
this.fileList.splice(index, 1);
},
delAllFile() {
this.ticketData.attachment = [];
this.fileList = [];
},
uploadFiles(arr) {
arr.forEach((item) => {
const formData = new FormData();
formData.set("file", item.file); // 这里要用set,如果用append还是会出现一起上传的情况
uploadFile(formData)
.then((res) => {
console.log(res);
if (res.data.status === 200) {
this.fileList.push({
file: item.file,
save_name: res.data.data.save_name,
});
this.ticketData.attachment.push(res.data.data.save_name);
}
})
.catch((err) => {
showToast(err.data.msg);
});
});
},
initPage() {
this.params.page = 1;
this.dataList = [];
// 获取列表
this.getTicketList();
},
// 获取工单列表
getTicketList() {
this.tableLoading = true;
ticketList(this.params)
.then((res) => {
if (res.data.status === 200) {
this.dataList = this.dataList.concat(res.data.data.list);
this.tableLoading = false;
this.params.page++;
this.params.total = res.data.data.count;
this.tableFinished =
this.dataList.length >= res.data.data.count;
}
})
.catch((err) => {
this.tableLoading = false;
showToast(err.data.msg);
});
},
// 展示创建弹窗 并初始化弹窗数据
showCreateDialog() {
location.href = `addTicket.htm`;
},
handelMore() {},
calcProductName(item) {
const curTime = parseInt(new Date().getTime() / 1000);
if (item.due_time > 0) {
if (item.due_time <= curTime) {
// 已到期
return `(${lang.ticket_label21})`;
} else if (item.due_time - curTime <= item.renewal_first_day_time) {
// 即将到期
return `(${item.name.slice(0, 8)}......${item.name.slice(-5)})${
lang.ticket_label22
}`;
} else {
return `(${item.name})`;
}
} else {
return `(${item.name})`;
}
},
calcShowRenew(item) {
const curTime = parseInt(new Date().getTime() / 1000);
if (
item.due_time > 0 &&
(item.due_time <= curTime ||
item.due_time - curTime <= item.renewal_first_day_time)
) {
return true;
}
},
onSubmit() {
this.$refs.ticketForm.validate().then(() => {
this.loading = true;
const params = { ...this.ticketData };
params.host_ids = params.host_ids ? [params.host_ids] : [];
createTicket(params)
.then((res) => {
if (res.data.status == 200) {
const id = res.data.data.id;
location.href = `ticketDetails.htm?id=${id}`;
}
this.loading = false;
})
.catch((error) => {
this.loading = false;
showToast(error.data.msg);
});
});
},
statusClose() {
if (this.statusIsChange) {
this.initPage();
this.statusIsChange = false;
}
},
clickStatus(item) {
if (this.params.status.includes(item)) {
this.params.status.splice(this.params.status.indexOf(item), 1);
} else {
this.params.status.push(item);
}
this.statusIsChange = true;
},
openAddTicket() {
this.ticketData = {
title: "",
ticket_type_id: "",
host_ids: "",
content: "",
attachment: [],
// 工单部门id
admin_role_id: "",
};
this.$refs.ticketForm && this.$refs.ticketForm.resetValidation();
this.isShowDialog = true;
},
closeDialog() {
this.delAllFile();
this.isShowDialog = false;
},
hexToRgb(hex) {
const color = hex.split("#")[1];
const r = parseInt(color.substring(0, 2), 16);
const g = parseInt(color.substring(2, 4), 16);
const b = parseInt(color.substring(4, 6), 16);
return `rgba(${r},${g},${b},0.12)`;
},
// 获取工单类型
getTicketType() {
ticketType().then((res) => {
if (res.data.status === 200) {
this.ticketType = res.data.data.list.map((item) => {
item.value = item.id;
item.text = item.name;
return item;
});
}
});
},
// 获取工单状态列表
getTicketStatus() {
ticketStatus().then((res) => {
if (res.data.status === 200) {
this.params.status = [3];
this.ticketStatus = res.data.data.list.map((item) => {
item.value = item.id;
item.text = item.name;
return item;
});
res.data.data.list.forEach((item) => {
if (item.status === 0) {
this.params.status.push(item.id);
}
});
// 获取工单列表
this.initPage();
}
});
},
// 获取产品列表
getHostList() {
const params = {
keywords: "",
status: "",
page: 1,
limit: 1000,
orderby: "id",
sort: "desc",
scene: "ticket",
};
hostAll(params).then((res) => {
if (res.data.status === 200) {
this.hostList = res.data.data.list
.filter((item) => item.status !== "Deleted")
.map((item) => {
const curTime = parseInt(new Date().getTime() / 1000);
item.isDue = item.due_time > 0 && item.due_time <= curTime;
return item;
});
}
});
},
chooseItem(e) {
const val = e[0].id;
const cur = this.hostList.filter((el) => el.id === val);
if (this.hasApp && cur.length > 0 && cur[0].isDue) {
this.ticketData.host_ids = "";
}
},
// 跳转工单详情
itemReply(record) {
const id = record.id;
location.href = `ticketDetails.htm?id=${id}`;
},
// 关闭工单
itemClose(record) {
const id = record.id;
const params = {
id,
};
// 调用关闭工单接口 给出结果
closeTicket(params)
.then((res) => {
if (res.data.status === 200) {
showToast(res.data.msg);
this.initPage();
}
})
.catch((err) => {
showToast(err.data.msg);
});
},
// 催单
itemUrge(record) {
const nowDate = new Date().getTime();
const last_reply_time = record.last_urge_time * 1000;
if (nowDate - last_reply_time < 1000 * 60 * 15) {
showToast(lang.ticket_label16);
return;
}
const id = record.id;
const params = { id };
// 调用催单接口 给出结果
urgeTicket(params)
.then((res) => {
if (res.data.status === 200) {
showToast(res.data.msg);
}
})
.catch((err) => {
showToast(err.data.msg);
});
},
titleClick(record) {
const id = record.id;
location.href = `ticketDetails.htm?id=${id}`;
},
},
});
window.directiveInfo.forEach((item) => {
app.directive(item.name, item.fn);
});
app.use(vant).mount("#template");
};
})(window);