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

254 lines
14 KiB
HTML

<link rel="stylesheet" href="/plugins/addon/idcsmart_ticket/template/admin/css/order.css" />
<!-- =======内容区域======= -->
<div id="content" class="template" v-cloak>
<com-config>
<t-card class="list-card-container">
<ul class="common-tab">
<li class="active">
<a>{{lang.work_list}}</a>
</li>
<li v-permission="'auth_user_ticket_configuration'">
<a href="ticket_setting.htm">{{lang.order__configuration}}</a>
</li>
</ul>
<div class="order-search-wrapper internal">
<div class="flex">
<div>
<t-button @click="goAddorder()" v-permission="'auth_user_ticket_list_create_ticket'">
{{lang.order_new_rder}}
</t-button>
</div>
<t-select :placeholder="lang.please_search_order_time" v-model="order_time" :options="timeList"
class="com-gap select-time" @change="selectTimeChange">
<div slot="panelTopContent" style="padding: 6px 6px 0 6px">
<span>{{lang.choose_refresh_time}}</span>
</div>
</t-select>
</div>
<div class="search-box-right">
<t-input v-model="params.keywords" :placeholder="lang.please_search_order" clearable
@keypress.enter.native="doUserOrderSearch" @clear="clearKey" class="search-keyword"></t-input>
<t-select :min-collapsed-num="1" style="width: 130px" :placeholder="lang.please_search_order_type" clearable
v-model="params.ticket_type_id" :keys="{ label: 'name', value: 'id' }" :options="orderTypeOptions">
</t-select>
<t-select :placeholder="lang.please_search_order_status" :min-collapsed-num="1" multiple clearable
v-model="params.status" style="width: 160px" :keys="{ label: 'name', value: 'id'}"
:options="order_status_options"></t-select>
<com-choose-user :pre-placeholder="lang.please_search_order_user" @changeuser="changeUser">
</com-choose-user>
<input type="password" class="com-empty-input">
<!-- <t-select :placeholder="lang.please_search_order_user" filterable clearable v-model="params.client_id" :options="clientOptions" :keys="{ label: 'username', value: 'id'}">></t-select> -->
<t-select :placeholder="lang.please_search_order_admin" filterable clearable v-model="params.admin_id"
:options="adminList" class="user-select" :keys="{ label: 'name', value: 'id'}"></t-select>
<t-button @click="doUserOrderSearch">{{lang.order_text1}}</t-button>
<t-button @click="doUserOrderSearch('all')" theme="primary" variant="outline">
{{lang.order_text77}}
</t-button>
</div>
</div>
<t-table class="list-table" :data="userOrderData" :columns="userOrderColumns" @row-click="rowClick" hover
:loading="userOrderTableloading" row-key="id" size="small">
<template #id="slotProps">
<span>#{{slotProps.row.ticket_num}}</span>
</template>
<template #title="slotProps">
<span
:class="{'order-name': $checkPermission('auth_user_ticket_list_ticket_detail') || $checkPermission('auth_user_ticket_detail')}"
@click="userOrderReply(slotProps.row)">
<span v-if="slotProps.row.downstream_delivery === 1">{{lang.order_text78}}</span>
<span v-if="slotProps.row.upstream_ticket_id > 0">{{lang.order_text79}}</span>
{{slotProps.row.title}}
</span>
</template>
<template #name="slotProps">
<span>{{slotProps.row.name ? slotProps.row.name : '--'}}</span>
</template>
<template #user="slotProps">
<span @click.stop="goclient_detail(slotProps.row)">
<span
:style="{background: slotProps.row.client_level ? slotProps.row.client_level : '', color: slotProps.row.client_level ? calcColor(slotProps.row.client_level) : ''}"
class="user-name aHover">
{{slotProps.row.username}}
</span>
<span v-if="slotProps.row.upstream_ticket_id > 0">({{lang.order_text80}})</span>
<span v-else>({{slotProps.row.admin_name || '--'}})</span>
</span>
</template>
<template #last_reply_time="slotProps">
{{ slotProps.row.last_reply_time == 0 ? '--' : formatDate(slotProps.row.last_reply_time)
}}
</template>
<template #status="slotProps">
<t-tag :style="{background:slotProps.row.color, color: calcColor(slotProps.row.color)}" variant="light">
{{slotProps.row.status}}
</t-tag>
</template>
<template #op="{row}">
<t-button :title="lang.turn_order" shape="circle" variant="text" @click.stop="internalOrderForward(row)"
v-permission="'auth_user_ticket_list_transfer_ticket'">
<t-icon name="enter" class="common-look" size="small" style="color: var(--td-brand-color)" />
</t-button>
<t-button :title="lang.order_ow_new_rder" v-if="showIdcsmartTicketInternal" shape="circle" variant="text"
@click.stop="goAddorder(row)" v-permission="'auth_plugin_addon_ticket_add'">
<t-icon name="file-add" class="common-look" size="small" style="color: var(--td-brand-color)" />
</t-button>
<t-button :title="lang.order_new_close" shape="circle" variant="text" @click.stop="isClose(row)"
v-permission="'auth_user_ticket_list_close_ticket'">
<t-icon name="close-circle" class="common-look" size="small" style="color: var(--td-brand-color)" />
</t-button>
</template>
</t-table>
<com-pagination v-if="total" :total="total" :page="params.page" :limit="params.limit" @page-change="changePage">
</com-pagination>
<opinion-button></opinion-button>
</t-card>
<!-- 转内部弹窗 -->
<t-dialog :header="lang.order_turn_inside" :footer="false" placement="center" width="600px"
:visible.sync="turnInsideDialogVisible" destroy-on-close>
<t-form :data="turnInsideFormData" :rules="turnInsideFormRules" ref="turnInsideForm" label-align="left"
:label-width="80" @submit="turnInsideFormSubmit">
<!-- 标题 -->
<t-form-item :label="lang.order_title" name="title">
<t-input v-model="turnInsideFormData.title" clearable></t-input>
</t-form-item>
<!-- 工单类型 -->
<t-form-item :label="lang.order_name" name="ticket_type_id">
<t-select v-model="turnInsideFormData.ticket_type_id" @change="orderTypeChange" clearable filterable
style="width: 100%">
<t-option v-for="(item, index) in orderTypeOptions" :value="item.id" :label="item.name" :key="index">
{{ item.name }}
</t-option>
</t-select>
</t-form-item>
<!-- 紧急程度 -->
<t-form-item :label="lang.order_priority" name="priority">
<t-select v-model="turnInsideFormData.priority" clearable filterable style="width: 100%">
<t-option v-for="(item, index) in priorityOptions" :value="item.id" :label="item.name" :key="index">
{{ item.name }}
</t-option>
</t-select>
</t-form-item>
<!-- 关联用户-->
<t-form-item :label="lang.order_client" name="client_id">
<t-select v-model="turnInsideFormData.client_id" @change="clientChange" clearable filterable
style="width: 100%">
<t-option v-for="(item, index) in clientOptions" :value="item.id" :label="item.username" :key="index">
{{ item.username }}
</t-option>
</t-select>
</t-form-item>
<!-- 关联产品 -->
<t-form-item :label="lang.order_hosts" name="host_ids">
<t-select v-model="turnInsideFormData.host_ids" @change="hostChange" clearable multiple style="width: 100%">
<t-option v-for="(item, index) in hostOptions" :value="item.id" :label="item.product_name" :key="index">
{{ item.product_name }}
</t-option>
</t-select>
</t-form-item>
<!-- 指定部门 -->
<t-form-item :label="lang.order_designated_department" name="admin_role_id">
<t-select v-model="turnInsideFormData.admin_role_id" @change="departmentChange" clearable filterable
style="width: 100%">
<t-option v-for="(item, index) in departmentOptions" :value="item.id" :label="item.name" :key="index">
{{ item.name }}
</t-option>
</t-select>
</t-form-item>
<!-- 指定人员 -->
<t-form-item :label="lang.order_designated_person" name="admin_id">
<t-select v-model="turnInsideFormData.admin_id" @change="adminChange" clearable filterable
style="width: 100%">
<t-option v-for="(item, index) in adminsOptions" :value="item.id" :label="item.name" :key="index">
{{ item.name }}
</t-option>
</t-select>
</t-form-item>
<!-- 问题描述 -->
<t-form-item :label="lang.order_content" name="content">
<t-textarea v-model="turnInsideFormData.content"></t-textarea>
</t-form-item>
<!-- 上传附件 -->
<t-form-item class="order-upload-wrapper" :label="lang.order_attachment" name="attachment">
<t-upload theme="custom" v-model="turnInsideFormData.attachment" :action="uploadUrl" :headers="uploadHeaders"
:format-response="uploadFormatResponse" show-upload-progress @progress="uploadProgress"
@success="uploadSuccess" multiple :max="0">
<t-button theme="default" class="upload-btn">
<t-icon name="upload" size="small" style="color: #999999"></t-icon>
<span>{{lang.attachment}}</span>
</t-button>
<span>{{uploadTip}}</span>
</t-upload>
<div class="list-custom">
<span v-for="(item, index) in turnInsideFormData.attachment" :key="index" style="margin: 10px">
{{ item.name }}
<t-icon name="close-circle-filled" @click="removeAttachment(item, index)"></t-icon>
</span>
</div>
</t-form-item>
<t-form-item class="turn-inside-dialog-footer">
<t-button theme="primary" type="submit" :loading="submitLoading">{{lang.hold}}</t-button>
<t-button theme="default" type="reset" @click="turnInsideDialogClose">
{{lang.cancel}}
</t-button>
</t-form-item>
</t-form>
</t-dialog>
<!-- 转发弹窗 -->
<t-dialog :header="lang.order_forward" :footer="false" :visible.sync="forwardDialogVisible" destroy-on-close>
<t-form :data="forwardFormData" :rules="forwardFormRules" ref="forwardForm" label-align="left" :label-width="80"
@submit="forwardFormSubmit" class="forwardForm">
<!-- 指定部门 -->
<!-- <t-form-item :label="lang.order_designated_department" name="admin_role_id">
<t-select v-model="forwardFormData.admin_role_id" @change="departmentChange" clearable filterable style="width:100%">
<t-option v-for="(item, index) in departmentOptions" :value="item.id" :label="item.name" :key="index">
{{ item.name }}
</t-option>
</t-select>
</t-form-item> -->
<!-- 工单部门 -->
<t-form-item :label="lang.order_designated_department" name="ticket_type_id">
<t-select clearable v-model="forwardFormData.ticket_type_id" :keys="{ label: 'name', value: 'id' }"
:options="orderTypeOptions" @change="changeType" :placeholder="lang.select"></t-select>
</t-form-item>
<!-- 指定人员 -->
<t-form-item :label="lang.order_designated_person" name="admin_id">
<t-select v-model="forwardFormData.admin_id" @change="adminChange" clearable filterable style="width: 100%"
:placeholder="lang.select">
<t-option v-for="(item, index) in adminsOptions" :value="item.id" :label="item.name" :key="index">
{{ item.name }}
</t-option>
</t-select>
</t-form-item>
<!-- 备注 -->
<t-form-item :label="lang.order_designated_reson" name="notes">
<t-textarea v-model="forwardFormData.notes"></t-textarea>
</t-form-item>
<t-form-item class="turn-inside-dialog-footer">
<t-button theme="primary" type="submit" :loading="submitLoading">{{lang.hold}}</t-button>
<t-button theme="default" type="reset" @click="forwardDialogClose">
{{lang.cancel}}
</t-button>
</t-form-item>
</t-form>
</t-dialog>
<!-- 关闭工单确认弹窗 -->
<t-dialog theme="danger" :header="lang.sure_close_job" :visible.sync="closeOrderVisible">
<template slot="footer">
<t-button theme="primary" @click="userOrderResolved(closeRow)" :loading="submitLoading">
{{lang.sure}}
</t-button>
<t-button theme="default" @click="closeDia">{{lang.cancel}}</t-button>
</template>
</t-dialog>
<audio id="audio_tip" muted src="/plugins/addon/idcsmart_ticket/template/admin/media/tip.wav"></audio>
</com-config>
</div>
<script src="/plugins/addon/idcsmart_ticket/template/admin/js/lang.js"></script>
<script src="/{$template_catalog}/template/{$themes}/components/comChooseUser/comChooseUser.js"></script>
<script src="/plugins/addon/idcsmart_ticket/template/admin/api/order.js"></script>
<script src="/plugins/addon/idcsmart_ticket/template/admin/js/index.js"></script>
<script src="/plugins/addon/idcsmart_ticket/template/admin/components/opinionButton.js"></script>