diff --git a/src/api/customer/index.ts b/src/api/customer/index.ts new file mode 100644 index 0000000..dbd70de --- /dev/null +++ b/src/api/customer/index.ts @@ -0,0 +1,11 @@ +import { AxiosPromise } from "axios"; +import { CustomerResult } from "@/api/customer/types"; +import request from "@/utils/request"; + +export function customerPage(data: SelectForm): AxiosPromise { + return request({ + url: "/api/customer/v1/customer-page", + method: "POST", + data, + }); +} diff --git a/src/api/customer/types.ts b/src/api/customer/types.ts new file mode 100644 index 0000000..2b388d6 --- /dev/null +++ b/src/api/customer/types.ts @@ -0,0 +1,8 @@ +export interface CustomerVO { + customId?: number; + regionAreaId?: number; + customType?: string; + customStatus?: string; + regionAreaName?: string; +} +export type CustomerResult = PageResult; diff --git a/src/api/resources-equipment/index.ts b/src/api/resources-equipment/index.ts index dc499f5..841ecc1 100644 --- a/src/api/resources-equipment/index.ts +++ b/src/api/resources-equipment/index.ts @@ -1,8 +1,10 @@ import { AxiosPromise } from "axios"; import { + EquipmentAddForm, EquipmentEditForm, EquipmentResult, - EquipmentTableResult + EquipmentTableResult, + PrivateProfile, } from "@/api/resources-equipment/types"; import request from "@/utils/request"; @@ -33,3 +35,29 @@ export function editResourceEquipment( data, }); } +export function addResourceEquipment( + data: EquipmentAddForm +): AxiosPromise { + return request({ + url: "/api/equipment/v1/resource-add", + method: "POST", + data, + }); +} + +export function privateProfile( + data: PrivateProfile +): AxiosPromise { + return request({ + url: "/api/equipment/v1/private-file", + method: "POST", + data, + }); +} + +export function bindingCustomAPI(devId: number, customId: number) { + return request({ + url: `/api/equipment/v1/binding-custom/${devId}/${customId}`, + method: "PUT", + }); +} diff --git a/src/api/resources-equipment/types.ts b/src/api/resources-equipment/types.ts index 828998f..64037c8 100644 --- a/src/api/resources-equipment/types.ts +++ b/src/api/resources-equipment/types.ts @@ -81,4 +81,18 @@ export interface EquipmentEditForm { } export interface EquipmentAddForm extends EquipmentEditForm { regionAreaId?: number; + devTypeId?: number; } +export interface PrivateProfile { + devId?: number; + + fileName?: string; + + fileDesc?: string; + + fileType?: string; + + fileUrl?: string; +} + + diff --git a/src/views/resources/equipment/components/AddEquipment.vue b/src/views/resources/equipment/components/AddEquipment.vue index f1503c3..d105b1e 100644 --- a/src/views/resources/equipment/components/AddEquipment.vue +++ b/src/views/resources/equipment/components/AddEquipment.vue @@ -71,8 +71,8 @@ type="primary" link @click="redirect(scope.row.devTypeId)" - >{{ scope.row.devType }} + >{{ scope.row.devType }} +
- - + + + + + +
+
+ + + + + + + + + + + + + + + + + + +
拖拽上传 或 点击上传
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + 搜索 + + + + +
+ + +
+ + + + + + +
+
@@ -213,9 +382,23 @@ import { tr069BindingDevTypePage, } from "@/api/device-type"; import { Tr069DevTypeQuery, Tr069DevTypeVO } from "@/api/tr069/types"; -import { ElTable } from "element-plus"; -import { EquipmentAddForm } from "@/api/resources-equipment/types"; +import { ElTable, FormInstance, FormRules, UploadUserFile } from "element-plus"; +import { + EquipmentAddForm, + PrivateProfile, +} from "@/api/resources-equipment/types"; import { getDomainOptions } from "@/api/domain"; +import { Position, Search, UploadFilled } from "@element-plus/icons-vue"; +import { uploadApi } from "@/api/file"; +import { + addResourceEquipment, + bindingCustomAPI, + privateProfile, +} from "@/api/resources-equipment"; +import { customerPage } from "@/api/customer"; +import { CustomerVO } from "@/api/customer/types"; +import { add } from "lodash-es"; + const multiple = ref({}); const searchForm = ref({ devTypeName: "", @@ -225,9 +408,9 @@ const searchForm = ref({ pageSize: 10, }); const addForm = ref({}); +const addFormRef = ref(); const route = useRoute(); const active = ref(0); -let tr069VerId: number = parseInt(route.params.tr069VerId); const vendorNameOption = ref([]); const typeNameOption = ref([]); const hardVerOption = ref([]); @@ -235,6 +418,26 @@ const tableData = ref([]); const total = ref(0); const loading = ref(false); const router = useRouter(); +const fileForm = ref({ + fileType: "5", +}); +const fileList = ref([]); +const rules = reactive>({ + devSno: [{ required: true, message: "请填写设备序列号", trigger: "blur" }], + regionAreaId: [ + { required: true, message: "请选择系统管理域", trigger: "blur" }, + ], +}); +const queryForm = ref({ + pageNum: 1, + pageSize: 10, +}); +const customData = ref([]); +const customTotal = ref(0); +const options = ref([{ label: "客户名称", value: "customName" }]); +const buttonColSpan = computed(() => { + return queryForm.value.selectName === undefined ? 18 : 12; +}); const loadVendorNameOption = async () => { await getVendorNameOption().then(({ data }) => { vendorNameOption.value = data; @@ -252,6 +455,7 @@ const loadHardVerOption = async () => { }; const handleCurrentChange = (val: Tr069DevTypeVO) => { multiple.value = val; + addForm.value.devTypeId = val.devTypeId; }; const loadTr069DevTypePage = () => { loading.value = true; @@ -271,11 +475,13 @@ const redirect = (devTypeId: number) => { }); }; const domainOptions = ref([]); + async function loadDomainOptions() { await getDomainOptions().then(({ data }) => { domainOptions.value = data; }); } + const next1 = () => { if (multiple.value.devTypeId === undefined) { ElMessage({ @@ -287,6 +493,12 @@ const next1 = () => { } active.value = 1; }; +const next2 = () => { + active.value = 2; +}; +const next3 = () => { + active.value = 3; +}; const lastStep = () => { active.value = active.value - 1; }; @@ -298,7 +510,105 @@ watch( } } ); - +const submitStep1 = async (formEl: FormInstance | undefined) => { + if (!formEl) return; + await formEl.validate((valid, fields) => { + if (valid) { + loading.value = true; + addResourceEquipment(addForm.value) + .then(({ data }) => { + addForm.value.devId = data; + fileForm.value.devId = data; + ElMessage({ + message: "操作成功", + duration: 1000, + type: "success", + }); + }) + .finally(() => { + loading.value = false; + }); + } + }); +}; +const submitFile = () => { + if (fileList.value.length === 0) { + ElMessage.error("请选择文件上传"); + return; + } + const file = fileList.value[0].raw; + const dotIndex: any = file?.name.lastIndexOf("."); + if (dotIndex === -1) { + ElMessage.error("文件没有后缀,无法上传"); + return; + } + loading.value = true; + const fileName = fileForm.value.fileName; + const fileType = fileForm.value.fileType; + fileForm.value.fileName = fileName + "." + file?.name.substring(dotIndex + 1); + uploadApi(file, fileName, fileType).then(({ data }) => { + fileForm.value.fileUrl = data; + privateProfile(fileForm.value) + .then(() => { + ElMessage({ + message: "文件添加成功", + duration: 1000, + type: "success", + }); + }) + .finally(() => { + loading.value = false; + }); + }); +}; +const queryCustomer = () => { + if ( + queryForm.value.selectName === undefined || + queryForm.value.selectValue === undefined + ) { + ElMessage({ + message: "查询条件不能为空", + type: "error", + duration: 1000, + }); + return; + } + loading.value = true; + customerPage(queryForm.value) + .then(({ data }) => { + customData.value = data.list; + customTotal.value = data.total; + }) + .finally(() => { + loading.value = false; + }); +}; +const currentCustomerId = ref(0); +const handleCustomerChange = (val: CustomerVO) => { + currentCustomerId.value = val.customId; +}; +const bindingCustom = () => { + if (currentCustomerId.value === 0) { + ElMessage({ + message: "请选择一个客户绑定", + duration: 1000, + type: "error", + }); + return; + } + loading.value = true; + bindingCustomAPI(addForm.value.devId, currentCustomerId.value) + .then(() => { + ElMessage({ + message: "操作成功", + duration: 1000, + type: "success", + }); + }) + .finally(() => { + loading.value = false; + }); +}; onMounted(() => { loadVendorNameOption(); loadTypeNameOption(); diff --git a/src/views/resources/equipment/index.vue b/src/views/resources/equipment/index.vue index be716e1..e18b4d4 100644 --- a/src/views/resources/equipment/index.vue +++ b/src/views/resources/equipment/index.vue @@ -81,7 +81,7 @@