From 5371ec60494a8ab5949fb5481e439e6c87ef5441 Mon Sep 17 00:00:00 2001 From: Houjie <714924425@qq.com> Date: 星期四, 11 九月 2025 10:15:45 +0800 Subject: [PATCH] APP版本管理 --- src/views/base/modules/update/BaseUpdateModal.vue | 61 ++++++++ yarn.lock | 51 +++++++ src/views/base/BaseUpdateList.vue | 178 +++++++++++++++++++++++++ src/views/base/modules/update/BaseUpdateForm.vue | 113 ++++++++++++++++ 4 files changed, 403 insertions(+), 0 deletions(-) diff --git a/src/views/base/BaseUpdateList.vue b/src/views/base/BaseUpdateList.vue new file mode 100644 index 0000000..ffacdad --- /dev/null +++ b/src/views/base/BaseUpdateList.vue @@ -0,0 +1,178 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <!-- 楂樼骇鏌ヨ鍖哄煙 --> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + class="j-table-force-nowrap" + @change="handleTableChange"> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text,record"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleDetail(record)">璇︽儏</a> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + + <base-update-modal ref="modalForm" @ok="modalFormOk"></base-update-modal> + </a-card> +</template> + +<script> + +import '@/assets/less/TableExpand.less' +import { mixinDevice } from '@/utils/mixin' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import BaseUpdateModal from './modules/update/BaseUpdateModal.vue' + +export default { + name: 'BaseUpdateList', + mixins:[JeecgListMixin, mixinDevice], + components: { + BaseUpdateModal + }, + data () { + return { + description: 'app鏇存柊绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'鐗堟湰鍙�', + align:"center", + dataIndex: 'appVersion' + }, + { + title:'鐗堟湰鍚嶇О', + align:"center", + dataIndex: 'appVersionName' + }, + + { + title:'鏂囦欢', + align:"center", + dataIndex: 'packageFile', + scopedSlots: {customRender: 'fileSlot'} + }, + // { + // title:'App涓嬭浇鍦板潃', + // align:"center", + // dataIndex: 'updateUrl' + // }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: "/base/momBaseUpdate/list", + delete: "/base/momBaseUpdate/delete", + deleteBatch: "/base/momBaseUpdate/deleteBatch", + exportXlsUrl: "/base/momBaseUpdate/exportXls", + importExcelUrl: "base/momBaseUpdate/importExcel", + + }, + dictOptions:{}, + superFieldList:[], + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + initDictConfig(){ + }, + getSuperFieldList(){ + let fieldList=[]; + fieldList.push({type:'string',value:'appVersion',text:'鐗堟湰鍙�',dictCode:''}) + fieldList.push({type:'string',value:'appVersionName',text:'鐗堟湰鍚嶇О',dictCode:''}) + fieldList.push({type:'string',value:'appVersionName',text:'鐗堟湰鍚嶇О',dictCode:''}) + fieldList.push({type:'string',value:'updateUrl',text:'App涓嬭浇鍦板潃',dictCode:''}) + this.superFieldList = fieldList + } + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/base/modules/update/BaseUpdateForm.vue b/src/views/base/modules/update/BaseUpdateForm.vue new file mode 100644 index 0000000..76230c4 --- /dev/null +++ b/src/views/base/modules/update/BaseUpdateForm.vue @@ -0,0 +1,113 @@ +<template> + <a-spin :spinning="confirmLoading"> + <j-form-container :disabled="formDisabled"> + <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> + <a-row> + <a-col :span="24"> + <a-form-model-item label="鐗堟湰鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="appVersion"> + <a-input v-model="model.appVersion" placeholder="璇疯緭鍏ョ増鏈彿" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鐗堟湰鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="appVersionName"> + <a-input v-model="model.appVersionName" placeholder="璇疯緭鍏ョ増鏈悕绉�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="24"> + <a-form-model-item label="鏂囦欢" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="file"> + <j-upload v-model="model.packageFile"></j-upload> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </j-form-container> + </a-spin> +</template> + +<script> + +import { httpAction } from '@/api/manage' + +export default { + name: 'BaseUpdateForm', + components: { + }, + props: { + //琛ㄥ崟绂佺敤 + disabled: { + type: Boolean, + default: false, + required: false + } + }, + data () { + return { + model:{ + }, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + confirmLoading: false, + validatorRules: { + }, + url: { + add: "/base/momBaseUpdate/add", + edit: "/base/momBaseUpdate/edit", + queryById: "/base/momBaseUpdate/queryById" + } + } + }, + computed: { + formDisabled(){ + return this.disabled + }, + }, + created () { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)); + }, + methods: { + add () { + this.edit(this.modelDefault); + }, + edit (record) { + this.model = Object.assign({}, record); + this.visible = true; + }, + submitForm () { + const that = this; + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true; + let httpurl = ''; + let method = ''; + if(!this.model.id){ + httpurl+=this.url.add; + method = 'post'; + }else{ + httpurl+=this.url.edit; + method = 'put'; + } + httpAction(httpurl,this.model,method).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.$emit('ok'); + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + }) + } + + }) + }, + } + } +</script> \ No newline at end of file diff --git a/src/views/base/modules/update/BaseUpdateModal.vue b/src/views/base/modules/update/BaseUpdateModal.vue new file mode 100644 index 0000000..229a6d5 --- /dev/null +++ b/src/views/base/modules/update/BaseUpdateModal.vue @@ -0,0 +1,61 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + switchFullscreen + @ok="handleOk" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + @cancel="handleCancel" + cancelText="鍏抽棴"> + <mom-base-update-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></mom-base-update-form> + </j-modal> +</template> + +<script> + + import MomBaseUpdateForm from './BaseUpdateForm.vue' + + export default { + name: 'MomBaseUpdateModal', + components: { + MomBaseUpdateForm + }, + data () { + return { + title:'', + width:800, + visible: false, + disableSubmit: false + } + }, + methods: { + add () { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.add(); + }) + }, + edit (record) { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.edit(record); + }) + }, + close () { + this.$emit('close'); + this.visible = false; + }, + handleOk () { + this.$refs.realForm.submitForm(); + }, + submitCallback(){ + this.$emit('ok'); + this.visible = false; + }, + handleCancel () { + this.close() + } + } + } +</script> \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 880d6b2..e860764 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4552,6 +4552,11 @@ miller-rabin "^4.0.0" randombytes "^2.0.0" +dijkstrajs@^1.0.1: + version "1.0.3" + resolved "https://registry.npmmirror.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" + integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== + dir-glob@^2.0.0, dir-glob@^2.2.2: version "2.2.2" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" @@ -8835,6 +8840,11 @@ resolved "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + point-at-length@^1.0.2: version "1.1.0" resolved "https://registry.npmjs.org/point-at-length/-/point-at-length-1.1.0.tgz#0ad72ebd0980d7f5a1ab12296c055f9eb6b30e57" @@ -9504,6 +9514,11 @@ renderkid "^2.0.1" utila "~0.4" +print-js@^1.6.0: + version "1.6.0" + resolved "https://registry.npmmirror.com/print-js/-/print-js-1.6.0.tgz#692b046cf31992b46afa6c6d8a9db1c69d431d1f" + integrity sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg== + private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -9626,6 +9641,25 @@ lodash "^4.17.11" single-spa "^5.9.2" tslib "^1.10.0" + +qrcode.js@^0.0.1: + version "0.0.1" + resolved "https://registry.npmmirror.com/qrcode.js/-/qrcode.js-0.0.1.tgz#d9ec39a66486a4f405d3be32bc0250d17ad012ee" + integrity sha512-EpHuKYzjYH/+SQtAlo4NYe3wpsYzKadKa154Ch163K+jrUlz6pVInWgJlsj5d1dxngYEjuqnClfzutL8Z9rqcg== + +qrcode.vue@^3.6.0: + version "3.6.0" + resolved "https://registry.npmmirror.com/qrcode.vue/-/qrcode.vue-3.6.0.tgz#d940fe96712922232aa19892bdd68793e62c73e7" + integrity sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg== + +qrcode@^1.5.4: + version "1.5.4" + resolved "https://registry.npmmirror.com/qrcode/-/qrcode-1.5.4.tgz#5cb81d86eb57c675febb08cf007fff963405da88" + integrity sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg== + dependencies: + dijkstrajs "^1.0.1" + pngjs "^5.0.0" + yargs "^15.3.1" qs@6.7.0: version "6.7.0" @@ -12407,6 +12441,23 @@ y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^8.0.2: version "8.0.2" resolved "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" -- Gitblit v1.9.3