InspectOrderDetail.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <template>
  2. <ContentWrap v-loading="formLoading">
  3. <el-form
  4. ref="formRef"
  5. :model="formData"
  6. :rules="formRules"
  7. v-loading="formLoading"
  8. style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
  9. label-width="130px"
  10. >
  11. <div class="base-expandable-content">
  12. <el-row>
  13. <el-col :span="12">
  14. <el-form-item :label="t('main.planCode')" prop="planCode">
  15. <el-input v-model="formData.planCode" disabled />
  16. </el-form-item>
  17. </el-col>
  18. <el-col :span="12">
  19. <el-form-item :label="t('bomList.name')" prop="inspectOrderTitle">
  20. <el-input v-model="formData.inspectOrderTitle" disabled />
  21. </el-form-item>
  22. </el-col>
  23. <el-col :span="12">
  24. <el-form-item :label="t('bomList.code')" prop="inspectOrderCode">
  25. <el-input v-model="formData.inspectOrderCode" disabled />
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="12">
  29. <el-form-item :label="t('iotMaintain.PersonInCharge')" prop="chargeName">
  30. <el-select v-model="formData.chargeName" style="width: 100%" disabled />
  31. <el-option
  32. v-for="item in deptUsers"
  33. :key="item.id"
  34. :label="item.nickname"
  35. :value="item.id"
  36. />
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="24">
  40. <el-form-item :label="t('iotMaintain.remark')" prop="remark">
  41. <el-input type="textarea" v-model="formData.remark" disabled />
  42. </el-form-item>
  43. </el-col>
  44. </el-row>
  45. </div>
  46. </el-form>
  47. </ContentWrap>
  48. <ContentWrap>
  49. <!-- 列表 -->
  50. <ContentWrap>
  51. <ContentWrap>
  52. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  53. <el-table-column :label="t('iotMaintain.deviceCode')" align="center" prop="deviceCode" />
  54. <el-table-column :label="t('iotMaintain.deviceName')" align="center" prop="deviceName" />
  55. <!-- <el-table-column label="路线名称" align="center" prop="routeName" />-->
  56. <el-table-column :label="t('iotMaintain.operation')" align="center" min-width="120px">
  57. <template #default="scope">
  58. <div style="display: flex; justify-content: center; align-items: center; width: 100%">
  59. <div style="margin-right: 10px">
  60. <Icon style="vertical-align: middle; color: #c36e5b" icon="ep:view" />
  61. <el-button
  62. style="vertical-align: middle"
  63. link
  64. type="warning"
  65. @click="viewRoute(scope.row.orderDetails)"
  66. >
  67. {{ t('route.InspectionRoute') }}
  68. </el-button>
  69. </div>
  70. </div>
  71. </template>
  72. </el-table-column>
  73. </el-table>
  74. </ContentWrap>
  75. </ContentWrap>
  76. </ContentWrap>
  77. <ContentWrap>
  78. <el-form>
  79. <el-form-item style="float: right">
  80. <el-button @click="close">{{t('common.cancel')}}</el-button>
  81. </el-form-item>
  82. </el-form>
  83. </ContentWrap>
  84. <RouteInspectItemDrawer
  85. ref="showDrawer"
  86. :model-value="drawerVisible"
  87. @update:model-value="(val) => (drawerVisible = val)"
  88. />
  89. </template>
  90. <script setup lang="ts">
  91. import * as UserApi from '@/api/system/user'
  92. import { ref } from 'vue'
  93. import { useTagsViewStore } from '@/store/modules/tagsView'
  94. import { useCache } from '@/hooks/web/useCache'
  95. import RouteInspectItemDrawer from '@/views/pms/inspect/plan/RouteInspectItemDrawer.vue'
  96. import { IotInspectOrderApi, IotInspectOrderVO } from '@/api/pms/inspect/order'
  97. /** 维修工单 表单 */
  98. defineOptions({ name: 'IotMaintainAe' })
  99. const { t } = useI18n() // 国际化
  100. const message = useMessage() // 消息弹窗
  101. const { delView } = useTagsViewStore() // 视图操作
  102. const { currentRoute, push } = useRouter()
  103. const dialogTitle = ref('') // 弹窗的标题
  104. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  105. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  106. const drawerVisible = ref<boolean>(false)
  107. const showDrawer = ref()
  108. const list = ref<IotInspectOrderVO[]>([]) // 列表的数据
  109. const { params, name } = useRoute() // 查询参数
  110. const id = params.id
  111. const deptUsers = ref<UserApi.UserVO[]>([]) // 用户列表
  112. const formData = ref({
  113. planCode: undefined,
  114. id: undefined,
  115. inspectOrderTitle: undefined,
  116. inspectOrderCode: undefined,
  117. status: undefined,
  118. remark: undefined,
  119. deptId: undefined,
  120. deviceIds: undefined
  121. })
  122. const formRules = reactive({
  123. planTitle: [{ required: true, message: '巡检计划标题不能为空', trigger: 'blur' }],
  124. planCode: [{ required: true, message: '巡检计划编号不能为空', trigger: 'blur' }],
  125. planUnit: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
  126. charges: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
  127. })
  128. // 拖动状态管理
  129. const items = ref([])
  130. const deviceChoose = (rows) => {
  131. list.value = rows
  132. }
  133. const viewRoute = (itemJson) => {
  134. drawerVisible.value = true
  135. showDrawer.value.openDrawer(itemJson)
  136. }
  137. const formRef = ref() // 表单 Ref
  138. const inspectItemChoose = (rows) => {
  139. items.value = []
  140. items.value = rows
  141. }
  142. const deviceFormRef = ref()
  143. const openForm = () => {
  144. deviceFormRef.value.open()
  145. }
  146. const close = () => {
  147. delView(unref(currentRoute))
  148. push({ name: 'IotInspectOrder', params: {} })
  149. }
  150. const { wsCache } = useCache()
  151. /** 提交表单 */
  152. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  153. /** 重置表单 */
  154. onMounted(async () => {
  155. if (id) {
  156. formType.value = 'update'
  157. const iotInspectOrder = await IotInspectOrderApi.getIotInspectOrder(id)
  158. formData.value = iotInspectOrder
  159. list.value = iotInspectOrder.details
  160. } else {
  161. formType.value = 'create'
  162. }
  163. })
  164. const handleDelete = async (id: number) => {
  165. try {
  166. const index = list.value.findIndex((item) => item.code === id)
  167. if (index !== -1) {
  168. // 通过 splice 删除元素
  169. list.value.splice(index, 1)
  170. }
  171. } catch {}
  172. }
  173. </script>
  174. <style scoped>
  175. .base-expandable-content {
  176. overflow: hidden; /* 隐藏溢出的内容 */
  177. transition: max-height 0.3s ease; /* 平滑过渡效果 */
  178. }
  179. /* 横向布局容器 */
  180. </style>