|
@@ -0,0 +1,216 @@
|
|
|
|
+<template>
|
|
|
|
+ <el-dialog
|
|
|
|
+ class="api-edit"
|
|
|
|
+ v-model="showDialog"
|
|
|
|
+ :title="`${formData.id ? '编辑升级包' : '新增升级包'}`"
|
|
|
|
+ width="768px"
|
|
|
|
+ :close-on-click-modal="false"
|
|
|
|
+ :close-on-press-escape="false"
|
|
|
|
+ >
|
|
|
|
+ <el-form ref="formRef" :model="formData" :rules="ruleForm" label-width="160px">
|
|
|
|
+ <el-form-item label="升级包类型" prop="typo">
|
|
|
|
+ <el-radio-group v-model="formData.typo">
|
|
|
|
+ <el-radio label="1">整包</el-radio>
|
|
|
|
+ <el-radio label="2">差分</el-radio>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ <el-form-item label="升级包名称" prop="name">
|
|
|
|
+ <el-input v-model="formData.name" placeholder="请输入升级包名称" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="所属产品" prop="productId">
|
|
|
|
+ <el-select v-model="formData.productId" filterable placeholder="请选择产品" @change="seletChange">
|
|
|
|
+ <el-option v-for="item in productData" :key="item.id" :label="item.name" :value="item.id.toString()" value-key="id"> </el-option>
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <div>
|
|
|
|
+ <el-form-item label="升级包模块" prop="module">
|
|
|
|
+ <el-select v-model="formData.module" filterable placeholder="请选择产品">
|
|
|
|
+ <el-option v-for="item in moduleData" :key="item.id" :label="item.name" :value="item.id.toString()" value-key="id"> </el-option>
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </div>
|
|
|
|
+ <el-form-item label="升级包版本号" prop="version" v-if="formData.typo == 1">
|
|
|
|
+ <el-input v-model="formData.version" placeholder="请输入待升级包版本号" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ <el-form-item label="待升级版本号" prop="waitVersion" v-if="formData.typo == 2">
|
|
|
|
+ <el-input v-model="formData.waitVersion" placeholder="请输入待升级版本号" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ <el-form-item label="升级后版本号" prop="afterVersion" v-if="formData.typo == 2">
|
|
|
|
+ <el-input v-model="formData.afterVersion" placeholder="请输入升级后版本号" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ <el-form-item label="算法签名" prop="are">
|
|
|
|
+ <el-select v-model="formData.are" filterable placeholder="请选择算法签名">
|
|
|
|
+ <el-option v-for="item in areType" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
|
|
|
+ </el-select>
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ <el-form-item label="选择升级包" prop="url">
|
|
|
|
+ <el-upload :accept="['.bin','.tar','.gz','.tar.xz','.zip','.gzip','.apk','.dav','.pack']" :show-file-list="false" :limit="1" :headers="headers" :action="uploadUrl" :on-success="updateImg">
|
|
|
|
+
|
|
|
|
+ <el-button type="Default">上传升级包</el-button>
|
|
|
|
+ </el-upload>
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ <el-form-item label="升级包是否验证" prop="check">
|
|
|
|
+ <el-radio-group v-model="formData.check">
|
|
|
|
+ <el-radio :label="1">是</el-radio>
|
|
|
|
+ <el-radio :label="2">否</el-radio>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ <el-form-item label="升级包描述" prop="describe">
|
|
|
|
+ <el-input v-model="formData.describe" type="textarea" :rows="3" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+
|
|
|
|
+ <el-form-item label="推送设备的自定义消息" prop="info">
|
|
|
|
+ <el-input v-model="formData.info" type="textarea" :rows="3" />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ <template #footer>
|
|
|
|
+ <div class="dialog-footer">
|
|
|
|
+ <el-button @click="showDialog = false">取消</el-button>
|
|
|
|
+ <el-button type="primary" @click="onSubmit">确定</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </el-dialog>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script lang="ts" setup>
|
|
|
|
+import { ref, reactive, nextTick } from 'vue'
|
|
|
|
+import api from '/@/api/ota'
|
|
|
|
+import { ruleRequired } from '/@/utils/validator'
|
|
|
|
+import { ElMessage } from 'element-plus'
|
|
|
|
+import getOrigin from '/@/utils/origin';
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+const emit = defineEmits(['getList'])
|
|
|
|
+
|
|
|
|
+const showDialog = ref(false)
|
|
|
|
+const formRef = ref()
|
|
|
|
+const uploadUrl: string = getOrigin(import.meta.env.VITE_API_URL + "/dev_ota_fireware/upload");
|
|
|
|
+ const headers = {
|
|
|
|
+ Authorization: 'Bearer ' + localStorage.token,
|
|
|
|
+ };
|
|
|
|
+const areType = ref([
|
|
|
|
+ {
|
|
|
|
+ label: 'MD5',
|
|
|
|
+ value: 'MD5',
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ label: 'SHA256',
|
|
|
|
+ value: 'SHA256',
|
|
|
|
+ },
|
|
|
|
+])
|
|
|
|
+const productData = ref([
|
|
|
|
+ {
|
|
|
|
+ id: '',
|
|
|
|
+ name: '',
|
|
|
|
+ },
|
|
|
|
+])
|
|
|
|
+const moduleData = ref([
|
|
|
|
+ {
|
|
|
|
+ id: '',
|
|
|
|
+ name: '',
|
|
|
|
+ },
|
|
|
|
+])
|
|
|
|
+const baseForm = {
|
|
|
|
+ id: undefined,
|
|
|
|
+ typo: '1',
|
|
|
|
+ name: '',
|
|
|
|
+ productId: '',
|
|
|
|
+ module: '',
|
|
|
|
+ version: '',
|
|
|
|
+ are: 'MD5',
|
|
|
|
+ url: '',
|
|
|
|
+ check: 1,
|
|
|
|
+ describe: '',
|
|
|
|
+ info: '',
|
|
|
|
+ afterVersion: '',
|
|
|
|
+ waitVersion: '',
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const formData = reactive({
|
|
|
|
+ ...baseForm,
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+const ruleForm = {
|
|
|
|
+ typo: [ruleRequired('请选择升级包类型')],
|
|
|
|
+ name: [ruleRequired('升级包名称不能为空')],
|
|
|
|
+ productId: [ruleRequired('请选择所属产品')],
|
|
|
|
+ module: [ruleRequired('请选择升级包模块')],
|
|
|
|
+ version: [ruleRequired('升级包版本号不能为空')],
|
|
|
|
+ are: [ruleRequired('算法签名不能为空')],
|
|
|
|
+ check: [ruleRequired('升级包是否验证不能为空')],
|
|
|
|
+ // url: [ruleRequired('升级包不能为空')],
|
|
|
|
+ afterVersion: [ruleRequired('待升级版本号不能为空')],
|
|
|
|
+ waitVersion: [ruleRequired('升级后版本号不能为空')],
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const updateImg = (res: any) => {
|
|
|
|
+ console.log(res);
|
|
|
|
+
|
|
|
|
+ if (res.code === 0) {
|
|
|
|
+ ElMessage.success('上传成功');
|
|
|
|
+ } else {
|
|
|
|
+ ElMessage.error(res.message);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+const onSubmit = async () => {
|
|
|
|
+ await formRef.value.validate()
|
|
|
|
+
|
|
|
|
+ const theApi = formData.id ? api.manage.edit : api.manage.add
|
|
|
|
+
|
|
|
|
+ await theApi(formData)
|
|
|
|
+
|
|
|
|
+ ElMessage.success('操作成功')
|
|
|
|
+ resetForm()
|
|
|
|
+ showDialog.value = false
|
|
|
|
+ emit('getList')
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const seletChange = (val: Number) => {
|
|
|
|
+ formData.module='';
|
|
|
|
+ getModuleList(val);
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const getModuleList = (productID: Number) => {
|
|
|
|
+ api.module.getList({productID:productID}).then((res: any) => {
|
|
|
|
+ let productDataList = res.Data
|
|
|
|
+ moduleData.value = productDataList
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const getProductList = () => {
|
|
|
|
+ api.module.getSubList().then((res: any) => {
|
|
|
|
+ let productDataList = res.product
|
|
|
|
+ productData.value = productDataList
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+getProductList()
|
|
|
|
+
|
|
|
|
+const resetForm = async () => {
|
|
|
|
+ Object.assign(formData, { ...baseForm })
|
|
|
|
+ formRef.value && formRef.value.resetFields()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const open = async (row: any) => {
|
|
|
|
+ resetForm()
|
|
|
|
+ showDialog.value = true
|
|
|
|
+ nextTick(() => {
|
|
|
|
+ Object.assign(formData, { ...row })
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+defineExpose({ open })
|
|
|
|
+</script>
|
|
|
|
+<style>
|
|
|
|
+.vertical-form-item {
|
|
|
|
+ display: block;
|
|
|
|
+ margin-bottom: 10px;
|
|
|
|
+ /* 可选,设置间距 */
|
|
|
|
+}
|
|
|
|
+</style>
|