popupForm.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <template>
  2. <!-- 对话框表单 -->
  3. <el-dialog
  4. custom-class="ba-operate-dialog"
  5. :close-on-click-modal="false"
  6. :model-value="baTable.form.operate ? true : false"
  7. @close="baTable.toggleForm"
  8. >
  9. <template #header>
  10. <div class="title" v-drag="['.ba-operate-dialog', '.el-dialog__header']" v-zoom="'.ba-operate-dialog'">
  11. {{ baTable.form.operate ? baTable.form.operate == 'edit' ? '编辑' : '添加' : '无标题' }}
  12. </div>
  13. </template>
  14. <el-scrollbar v-loading="baTable.form.loading" class="ba-table-form-scrollbar">
  15. <div
  16. class="ba-operate-form"
  17. :class="'ba-' + baTable.form.operate + '-form'"
  18. :style="'width: calc(100% - ' + baTable.form.labelWidth! / 2 + 'px)'"
  19. >
  20. <el-form
  21. ref="formRef"
  22. @keyup.enter="baTable.onSubmit(formRef)"
  23. :model="baTable.form.items"
  24. label-position="right"
  25. :label-width="baTable.form.labelWidth + 'px'"
  26. :rules="rules"
  27. v-if="!baTable.form.loading"
  28. >
  29. <el-form-item prop="productId" label="产品">
  30. <el-select v-model="baTable.form.items!.productId" style="width: 100%">
  31. <el-option v-for="item in productList" :label="item.productName" :value="item.id"></el-option>
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item prop="versionName" label="版本名称">
  35. <el-input v-model="baTable.form.items!.versionName"></el-input>
  36. </el-form-item>
  37. <el-form-item prop="versionCode" label="版本号">
  38. <el-input v-model="baTable.form.items!.versionCode"></el-input>
  39. </el-form-item>
  40. <el-row>
  41. <el-col :span="12">
  42. <el-form-item prop="upgradeType" label="版本类型">
  43. <el-select style="width: 100%" v-model="baTable.form.items!.upgradeType">
  44. <el-option label="固件" :value="0"></el-option>
  45. <el-option label="大屏" :value="1"></el-option>
  46. <el-option label="APP" :value="2"></el-option>
  47. </el-select>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item prop="osType" label="操作系统">
  52. <el-select style="width: 100%" v-model="baTable.form.items!.osType">
  53. <el-option label="Android" :value="0"></el-option>
  54. <el-option label="IOS" :value="1"></el-option>
  55. <el-option label="Harmony" :value="2"></el-option>
  56. </el-select>
  57. </el-form-item>
  58. </el-col>
  59. </el-row>
  60. <el-row>
  61. <el-col :span="12">
  62. <el-form-item prop="isForce" label="强制升级">
  63. <el-select style="width: 100%" v-model="baTable.form.items!.isForce">
  64. <el-option label="否" :value="0"></el-option>
  65. <el-option label="是" :value="1"></el-option>
  66. </el-select>
  67. </el-form-item>
  68. </el-col>
  69. <!-- <el-col :span="12">-->
  70. <!-- <el-form-item prop="isRelease" label="是否发布">-->
  71. <!-- <el-select style="width: 100%" v-model="baTable.form.items!.isRelease">-->
  72. <!-- <el-option label="否" :value="0"></el-option>-->
  73. <!-- <el-option label="是" :value="1"></el-option>-->
  74. <!-- </el-select>-->
  75. <!-- </el-form-item>-->
  76. <!-- </el-col>-->
  77. </el-row>
  78. <el-form-item prop="upgradeDescription" label="更新说明">
  79. <el-input type="textarea" v-model="baTable.form.items!.upgradeDescription"></el-input>
  80. </el-form-item>
  81. <el-form-item prop="upgradePackageUrl" label="升级包">
  82. <ossUploadItem v-model:data="baTable.form.items!.upgradePackageUrl" @success="uploadSuccess"></ossUploadItem>
  83. <div style="font-size: 10px;color: #92969a">
  84. 仅限zip文件
  85. </div>
  86. </el-form-item>
  87. </el-form>
  88. </div>
  89. </el-scrollbar>
  90. <template #footer>
  91. <div :style="'width: calc(100% - ' + baTable.form.labelWidth! / 1.8 + 'px)'">
  92. <el-button @click="baTable.toggleForm('')">取消</el-button>
  93. <el-button v-blur :loading="baTable.form.submitLoading" @click="baTable.onSubmit(formRef)"
  94. type="primary">
  95. {{ baTable.form.operateIds && baTable.form.operateIds.length > 1 ? '保存并编辑下一项' : '保存' }}
  96. </el-button>
  97. </div>
  98. </template>
  99. </el-dialog>
  100. </template>
  101. <script setup lang="ts">
  102. import {ref, reactive, inject, onMounted, watch} from 'vue'
  103. import type baTableClass from '/@/utils/baTable'
  104. import {validatorInteger} from '/@/utils/validate'
  105. import type {ElForm, FormItemRule} from 'element-plus'
  106. import FormItem from '/@/components/formItem/index.vue'
  107. import {getOrgTree, getEmployees} from '/@/api/backend/auth/account'
  108. import {authGroup, product, sysConfig} from '/@/api/controllerUrls'
  109. import editor from '/@/components/editor/index.vue'
  110. import request from "/@/api/request";
  111. import {ElNotification} from "element-plus/es";
  112. import {document} from '/@/api/controllerUrls'
  113. import ossUploadItem from '/@/components/pictureUpload/ossUploadView.vue'
  114. const formRef = ref<InstanceType<typeof ElForm>>()
  115. const baTable = inject('baTable') as baTableClass
  116. watch(()=>baTable.form.operate,(n)=>{
  117. if(n){
  118. getInitData()
  119. }
  120. })
  121. let productList = ref([])
  122. function getInitData() {
  123. request.index(product, undefined, 'index').then(res => {
  124. productList.value = res.data.list
  125. })
  126. }
  127. function uploadSuccess(file:any){
  128. baTable.form.items!.upgradePackageSize = file.size
  129. baTable.form.items!.extensionName = file.fileType
  130. }
  131. const rules: Partial<Record<string, FormItemRule[]>> = reactive({
  132. productId: [
  133. {
  134. required: true,
  135. message: '请选择产品',
  136. trigger: 'blur',
  137. },
  138. ],
  139. versionName: [
  140. {
  141. required: true,
  142. message: '请输入版本名称',
  143. trigger: 'blur',
  144. },
  145. ],
  146. productId: [
  147. {
  148. required: true,
  149. message: '请选择产品',
  150. trigger: 'blur',
  151. },
  152. ],
  153. upgradeType: [
  154. {
  155. required: true,
  156. message: '请选择版本类型',
  157. trigger: 'blur',
  158. },
  159. ],
  160. osType: [
  161. {
  162. required: true,
  163. message: '请选择操作系统类型',
  164. trigger: 'blur',
  165. },
  166. ],
  167. versionCode: [
  168. {
  169. required: true,
  170. message: '请输入版本号',
  171. trigger: 'blur',
  172. },
  173. {validator: validatorInteger, trigger: 'blur'}
  174. ],
  175. upgradeDescription: [
  176. {
  177. required: true,
  178. message: '请输入升级说明',
  179. trigger: 'blur',
  180. },
  181. ],
  182. upgradePackageUrl: [
  183. {
  184. required: true,
  185. message: '请上传升级包',
  186. trigger: 'blur',
  187. },
  188. ],
  189. isForce: [
  190. {
  191. required: true,
  192. message: '请选择是否强制升级',
  193. trigger: 'blur',
  194. },
  195. ],
  196. // isRelease: [
  197. // {
  198. // required: true,
  199. // message: '请选择是否发布',
  200. // trigger: 'blur',
  201. // },
  202. // ],
  203. })
  204. </script>
  205. <style scoped lang="scss">
  206. .avatar-uploader {
  207. display: flex;
  208. align-items: center;
  209. justify-content: center;
  210. position: relative;
  211. border-radius: var(--el-border-radius-small);
  212. box-shadow: var(--el-box-shadow-light);
  213. border: 1px dashed var(--color-sub-1);
  214. cursor: pointer;
  215. overflow: hidden;
  216. width: 110px;
  217. height: 110px;
  218. }
  219. .avatar-uploader:hover {
  220. border-color: var(--color-primary);
  221. }
  222. .avatar {
  223. width: 110px;
  224. height: 110px;
  225. display: block;
  226. }
  227. .image-slot {
  228. display: flex;
  229. align-items: center;
  230. justify-content: center;
  231. height: 100%;
  232. }
  233. </style>