Showing
17 changed files
with
667 additions
and
163 deletions
src/api/equipment/category.ts
0 → 100644
| 1 | +import { defHttp } from '/@/utils/http/axios'; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 列表 | |
| 5 | + */ | |
| 6 | +export const getAllCategory = (params?: { name?: string }) => { | |
| 7 | + return defHttp.post<any>({ | |
| 8 | + url: `/deviceCagegory/getAllCagegory`, | |
| 9 | + params, | |
| 10 | + }); | |
| 11 | +}; | |
| 12 | + | |
| 13 | +/** | |
| 14 | + * 新增 | |
| 15 | + */ | |
| 16 | +export const saveCategory = (params) => { | |
| 17 | + return defHttp.post<any>({ | |
| 18 | + url: `/deviceCagegory/save`, | |
| 19 | + params, | |
| 20 | + }); | |
| 21 | +}; | |
| 22 | + | |
| 23 | +/** | |
| 24 | + * 删除 | |
| 25 | + */ | |
| 26 | +export const deleteCategory = (params) => { | |
| 27 | + return defHttp.get<any>({ | |
| 28 | + url: `/deviceCagegory/delete`, | |
| 29 | + params, | |
| 30 | + }); | |
| 31 | +}; | ... | ... |
src/api/repair/history.ts
0 → 100644
| 1 | +import { defHttp } from '/@/utils/http/axios'; | |
| 2 | +import { omit } from 'lodash-es'; | |
| 3 | + | |
| 4 | +/** | |
| 5 | + * 获取列表 | |
| 6 | + */ | |
| 7 | +export const getRepairHistoryList = (params) => { | |
| 8 | + const { page, pageSize } = params; | |
| 9 | + const otherParams = omit(params, ['page', 'pageSize']); | |
| 10 | + return defHttp.post<any>({ | |
| 11 | + url: `/repairRecord/pageData?page=${page}&pageSize=${pageSize}`, | |
| 12 | + params: otherParams, | |
| 13 | + }); | |
| 14 | +}; | ... | ... |
src/api/repair/order.ts
0 → 100644
| 1 | +import { defHttp } from '/@/utils/http/axios'; | |
| 2 | +import { omit } from 'lodash-es'; | |
| 3 | + | |
| 4 | +/** | |
| 5 | + * 获取列表 | |
| 6 | + */ | |
| 7 | +export const getRepairOrderList = (params) => { | |
| 8 | + const { page, pageSize } = params; | |
| 9 | + const otherParams = omit(params, ['page', 'pageSize']); | |
| 10 | + return defHttp.post<any>({ | |
| 11 | + url: `/repairOrder/pageData?page=${page}&pageSize=${pageSize}`, | |
| 12 | + params: otherParams, | |
| 13 | + }); | |
| 14 | +}; | ... | ... |
src/locales/lang/zh-CN/repair/history.ts
0 → 100644
| 1 | +export default { | |
| 2 | + listText: '维修记录', | |
| 3 | + orderText: '维修工单', | |
| 4 | + orderCode: '记录编号', | |
| 5 | + deviceNameText: '维修设备', | |
| 6 | + time: '报修时间', | |
| 7 | + reportByName: '报修人员', | |
| 8 | + photo: '故障情况照片', | |
| 9 | + description: '故障描述', | |
| 10 | + repairTime: '维修时间', | |
| 11 | + repairByName: '维修人员', | |
| 12 | + repairReason: '故障原因', | |
| 13 | + repairDescription: '维修情况说明', | |
| 14 | +}; | ... | ... |
src/locales/lang/zh-CN/repair/order.ts
0 → 100644
| 1 | +export default { | |
| 2 | + listText: '工单列表', | |
| 3 | + nameText: '方案名称', | |
| 4 | + time: '报修时间', | |
| 5 | + nameDetail: '方案明细', | |
| 6 | + deviceNameText: '设备', | |
| 7 | + reportDateText: '报修时间', | |
| 8 | + reportByName: '报修人员', | |
| 9 | + description: '故障描述', | |
| 10 | + nameCode: '维修单编号', | |
| 11 | + typeText: '方案类型', | |
| 12 | + inspectionText: '巡检方案', | |
| 13 | + maintenanceText: '保养方案', | |
| 14 | + SCHEDULING: '排期中', | |
| 15 | + REPAIRFINISH: '维修完成', | |
| 16 | + ACCEPTANCEPASSED: '验收通过', | |
| 17 | + planDetails: '方案明细', | |
| 18 | + statusText: '状态', | |
| 19 | + emergencyText: '是否紧急', | |
| 20 | + enableText: '启用', | |
| 21 | + disabledText: '停用', | |
| 22 | + createCategoryText: '创建工单', | |
| 23 | + editCategoryText: '编辑方案', | |
| 24 | + detailText: '查看详情', | |
| 25 | +}; | ... | ... |
| ... | ... | @@ -16,94 +16,60 @@ |
| 16 | 16 | </div> |
| 17 | 17 | </template> |
| 18 | 18 | <script setup lang="ts"> |
| 19 | -import {BasicModal, useModalInner} from "/@/components/Modal"; | |
| 20 | -import {BasicForm, useForm} from "/@/components/Form"; | |
| 21 | -import {computed, ref, unref} from "vue"; | |
| 22 | -import {useI18n} from "/@/hooks/web/useI18n"; | |
| 23 | -import {schemas} from "/@/views/equipment/category/index"; | |
| 24 | -import {ipRegex} from "/@/utils/rules"; | |
| 25 | -import {deleteFormField} from "/@/views/device/deviceaccess/index"; | |
| 26 | -import { | |
| 27 | - deviceProfileAccessInformation, | |
| 28 | - updateDeviceProfileAccessInformation | |
| 29 | -} from "/@/api/device/deviceAccess"; | |
| 30 | -import {useMessage} from "/@/hooks/web/useMessage"; | |
| 31 | -const isUpdate = ref<Boolean>(false); | |
| 32 | -const { t } = useI18n(); | |
| 33 | -const emit = defineEmits(['handleReload', 'register']); | |
| 34 | -const { createMessage } = useMessage(); | |
| 19 | + import { BasicModal, useModalInner } from '/@/components/Modal'; | |
| 20 | + import { BasicForm, useForm } from '/@/components/Form'; | |
| 21 | + import { computed, ref, unref } from 'vue'; | |
| 22 | + import { useI18n } from '/@/hooks/web/useI18n'; | |
| 23 | + import { schemas } from '/@/views/equipment/category/index'; | |
| 35 | 24 | |
| 36 | -const [registerForm, { getFieldsValue, setFieldsValue, validate, resetFields }] = useForm({ | |
| 37 | - labelWidth: 150, | |
| 38 | - schemas, | |
| 39 | - actionColOptions: { | |
| 40 | - span: 14, | |
| 41 | - }, | |
| 42 | - showActionButtonGroup: false, | |
| 43 | -}); | |
| 25 | + import { useMessage } from '/@/hooks/web/useMessage'; | |
| 26 | + import { saveCategory } from '/@/api/equipment/category'; | |
| 27 | + const isUpdate = ref<Boolean>(false); | |
| 28 | + const parentId = ref<string>(''); | |
| 29 | + const { t } = useI18n(); | |
| 30 | + const emit = defineEmits(['handleReload', 'register']); | |
| 31 | + const { createMessage } = useMessage(); | |
| 44 | 32 | |
| 45 | -const recordInfo = ref<Recordable>({}); | |
| 46 | - | |
| 47 | -const [register, { closeModal, setModalProps }] = useModalInner(async (data) => { | |
| 48 | - await resetFields(); | |
| 49 | - setModalProps({ confirmLoading: false, loading: true }); | |
| 50 | - isUpdate.value = data?.isUpdate; | |
| 51 | - recordInfo.value = data?.record; | |
| 52 | - if (data?.record) { | |
| 53 | - const intranetIpAndPort = { | |
| 54 | - inputIp: data?.record.intranetIp, | |
| 55 | - inputPort: data?.record.intranetPort, | |
| 56 | - }; | |
| 57 | - const outerIpAndPort = { | |
| 58 | - inputIp: data?.record.outerNetIp, | |
| 59 | - inputPort: data?.record.outerNetPort, | |
| 60 | - }; | |
| 61 | - setFieldsValue(data?.record); | |
| 62 | - setFieldsValue({ ...data?.record?.sipExtend }); | |
| 63 | - setFieldsValue({ intranetIpAndPort, outerIpAndPort }); | |
| 64 | - } | |
| 65 | - setModalProps({ loading: false }); | |
| 66 | -}); | |
| 33 | + const [registerForm, { getFieldsValue, setFieldsValue, validate, resetFields }] = useForm({ | |
| 34 | + labelWidth: 150, | |
| 35 | + schemas, | |
| 36 | + actionColOptions: { | |
| 37 | + span: 14, | |
| 38 | + }, | |
| 39 | + showActionButtonGroup: false, | |
| 40 | + }); | |
| 67 | 41 | |
| 68 | -const getTitle = computed(() => | |
| 69 | - !unref(isUpdate) | |
| 70 | - ? t('equipment.category.createCategoryText') | |
| 71 | - : t('equipment.category.editCategoryText') | |
| 72 | -); | |
| 42 | + const recordInfo = ref<Recordable>({}); | |
| 43 | + const [register, { closeModal, setModalProps }] = useModalInner(async (data) => { | |
| 44 | + setModalProps({ confirmLoading: false, loading: true }); | |
| 45 | + isUpdate.value = data?.isUpdate; | |
| 46 | + parentId.value = data?.parentId; | |
| 47 | + recordInfo.value = data?.record; | |
| 48 | + if (data?.record) { | |
| 49 | + setFieldsValue(data?.record); | |
| 50 | + } | |
| 51 | + setModalProps({ loading: false }); | |
| 52 | + }); | |
| 73 | 53 | |
| 74 | -const handleCancel = () => closeModal(); | |
| 54 | + const getTitle = computed(() => | |
| 55 | + !unref(isUpdate) | |
| 56 | + ? t('equipment.category.createCategoryText') | |
| 57 | + : t('equipment.category.editCategoryText') | |
| 58 | + ); | |
| 75 | 59 | |
| 76 | -const handleOk = async () => { | |
| 77 | - await validate(); | |
| 78 | - let values = getFieldsValue(); | |
| 79 | - const { intranetIpAndPort, outerIpAndPort } = values; | |
| 80 | - // values.intranetIp = intranetIpAndPort.inputIp; | |
| 81 | - // values.intranetPort = intranetIpAndPort.inputPort; | |
| 82 | - // values.outerNetIp = outerIpAndPort.inputIp; | |
| 83 | - // values.outerNetPort = outerIpAndPort.inputPort; | |
| 84 | - // if (!ipRegex.test(values.intranetIp)) { | |
| 85 | - // return createMessage.error(t('deviceManagement.deviceAccess.ipRuleText')); | |
| 86 | - // } | |
| 60 | + const handleCancel = () => closeModal(); | |
| 87 | 61 | |
| 88 | - const sipExtend = { | |
| 89 | - serverId: values['serverId'], | |
| 90 | - serverDomain: values['serverDomain'], | |
| 91 | - serverPassword: values['serverPassword'], | |
| 62 | + const handleOk = async () => { | |
| 63 | + await validate(); | |
| 64 | + let values = getFieldsValue(); | |
| 65 | + if (unref(isUpdate)) { | |
| 66 | + values = { ...values, id: unref(recordInfo).id, parentId: unref(recordInfo).parentId }; | |
| 67 | + } else { | |
| 68 | + values = { ...values, parentId: unref(parentId) }; | |
| 69 | + } | |
| 70 | + await saveCategory(values); | |
| 71 | + createMessage.success(t('common.operationSuccessText')); | |
| 72 | + emit('handleReload'); | |
| 73 | + handleCancel(); | |
| 92 | 74 | }; |
| 93 | - values.sipExtend = sipExtend; | |
| 94 | - deleteFormField.forEach((deleteItem) => { | |
| 95 | - Reflect.deleteProperty(values, deleteItem); | |
| 96 | - }); | |
| 97 | - if (unref(isUpdate)) { | |
| 98 | - // 更新 | |
| 99 | - values = { ...values, id: unref(recordInfo).id }; | |
| 100 | - // await updateDeviceProfileAccessInformation(values); | |
| 101 | - } else { | |
| 102 | - // await deviceProfileAccessInformation(values); | |
| 103 | - } | |
| 104 | - createMessage.success(t('equipment.category.operationSuccessText')); | |
| 105 | - emit('handleReload'); | |
| 106 | - handleCancel(); | |
| 107 | -}; | |
| 108 | - | |
| 109 | 75 | </script> | ... | ... |
| ... | ... | @@ -27,16 +27,18 @@ |
| 27 | 27 | .but_operation { |
| 28 | 28 | display: none; // 默认隐藏按钮 |
| 29 | 29 | } |
| 30 | - | |
| 31 | - | |
| 32 | 30 | } |
| 33 | 31 | .tree-node:hover { |
| 34 | 32 | &:hover .but_operation { |
| 35 | 33 | display: inline-block; // 悬停时显示按钮 |
| 36 | - .but_type { | |
| 37 | - margin-left: 32px; | |
| 38 | - color: red; | |
| 39 | - } | |
| 34 | + .but_type { | |
| 35 | + margin-left: 32px; | |
| 36 | + color: red; | |
| 37 | + font-size: 14px; | |
| 38 | + } | |
| 40 | 39 | } |
| 41 | 40 | } |
| 41 | + .ant-tree { | |
| 42 | + font-size: 15px; | |
| 43 | + } | |
| 42 | 44 | } | ... | ... |
| 1 | - | |
| 2 | 1 | import { useI18n } from '/@/hooks/web/useI18n'; |
| 3 | 2 | |
| 4 | 3 | const { t } = useI18n(); |
| ... | ... | @@ -7,25 +6,17 @@ import { FormSchema } from '/@/components/Table'; |
| 7 | 6 | //表单字段 |
| 8 | 7 | export const schemas: FormSchema[] = [ |
| 9 | 8 | { |
| 10 | - field: 'intranetIpAndPort', | |
| 11 | - label: t('deviceManagement.deviceAccess.intranetIPWithPortText'), | |
| 12 | - component: 'FormInputGroup', | |
| 9 | + field: 'name', | |
| 10 | + label: t('equipment.category.categoryNameText'), | |
| 11 | + component: 'Input', | |
| 13 | 12 | required: true, |
| 14 | - componentProps: { | |
| 15 | - inputPlaceholder: t('deviceManagement.deviceAccess.intranetIPPlaceholderText'), | |
| 16 | - inputNumberPlaceholder: t('deviceManagement.deviceAccess.intranetPortPlaceholderText'), | |
| 17 | - }, | |
| 18 | - colProps: { span: 24 }, | |
| 13 | + colProps: { span: 18 }, | |
| 19 | 14 | }, |
| 20 | 15 | { |
| 21 | - field: 'outerIpAndPort', | |
| 22 | - label: t('deviceManagement.deviceAccess.outernetIPWithPortText'), | |
| 23 | - component: 'FormInputGroup', | |
| 16 | + field: 'cagegoryOrder', | |
| 17 | + label: t('equipment.category.orderText'), | |
| 18 | + component: 'Input', | |
| 24 | 19 | required: true, |
| 25 | - componentProps: { | |
| 26 | - inputPlaceholder: t('deviceManagement.deviceAccess.outernetIPPlaceholderText'), | |
| 27 | - inputNumberPlaceholder: t('deviceManagement.deviceAccess.outernetPortPlaceholderText'), | |
| 28 | - }, | |
| 29 | - colProps: { span: 24 }, | |
| 30 | - } | |
| 20 | + colProps: { span: 18 }, | |
| 21 | + }, | |
| 31 | 22 | ]; | ... | ... |
| 1 | 1 | <template> |
| 2 | - | |
| 3 | 2 | <PageWrapper dense contentFullHeight contentClass="flex"> |
| 4 | 3 | <div class="category-tree"> |
| 5 | 4 | <div class="category-tree-search"> |
| ... | ... | @@ -7,77 +6,120 @@ |
| 7 | 6 | placeholder="请输入关键字搜索" |
| 8 | 7 | enter-button |
| 9 | 8 | size="large" |
| 9 | + v-model:value="searchKeyword" | |
| 10 | + @search="handleSearch" | |
| 10 | 11 | /> |
| 11 | 12 | </div> |
| 12 | - <a-tree :tree-data="treeData" default-expand-all show-icon :default-selected-keys="['0-0']"> | |
| 13 | - <template #custom="{ title }"> | |
| 13 | + <a-tree v-if="treeData.length > 0" :tree-data="treeData" default-expand-all show-icon> | |
| 14 | + <template #custom="{ title, id, record }"> | |
| 14 | 15 | <div class="tree-node"> |
| 15 | 16 | <span>{{ title }}</span> |
| 16 | 17 | <div class="but_operation"> |
| 17 | - <span class="but_type" @click="handleAdd(key)">新增</span> | |
| 18 | - <span class="but_type">编辑</span> | |
| 19 | - <span class="but_type">删除</span> | |
| 18 | + <span class="but_type" @click="handleAdd(id)">新增</span> | |
| 19 | + <span class="but_type" @click="handleEdit(record)">编辑</span> | |
| 20 | + <a-popconfirm | |
| 21 | + title="你是否确认删除操作?" | |
| 22 | + ok-text="确认" | |
| 23 | + cancel-text="取消" | |
| 24 | + @confirm="handleDelete(record)" | |
| 25 | + > | |
| 26 | + <span class="but_type">删除</span> | |
| 27 | + </a-popconfirm> | |
| 20 | 28 | </div> |
| 21 | 29 | </div> |
| 22 | 30 | </template> |
| 23 | 31 | </a-tree> |
| 24 | - <categoryModal @register="registerModal" @handleReload="handleReload"/> | |
| 32 | + <categoryModal @register="registerModal" @handleReload="handleReload" /> | |
| 25 | 33 | </div> |
| 26 | 34 | </PageWrapper> |
| 27 | - | |
| 28 | 35 | </template> |
| 29 | 36 | <script setup lang="ts"> |
| 30 | -import {PageWrapper} from "/@/components/Page"; | |
| 31 | -import './index.less'; | |
| 32 | -import {categoryModal} from './components/index'; | |
| 33 | -import {useModal} from "/@/components/Modal"; | |
| 37 | + import { PageWrapper } from '/@/components/Page'; | |
| 38 | + import './index.less'; | |
| 39 | + import { categoryModal } from './components/index'; | |
| 40 | + import { useModal } from '/@/components/Modal'; | |
| 41 | + import { deleteCategory, getAllCategory } from '/@/api/equipment/category'; | |
| 42 | + import { ref, onMounted } from 'vue'; | |
| 43 | + import { useI18n } from '/@/hooks/web/useI18n'; | |
| 44 | + import { useMessage } from '/@/hooks/web/useMessage'; | |
| 45 | + const treeData = ref([]); // 声明为响应式变量 | |
| 46 | + const { t } = useI18n(); | |
| 47 | + const { createMessage } = useMessage(); | |
| 48 | + const searchKeyword = ref(''); | |
| 49 | + // 递归转换函数 | |
| 50 | + const transformTreeData = (data: any) => { | |
| 51 | + return data?.map((item) => { | |
| 52 | + const transformedItem = { | |
| 53 | + title: item.name, | |
| 54 | + key: item.id, | |
| 55 | + id: item.id, | |
| 56 | + record: item, // 将原始数据赋值给 record | |
| 57 | + slots: { title: 'custom' }, | |
| 58 | + }; | |
| 34 | 59 | |
| 35 | -const [registerModal, {openModal}] = useModal(); | |
| 36 | -const treeData = [ | |
| 37 | - { | |
| 38 | - title: '全部', | |
| 39 | - key: '0-0', | |
| 40 | - slots: {title: 'custom'}, // 添加 title: 'custom' | |
| 41 | - children: [ | |
| 42 | - { | |
| 43 | - title: '德风石化有限公司', | |
| 44 | - key: '0-0-0', | |
| 45 | - slots: {title: 'custom'}, // 添加 title: 'custom' | |
| 46 | - children: [ | |
| 47 | - { | |
| 48 | - title: '公共工程', | |
| 49 | - key: '0-0-0-0', | |
| 50 | - slots: {title: 'custom'}, // 添加 title: 'custom' | |
| 51 | - children: [ | |
| 52 | - { | |
| 53 | - title: '中心控制室', | |
| 54 | - key: '0-0-0-0-0', | |
| 55 | - slots: {title: 'custom'} | |
| 56 | - }, | |
| 57 | - {title: '辅料管区', key: '0-0-0-0-1', slots: {title: 'custom'}}, | |
| 58 | - {title: 'PSA伐区', key: '0-0-0-0-2', slots: {title: 'custom'}}, | |
| 59 | - {title: '导热油房区', key: '0-0-0-0-3', slots: {title: 'custom'}}, | |
| 60 | - {title: '甲醇裂解区', key: '0-0-0-0-4', slots: {title: 'custom'}}, | |
| 61 | - {title: '机柜间', key: '0-0-0-0-5', slots: {title: 'custom'}} | |
| 62 | - ] | |
| 63 | - }, | |
| 64 | - {title: '污水处理站', key: '0-0-0-1', slots: {title: 'custom'}} // 添加 title: 'custom' | |
| 65 | - ] | |
| 60 | + // 递归处理 children | |
| 61 | + if (item.children && item.children.length > 0) { | |
| 62 | + //@ts-ignore | |
| 63 | + transformedItem.children = transformTreeData(item.children); | |
| 66 | 64 | } |
| 67 | - ] | |
| 68 | - } | |
| 69 | -]; | |
| 70 | 65 | |
| 71 | -// 处理新建按钮点击事件 | |
| 72 | -const handleAdd = (key: string) => { | |
| 73 | - openModal(true, { | |
| 74 | - isUpdate: false, // 表示是新建操作 | |
| 75 | - parentKey: key, // 传递当前节点的 key | |
| 66 | + return transformedItem; | |
| 67 | + }); | |
| 68 | + }; | |
| 69 | + | |
| 70 | + // 获取分类数据的函数 | |
| 71 | + const fetchTreeData = async (name?: string) => { | |
| 72 | + try { | |
| 73 | + const res = await getAllCategory({ name }); // 将关键字传递给接口 | |
| 74 | + // 使用递归函数转换数据 | |
| 75 | + treeData.value = transformTreeData(res); | |
| 76 | + } catch (error) { | |
| 77 | + console.error('获取分类数据失败:', error); | |
| 78 | + } | |
| 79 | + }; | |
| 80 | + | |
| 81 | + // 组件挂载时获取数据 | |
| 82 | + onMounted(() => { | |
| 83 | + fetchTreeData(); | |
| 76 | 84 | }); |
| 77 | -}; | |
| 78 | 85 | |
| 86 | + const [registerModal, { openModal }] = useModal(); | |
| 87 | + | |
| 88 | + // 处理搜索事件 | |
| 89 | + const handleSearch = () => { | |
| 90 | + fetchTreeData(searchKeyword.value); | |
| 91 | + }; | |
| 92 | + | |
| 93 | + // 处理新建按钮点击事件 | |
| 94 | + const handleAdd = (key: string) => { | |
| 95 | + openModal(true, { | |
| 96 | + isUpdate: false, // 表示是新建操作 | |
| 97 | + parentId: key, // 传递当前节点的 key | |
| 98 | + }); | |
| 99 | + }; | |
| 100 | + | |
| 101 | + // 编辑 | |
| 102 | + const handleEdit = (record?: any) => { | |
| 103 | + console.log(record, 'record'); | |
| 104 | + openModal(true, { | |
| 105 | + isUpdate: true, | |
| 106 | + record, | |
| 107 | + }); | |
| 108 | + }; | |
| 79 | 109 | |
| 80 | -const handleReload = () => { | |
| 110 | + const handleDelete = async (record?: any) => { | |
| 111 | + let id = record.id; | |
| 112 | + try { | |
| 113 | + await deleteCategory({ id }); | |
| 114 | + createMessage.success(t('common.deleteSuccessText')); | |
| 115 | + handleReload(); | |
| 116 | + } catch (error) { | |
| 117 | + throw error; | |
| 118 | + } finally { | |
| 119 | + } | |
| 120 | + }; | |
| 81 | 121 | |
| 82 | -}; | |
| 122 | + const handleReload = () => { | |
| 123 | + fetchTreeData(); | |
| 124 | + }; | |
| 83 | 125 | </script> | ... | ... |
src/views/inspection/servicePlan/index.ts
0 → 100644
| 1 | +import { FormSchema } from '/@/components/Form'; | |
| 2 | +import { useI18n } from '/@/hooks/web/useI18n'; | |
| 3 | +import { BasicColumn } from '/@/components/Table'; | |
| 4 | +const { t } = useI18n(); | |
| 5 | + | |
| 6 | +export const searchFormSchema: FormSchema[] = [ | |
| 7 | + { | |
| 8 | + field: 'preserveName', | |
| 9 | + label: t('inspection.servicePlan.preserveNameText'), | |
| 10 | + component: 'Input', | |
| 11 | + colProps: { span: 12 }, | |
| 12 | + }, | |
| 13 | +]; | |
| 14 | + | |
| 15 | +export const columns: BasicColumn[] = [ | |
| 16 | + { | |
| 17 | + title: t('inspection.servicePlan.preserveCodeText'), | |
| 18 | + dataIndex: 'preserveCode', | |
| 19 | + }, | |
| 20 | + { | |
| 21 | + title: t('inspection.servicePlan.preserveNameText'), | |
| 22 | + dataIndex: 'preserveName', | |
| 23 | + }, | |
| 24 | + { | |
| 25 | + title: t('inspection.servicePlan.statusText'), | |
| 26 | + dataIndex: 'status', | |
| 27 | + slots: { customRender: 'status' }, | |
| 28 | + }, | |
| 29 | + { | |
| 30 | + title: t('inspection.servicePlan.frequencyText'), | |
| 31 | + dataIndex: 'frequency', | |
| 32 | + }, | |
| 33 | + { | |
| 34 | + title: t('inspection.servicePlan.timesText'), | |
| 35 | + dataIndex: 'times', | |
| 36 | + }, | |
| 37 | +]; | ... | ... |
src/views/inspection/servicePlan/index.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <BasicTable :clickToRowSelect="false" @register="registerTable"> | |
| 4 | + <template #toolbar> | |
| 5 | + <Authority value="api:yt:product:category:post"> | |
| 6 | + <Button type="primary" @click="handleCreate"> | |
| 7 | + {{ t('inspection.servicePlan.createCategoryText') }} | |
| 8 | + </Button> | |
| 9 | + </Authority> | |
| 10 | + </template> | |
| 11 | + </BasicTable> | |
| 12 | + </div> | |
| 13 | +</template> | |
| 14 | +<script setup lang="ts"> | |
| 15 | + import { useTable } from '/@/components/Table'; | |
| 16 | + import { getRepairOrderList } from '/@/api/repair/order'; | |
| 17 | + import { columns, searchFormSchema } from './index'; | |
| 18 | + import { useI18n } from '/@/hooks/web/useI18n'; | |
| 19 | + | |
| 20 | + const { t } = useI18n(); | |
| 21 | + | |
| 22 | + const [ | |
| 23 | + registerTable, | |
| 24 | + { reload, setLoading, getSelectRowKeys, setSelectedRowKeys, getRowSelection }, | |
| 25 | + ] = useTable({ | |
| 26 | + title: t('inspection.servicePlan.listText'), | |
| 27 | + api: getRepairOrderList, | |
| 28 | + columns, | |
| 29 | + formConfig: { | |
| 30 | + labelWidth: 100, | |
| 31 | + schemas: searchFormSchema, | |
| 32 | + }, | |
| 33 | + immediate: true, | |
| 34 | + useSearchForm: true, | |
| 35 | + showTableSetting: true, | |
| 36 | + bordered: true, | |
| 37 | + showIndexColumn: false, | |
| 38 | + clickToRowSelect: false, | |
| 39 | + rowKey: 'id', | |
| 40 | + actionColumn: { | |
| 41 | + width: 230, | |
| 42 | + title: t('common.actionText'), | |
| 43 | + slots: { customRender: 'action' }, | |
| 44 | + fixed: 'right', | |
| 45 | + }, | |
| 46 | + rowSelection: { | |
| 47 | + type: 'checkbox', | |
| 48 | + getCheckboxProps: (record: any) => {}, | |
| 49 | + }, | |
| 50 | + }); | |
| 51 | +</script> | ... | ... |
src/views/repair/history/index.ts
0 → 100644
| 1 | +import { FormSchema } from '/@/components/Form'; | |
| 2 | +import { useI18n } from '/@/hooks/web/useI18n'; | |
| 3 | +import { BasicColumn } from '/@/components/Table'; | |
| 4 | +const { t } = useI18n(); | |
| 5 | + | |
| 6 | +export const columns: BasicColumn[] = [ | |
| 7 | + { | |
| 8 | + title: t('repair.history.orderCode'), | |
| 9 | + dataIndex: 'tkRepairOrderDTO', | |
| 10 | + // format: (text,record) => { | |
| 11 | + // return record.orderCode; | |
| 12 | + // }, | |
| 13 | + }, | |
| 14 | + { | |
| 15 | + title: t('repair.history.orderText'), | |
| 16 | + dataIndex: 'tkRepairOrderDTO', | |
| 17 | + // format: (text,record) => { | |
| 18 | + // return record.orderCode; | |
| 19 | + // }, | |
| 20 | + }, | |
| 21 | + { | |
| 22 | + title: t('repair.history.deviceNameText'), | |
| 23 | + dataIndex: 'reportDate', | |
| 24 | + }, | |
| 25 | + { | |
| 26 | + title: t('repair.history.time'), | |
| 27 | + dataIndex: 'time', | |
| 28 | + }, | |
| 29 | + { | |
| 30 | + title: t('repair.history.reportByName'), | |
| 31 | + dataIndex: 'reportByName', | |
| 32 | + }, | |
| 33 | + { | |
| 34 | + title: t('repair.history.photo'), | |
| 35 | + dataIndex: 'photo', | |
| 36 | + }, | |
| 37 | + { | |
| 38 | + title: t('repair.history.description'), | |
| 39 | + dataIndex: 'description', | |
| 40 | + }, | |
| 41 | + { | |
| 42 | + title: t('repair.history.repairTime'), | |
| 43 | + dataIndex: 'repairTime', | |
| 44 | + slots: { customRender: 'repairTime' }, | |
| 45 | + }, | |
| 46 | + { | |
| 47 | + title: t('repair.history.repairByName'), | |
| 48 | + dataIndex: 'repairByName', | |
| 49 | + slots: { customRender: 'repairByName' }, | |
| 50 | + }, | |
| 51 | + { | |
| 52 | + title: t('repair.history.repairReason'), | |
| 53 | + dataIndex: 'repairReason', | |
| 54 | + slots: { customRender: 'repairReason' }, | |
| 55 | + }, | |
| 56 | + { | |
| 57 | + title: t('repair.history.repairDescription'), | |
| 58 | + dataIndex: 'repairDescription', | |
| 59 | + slots: { customRender: 'repairDescription' }, | |
| 60 | + }, | |
| 61 | +]; | |
| 62 | + | |
| 63 | +export const searchFormSchema: FormSchema[] = [ | |
| 64 | + { | |
| 65 | + field: 'orderId', | |
| 66 | + label: t('repair.history.orderText'), | |
| 67 | + component: 'Select', | |
| 68 | + colProps: { span: 6 }, | |
| 69 | + }, | |
| 70 | +]; | ... | ... |
src/views/repair/history/index.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <BasicTable style="flex: auto" @register="registerTable"> | |
| 4 | + <template #toolbar> </template> | |
| 5 | + </BasicTable> | |
| 6 | + </div> | |
| 7 | +</template> | |
| 8 | +<script setup lang="ts"> | |
| 9 | + import { BasicTable, useTable } from '/@/components/Table'; | |
| 10 | + import { getRepairHistoryList } from '/@/api/repair/history'; | |
| 11 | + import { columns, searchFormSchema } from './index'; | |
| 12 | + import { useI18n } from '/@/hooks/web/useI18n'; | |
| 13 | + const { t } = useI18n(); | |
| 14 | + const [ | |
| 15 | + registerTable, | |
| 16 | + { reload, setLoading, getSelectRowKeys, setSelectedRowKeys, getRowSelection }, | |
| 17 | + ] = useTable({ | |
| 18 | + title: t('repair.history.listText'), | |
| 19 | + api: getRepairHistoryList, | |
| 20 | + columns, | |
| 21 | + formConfig: { | |
| 22 | + labelWidth: 100, | |
| 23 | + schemas: searchFormSchema, | |
| 24 | + }, | |
| 25 | + immediate: true, | |
| 26 | + useSearchForm: true, | |
| 27 | + showTableSetting: true, | |
| 28 | + bordered: true, | |
| 29 | + showIndexColumn: false, | |
| 30 | + clickToRowSelect: false, | |
| 31 | + rowKey: 'id', | |
| 32 | + }); | |
| 33 | +</script> | ... | ... |
src/views/repair/order/index.ts
0 → 100644
| 1 | +import { FormSchema } from '/@/components/Form'; | |
| 2 | +import { useI18n } from '/@/hooks/web/useI18n'; | |
| 3 | +import { BasicColumn } from '/@/components/Table'; | |
| 4 | +import moment from 'moment/moment'; | |
| 5 | +const { t } = useI18n(); | |
| 6 | + | |
| 7 | +const statusOptions = [ | |
| 8 | + { label: t('repair.order.SCHEDULING'), value: 'SCHEDULING' }, | |
| 9 | + { label: t('repair.order.REPAIRFINISH'), value: 'REPAIRFINISH' }, | |
| 10 | + { label: t('repair.order.ACCEPTANCEPASSED'), value: 'ACCEPTANCEPASSED' }, | |
| 11 | +]; | |
| 12 | +const typeOptions = [ | |
| 13 | + { label: t('repair.order.inspectionText'), value: 'INSPECTION' }, | |
| 14 | + { label: t('repair.order.maintenanceText'), value: 'MAINTENANCE' }, | |
| 15 | +]; | |
| 16 | + | |
| 17 | +export const columns: BasicColumn[] = [ | |
| 18 | + { | |
| 19 | + title: t('repair.order.nameCode'), | |
| 20 | + dataIndex: 'orderCode', | |
| 21 | + }, | |
| 22 | + { | |
| 23 | + title: t('repair.order.deviceNameText'), | |
| 24 | + dataIndex: 'deviceId', | |
| 25 | + slots: { customRender: 'deviceId' }, | |
| 26 | + }, | |
| 27 | + { | |
| 28 | + title: t('repair.order.reportDateText'), | |
| 29 | + dataIndex: 'reportDate', | |
| 30 | + }, | |
| 31 | + { | |
| 32 | + title: t('repair.order.reportByName'), | |
| 33 | + dataIndex: 'reportByName', | |
| 34 | + }, | |
| 35 | + { | |
| 36 | + title: t('repair.order.description'), | |
| 37 | + dataIndex: 'description', | |
| 38 | + }, | |
| 39 | + { | |
| 40 | + title: t('repair.order.statusText'), | |
| 41 | + dataIndex: 'status', | |
| 42 | + slots: { customRender: 'status' }, | |
| 43 | + }, | |
| 44 | + { | |
| 45 | + title: t('repair.order.emergencyText'), | |
| 46 | + dataIndex: 'emergency', | |
| 47 | + slots: { customRender: 'emergency' }, | |
| 48 | + }, | |
| 49 | +]; | |
| 50 | + | |
| 51 | +export const searchFormSchema: FormSchema[] = [ | |
| 52 | + { | |
| 53 | + field: 'deviceId', | |
| 54 | + label: t('repair.order.deviceNameText'), | |
| 55 | + component: 'Select', | |
| 56 | + colProps: { span: 6 }, | |
| 57 | + }, | |
| 58 | + { | |
| 59 | + field: 'status', | |
| 60 | + label: t('repair.order.statusText'), | |
| 61 | + component: 'Select', | |
| 62 | + colProps: { span: 6 }, | |
| 63 | + componentProps: { | |
| 64 | + options: statusOptions, | |
| 65 | + }, | |
| 66 | + }, | |
| 67 | + { | |
| 68 | + field: 'startDate', | |
| 69 | + label: t('repair.order.time'), | |
| 70 | + component: 'RangePicker', | |
| 71 | + componentProps: { | |
| 72 | + showTime: { | |
| 73 | + defaultValue: [moment('00:00:00', 'HH:mm:ss'), moment('23:59:59', 'HH:mm:ss')], | |
| 74 | + }, | |
| 75 | + }, | |
| 76 | + colProps: { span: 6 }, | |
| 77 | + }, | |
| 78 | +]; | |
| 79 | + | |
| 80 | +export const schemas: FormSchema[] = [ | |
| 81 | + { | |
| 82 | + field: 'code', | |
| 83 | + label: t('repair.order.nameCode'), | |
| 84 | + component: 'Input', | |
| 85 | + colProps: { span: 21 }, | |
| 86 | + required: true, | |
| 87 | + componentProps: { | |
| 88 | + maxLength: 20, | |
| 89 | + }, | |
| 90 | + }, | |
| 91 | + { | |
| 92 | + field: 'name', | |
| 93 | + label: t('repair.order.nameText'), | |
| 94 | + component: 'Input', | |
| 95 | + colProps: { span: 21 }, | |
| 96 | + required: true, | |
| 97 | + componentProps: { | |
| 98 | + maxLength: 20, | |
| 99 | + }, | |
| 100 | + }, | |
| 101 | + { | |
| 102 | + field: 'type', | |
| 103 | + label: t('repair.order.typeText'), | |
| 104 | + component: 'RadioButtonGroup', | |
| 105 | + defaultValue: 'INSPECTION', | |
| 106 | + componentProps: { | |
| 107 | + options: typeOptions, | |
| 108 | + }, | |
| 109 | + }, | |
| 110 | + { | |
| 111 | + field: 'status', | |
| 112 | + label: t('repair.order.statusText'), | |
| 113 | + component: 'RadioButtonGroup', | |
| 114 | + defaultValue: 'ENABLE', | |
| 115 | + componentProps: { | |
| 116 | + options: statusOptions, | |
| 117 | + }, | |
| 118 | + }, | |
| 119 | + { | |
| 120 | + field: 'planDetails', | |
| 121 | + label: t('repair.order.nameDetail'), | |
| 122 | + component: 'InputTextArea', | |
| 123 | + colProps: { span: 21 }, | |
| 124 | + required: true, | |
| 125 | + componentProps: { | |
| 126 | + maxLength: 200, | |
| 127 | + }, | |
| 128 | + }, | |
| 129 | +]; | ... | ... |
src/views/repair/order/index.vue
0 → 100644
| 1 | +<template> | |
| 2 | + <div> | |
| 3 | + <BasicTable style="flex: auto" @register="registerTable"> | |
| 4 | + <template #toolbar> | |
| 5 | + <Authority value="api:yt:product:category:post"> | |
| 6 | + <Button type="primary"> | |
| 7 | + {{ t('repair.order.createCategoryText') }} | |
| 8 | + </Button> | |
| 9 | + </Authority> | |
| 10 | + </template> | |
| 11 | + <template #deviceId="{ record }"> | |
| 12 | + <span>{{ record?.deviceInfo?.name }}</span> | |
| 13 | + </template> | |
| 14 | + <template #status="{ record }"> | |
| 15 | + <Tag | |
| 16 | + :color=" | |
| 17 | + record.status == 'SCHEDULING' | |
| 18 | + ? 'yellow' | |
| 19 | + : record.status == 'REPAIRFINISH' | |
| 20 | + ? 'blue' | |
| 21 | + : 'green' | |
| 22 | + " | |
| 23 | + class="ml-2" | |
| 24 | + > | |
| 25 | + {{ t(`repair.order.${record.status}`) }} | |
| 26 | + </Tag> | |
| 27 | + </template> | |
| 28 | + <template #emergency="{ record }"> | |
| 29 | + <Tag :color="record.emergency ? 'error' : 'green'" class="ml-2"> | |
| 30 | + {{ record.emergency ? '是' : '否' }} | |
| 31 | + </Tag> | |
| 32 | + </template> | |
| 33 | + </BasicTable> | |
| 34 | + </div> | |
| 35 | +</template> | |
| 36 | +<script setup lang="ts"> | |
| 37 | + import { BasicTable, TableAction } from '/@/components/Table'; | |
| 38 | + import { useTable } from '/@/components/Table'; | |
| 39 | + import { getRepairOrderList } from '/@/api/repair/order'; | |
| 40 | + import { columns, searchFormSchema } from './index'; | |
| 41 | + import { useI18n } from '/@/hooks/web/useI18n'; | |
| 42 | + import { Button, Tag } from 'ant-design-vue'; | |
| 43 | + import { Authority } from '/@/components/Authority'; | |
| 44 | + const { t } = useI18n(); | |
| 45 | + | |
| 46 | + const [ | |
| 47 | + registerTable, | |
| 48 | + { reload, setLoading, getSelectRowKeys, setSelectedRowKeys, getRowSelection }, | |
| 49 | + ] = useTable({ | |
| 50 | + title: t('repair.order.listText'), | |
| 51 | + api: getRepairOrderList, | |
| 52 | + columns, | |
| 53 | + formConfig: { | |
| 54 | + labelWidth: 100, | |
| 55 | + schemas: searchFormSchema, | |
| 56 | + }, | |
| 57 | + immediate: true, | |
| 58 | + useSearchForm: true, | |
| 59 | + showTableSetting: true, | |
| 60 | + bordered: true, | |
| 61 | + showIndexColumn: false, | |
| 62 | + clickToRowSelect: false, | |
| 63 | + rowKey: 'id', | |
| 64 | + actionColumn: { | |
| 65 | + width: 230, | |
| 66 | + title: t('common.actionText'), | |
| 67 | + slots: { customRender: 'action' }, | |
| 68 | + fixed: 'right', | |
| 69 | + }, | |
| 70 | + rowSelection: { | |
| 71 | + type: 'checkbox', | |
| 72 | + getCheckboxProps: (record: any) => {}, | |
| 73 | + }, | |
| 74 | + }); | |
| 75 | +</script> | ... | ... |