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> | ... | ... |