|
|
@@ -29,12 +29,52 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="维保中心" prop="gxtCenter" label-position="top">
|
|
|
- <el-input
|
|
|
+ <el-select
|
|
|
v-model="queryParams.gxtCenter"
|
|
|
- placeholder="请输入维保中心"
|
|
|
+ placeholder="请选择维保中心"
|
|
|
clearable
|
|
|
- @keyup.enter="handleQuery"
|
|
|
- />
|
|
|
+ @change="handleMaintenanceCenterChange"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in maintenanceCenterOptions"
|
|
|
+ :key="item.deptId"
|
|
|
+ :label="item.deptName"
|
|
|
+ :value="item.deptName">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+<!-- <el-form-item label="维保中心" prop="gxtCenter" label-position="top">-->
|
|
|
+<!-- <el-input-->
|
|
|
+<!-- v-model="queryParams.gxtCenter"-->
|
|
|
+<!-- placeholder="请输入维保中心"-->
|
|
|
+<!-- clearable-->
|
|
|
+<!-- @keyup.enter="handleQuery"-->
|
|
|
+<!-- />-->
|
|
|
+<!-- </el-form-item>-->
|
|
|
+ <el-form-item label="场站" prop="pcsStationName" label-position="top">
|
|
|
+ <el-select
|
|
|
+ v-model="queryParams.pcsStationName"
|
|
|
+ placeholder="请选择场站"
|
|
|
+ clearable
|
|
|
+ :disabled="!queryParams.gxtCenter"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in stationOptions"
|
|
|
+ :key="item.deptId"
|
|
|
+ :label="item.deptName"
|
|
|
+ :value="item.deptName">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="工单状态" prop="workOrderStatus" label-position="top">
|
|
|
+ <el-select v-model="queryParams.workOrderStatus" placeholder="请选择工单状态" clearable>
|
|
|
+ <el-option
|
|
|
+ v-for="dict in gxt_work_order_status"
|
|
|
+ :key="dict.value"
|
|
|
+ :label="dict.label"
|
|
|
+ :value="dict.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<div style="float: right;">
|
|
|
@@ -65,9 +105,17 @@
|
|
|
<el-button
|
|
|
type="info"
|
|
|
icon="Upload"
|
|
|
- @click="handleImport"
|
|
|
+ @click="handleImport('order')"
|
|
|
v-hasPermi="['gxt:maintenance:order:import']"
|
|
|
- >导入</el-button>
|
|
|
+ >工单导入</el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="info"
|
|
|
+ icon="Upload"
|
|
|
+ @click="handleImport('person')"
|
|
|
+ v-hasPermi="['gxt:maintenance:order:import']"
|
|
|
+ >工单人员导入</el-button>
|
|
|
</el-col>
|
|
|
<!-- <el-col :span="1.5">-->
|
|
|
<!-- <el-button-->
|
|
|
@@ -1143,6 +1191,26 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
+ <!-- 工单人员导入对话框 -->
|
|
|
+ <el-dialog :title="personUpload.title" v-model="personUpload.open" width="400px" append-to-body>
|
|
|
+ <el-upload ref="personUploadRef" :limit="1" accept=".xlsx, .xls" :headers="personUpload.headers" :action="personUpload.url" :disabled="personUpload.isUploading" :on-progress="handlePersonFileUploadProgress" :on-success="handlePersonFileSuccess" :on-change="handlePersonFileChange" :on-remove="handlePersonFileRemove" :auto-upload="false" drag>
|
|
|
+ <el-icon class="el-icon--upload"><upload-filled /></el-icon>
|
|
|
+ <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
|
|
+ <template #tip>
|
|
|
+ <div class="el-upload__tip text-center">
|
|
|
+ <span>仅允许导入xls、xlsx格式文件。</span>
|
|
|
+ <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importPersonTemplate">下载模板</el-link>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-upload>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="submitPersonFileForm">确 定</el-button>
|
|
|
+ <el-button @click="personUpload.open = false">取 消</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -1171,11 +1239,14 @@ import {
|
|
|
approveWorkOrder,
|
|
|
uploadAttachments,
|
|
|
importGxtOrder,
|
|
|
+ importGxtWorkOrderPerson,
|
|
|
+ importGxtWorkOrderPersonFromExcel,
|
|
|
// importTemplate
|
|
|
} from "@/api/gxt/gxtOrder"
|
|
|
import { listUser } from "@/api/system/user"
|
|
|
import {getToken} from "@/utils/auth.js";
|
|
|
import {getRepairOrder} from "@/api/gxt/repairOrder.js";
|
|
|
+import {listMaintenanceCenters, listStationsByMaintenanceCenter} from "@/api/gxt/equipment.js";
|
|
|
|
|
|
const { proxy } = getCurrentInstance()
|
|
|
const {
|
|
|
@@ -1216,6 +1287,9 @@ const restartDialogVisible = ref(false)
|
|
|
const userList = ref([])
|
|
|
const flowList = ref([])
|
|
|
const detailData = ref({})
|
|
|
+// 维保中心和场站选项
|
|
|
+const maintenanceCenterOptions = ref([])
|
|
|
+const stationOptions = ref([])
|
|
|
// 在 data 部分添加
|
|
|
const fileUploadRef = ref(null)
|
|
|
|
|
|
@@ -1234,6 +1308,21 @@ const upload = reactive({
|
|
|
url: import.meta.env.VITE_APP_BASE_API + "/gxt/order/importData"
|
|
|
})
|
|
|
|
|
|
+const personUpload = reactive({
|
|
|
+ // 是否显示弹出层(人员导入)
|
|
|
+ open: false,
|
|
|
+ // 弹出层标题(人员导入)
|
|
|
+ title: "",
|
|
|
+ // 是否禁用上传
|
|
|
+ isUploading: false,
|
|
|
+ // 选中的文件
|
|
|
+ selectedFile: null,
|
|
|
+ // 设置上传的请求头部
|
|
|
+ headers: { Authorization: "Bearer " + getToken() },
|
|
|
+ // 上传的地址
|
|
|
+ url: import.meta.env.VITE_APP_BASE_API + "/gxt/workOrderPerson/importData"
|
|
|
+})
|
|
|
+
|
|
|
const data = reactive({
|
|
|
form: {},
|
|
|
queryParams: {
|
|
|
@@ -1423,6 +1512,32 @@ const data = reactive({
|
|
|
const { queryParams, form, rules, assignForm, assignRules, suspendForm, suspendRules, pauseForm, pauseRules, startForm,
|
|
|
resumeForm, completeForm, finishForm, rateForm, rateRules, approveForm, approveRules, acceptForm, acceptRules, finishRules, restartForm, restartRules } = toRefs(data)
|
|
|
|
|
|
+onMounted(() => {
|
|
|
+ getList()
|
|
|
+ getMaintenanceCenterAndStationList()
|
|
|
+ // getGetMisDataConfig() // 获取配置参数
|
|
|
+ window.addEventListener('resize', handleResize)
|
|
|
+})
|
|
|
+
|
|
|
+function getMaintenanceCenterAndStationList() {
|
|
|
+ listMaintenanceCenters().then(response => {
|
|
|
+ maintenanceCenterOptions.value = response.data.map(item => {
|
|
|
+ return { deptName: item, deptId: item };
|
|
|
+ });
|
|
|
+
|
|
|
+ // 如果已选择维保中心,则筛选出该维保中心下的场站
|
|
|
+ if (queryParams.value.maintenanceCenter) {
|
|
|
+ listStationsByMaintenanceCenter(queryParams.value.maintenanceCenter).then(res => {
|
|
|
+ stationOptions.value = res.data.map(item => {
|
|
|
+ return { deptName: item, deptId: item };
|
|
|
+ });
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 如果未选择维保中心,则清空场站选项
|
|
|
+ stationOptions.value = [];
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
/** 查询维保工单列表 */
|
|
|
function getList() {
|
|
|
loading.value = true
|
|
|
@@ -1905,50 +2020,6 @@ function submitPause() {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-/** 流转记录 */
|
|
|
-function handleFlow(row) {
|
|
|
- getWorkOrderFlow(row.id).then(response => {
|
|
|
- flowList.value = response.data
|
|
|
- flowDialogVisible.value = true
|
|
|
- })
|
|
|
-}
|
|
|
-
|
|
|
-/** 处理文件选择 */
|
|
|
-function handleFileSelect(files) {
|
|
|
- // const files = event.target.files
|
|
|
- debugger
|
|
|
- if (files && files.length > 0) {
|
|
|
- for (let i = 0; i < files.length; i++) {
|
|
|
- finishForm.value.attachments.push({
|
|
|
- fileName: files[i].name,
|
|
|
- filePath: files[i].url,
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
- // 清空 input 以便重新上传相同文件
|
|
|
- // event.target.value = ''
|
|
|
-}
|
|
|
-
|
|
|
-/** 获取文件类型图标 */
|
|
|
-function getFileIconClass(fileName) {
|
|
|
- if (!fileName) return 'fa-file-o'
|
|
|
- const extension = fileName.split('.').pop().toLowerCase()
|
|
|
- const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']
|
|
|
- const videoExtensions = ['mp4', 'avi', 'mov', 'mkv', 'flv', 'wmv']
|
|
|
-
|
|
|
- if (imageExtensions.includes(extension)) {
|
|
|
- return 'fa-file-image-o'
|
|
|
- } else if (videoExtensions.includes(extension)) {
|
|
|
- return 'fa-file-video-o'
|
|
|
- }
|
|
|
- return 'fa-file-o'
|
|
|
-}
|
|
|
-
|
|
|
-/** 删除文件 */
|
|
|
-function removeFile(index) {
|
|
|
- finishForm.value.attachments.splice(index, 1)
|
|
|
-}
|
|
|
-
|
|
|
/** 审批挂起申请 */
|
|
|
function handleApprove(row) {
|
|
|
getGxtOrder(row.id).then(response => {
|
|
|
@@ -2040,10 +2111,16 @@ const handleFileUploadProgress = (event, file, fileList) => {
|
|
|
}
|
|
|
|
|
|
/** 片段导入按點操作 */
|
|
|
-function handleImport() {
|
|
|
- upload.title = "工单导入"
|
|
|
- upload.open = true
|
|
|
- upload.selectedFile = null
|
|
|
+function handleImport(type) {
|
|
|
+ if (type === 'person') {
|
|
|
+ personUpload.title = "人员导入"
|
|
|
+ personUpload.open = true
|
|
|
+ personUpload.selectedFile = null
|
|
|
+ } else {
|
|
|
+ upload.title = "工单导入"
|
|
|
+ upload.open = true
|
|
|
+ upload.selectedFile = null
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/** 清理模板操作 */
|
|
|
@@ -2052,6 +2129,12 @@ function importTemplate() {
|
|
|
}, `gxtOrder_template_${new Date().getTime()}.xlsx`)
|
|
|
}
|
|
|
|
|
|
+/** 清理模板操作 */
|
|
|
+function importPersonTemplate() {
|
|
|
+ proxy.download("gxt/workOrderPerson/importTemplate", {
|
|
|
+ }, `gxtOrderPerson_template_${new Date().getTime()}.xlsx`)
|
|
|
+}
|
|
|
+
|
|
|
/**文件上传中处理 */
|
|
|
const handleFileChange = (file, fileList) => {
|
|
|
upload.selectedFile = file
|
|
|
@@ -2081,6 +2164,40 @@ function submitFileForm() {
|
|
|
proxy.$refs["uploadRef"].submit()
|
|
|
}
|
|
|
|
|
|
+/** 人员文件上传中处理 */
|
|
|
+const handlePersonFileUploadProgress = (event, file, fileList) => {
|
|
|
+ personUpload.isUploading = true
|
|
|
+}
|
|
|
+
|
|
|
+/** 人员文件选择处理 */
|
|
|
+const handlePersonFileChange = (file, fileList) => {
|
|
|
+ personUpload.selectedFile = file
|
|
|
+}
|
|
|
+
|
|
|
+/** 人员文件删除处理 */
|
|
|
+const handlePersonFileRemove = (file, fileList) => {
|
|
|
+ personUpload.selectedFile = null
|
|
|
+}
|
|
|
+
|
|
|
+/** 人员文件上传成功处理 */
|
|
|
+const handlePersonFileSuccess = (response, file, fileList) => {
|
|
|
+ personUpload.open = false
|
|
|
+ personUpload.isUploading = false
|
|
|
+ proxy.$refs["personUploadRef"].handleRemove(file)
|
|
|
+ proxy.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true })
|
|
|
+ getList()
|
|
|
+}
|
|
|
+
|
|
|
+/** 提交人员文件 */
|
|
|
+function submitPersonFileForm() {
|
|
|
+ const file = personUpload.selectedFile
|
|
|
+ if (!file || file.length === 0 || !file.name.toLowerCase().endsWith('.xls') && !file.name.toLowerCase().endsWith('.xlsx')) {
|
|
|
+ proxy.$modal.msgError("请选择后缀为 \"xls\"或\"xlsx\"的文件。")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ proxy.$refs["personUploadRef"].submit()
|
|
|
+}
|
|
|
+
|
|
|
/** 导出按點操作 */
|
|
|
function handleExport() {
|
|
|
proxy.download('gxt/order/export', {
|
|
|
@@ -2088,6 +2205,28 @@ function handleExport() {
|
|
|
}, `gxtOrder_${new Date().getTime()}.xlsx`)
|
|
|
}
|
|
|
|
|
|
+function handleMaintenanceCenterChange(selectedCenter) {
|
|
|
+ // 清空场站选择
|
|
|
+ queryParams.value.station = null;
|
|
|
+
|
|
|
+ // 如果选择了维保中心,则加载对应的场站
|
|
|
+ if (selectedCenter) {
|
|
|
+ listStationsByMaintenanceCenter(selectedCenter).then(response => {
|
|
|
+ stationOptions.value = response.data.map(item => {
|
|
|
+ return { deptName: item, deptId: item };
|
|
|
+ });
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 如果未选择维保中心,则清空场站选项
|
|
|
+ stationOptions.value = [];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 监听窗口大小变化
|
|
|
+function handleResize() {
|
|
|
+ tableHeight.value = window.innerHeight - 300
|
|
|
+}
|
|
|
+
|
|
|
getList()
|
|
|
</script>
|
|
|
<style scoped>
|