WorkflowAdd.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. <template>
  2. <div class="workflow-add container-height">
  3. <Breadcrumb />
  4. <el-form :model="ruleForm" :rules="rules" ref="ruleFormRef" label-position="top">
  5. <div class="padding16 bg_color_fff border_radius_10">
  6. <div class="gap10">
  7. <div class="line_vertical"></div>
  8. <div class="font_size20 bold">文件上传</div>
  9. <div class="gray999 font_size14">支持格式:JSON、YAML、ZIP(最大100MB)</div>
  10. </div>
  11. <div class="mt10">
  12. <!-- 上传 -->
  13. <FileUploader
  14. ref="fileUploader"
  15. :upload-url="uploadUrl"
  16. accept=".json,.yaml,.yml,.zip"
  17. :max-size="100"
  18. :multiple="false"
  19. :auto-upload="true"
  20. :drag="true"
  21. :list-type="picture-card"
  22. v-model="uploadedFiles"
  23. tip="请上传JSON、YAML、ZIP格式的文件,最大100MB"
  24. @success="handleUploadSuccess"
  25. @error="handleUploadError"
  26. @progress="handleUploadProgress"
  27. />
  28. </div>
  29. </div>
  30. <div class="padding16 bg_color_fff border_radius_10 mt10">
  31. <div class="gap10">
  32. <div class="line_vertical"></div>
  33. <div class="font_size20 bold">基本信息</div>
  34. </div>
  35. <div class="mt10">
  36. <el-form-item label="工作流标题" prop="name">
  37. <el-input v-model="ruleForm.name" placeholder="请输入工作流标题" maxlength="50"/>
  38. </el-form-item>
  39. <el-form-item label="工作流类型" prop="name">
  40. <el-input v-model="ruleForm.name" placeholder="请输入工作流标题" maxlength="50" />
  41. </el-form-item>
  42. <el-form-item label="工作流预览">
  43. <FileUploader
  44. ref="fileUploader"
  45. :upload-url="uploadUrl"
  46. :max-size="100"
  47. :multiple="true"
  48. :auto-upload="true"
  49. :list-type="picture-card"
  50. buttonText="添加文件"
  51. v-model="uploadedFiles"
  52. tip="支持批量上传文件,文件格式不限,最多只能上传 5 份文件"
  53. @success="handleUploadSuccess"
  54. @error="handleUploadError"
  55. @progress="handleUploadProgress"
  56. />
  57. </el-form-item>
  58. <el-form-item label="详情">
  59. <BlockNoteEditor v-model="editorContent" :editable="true"/>
  60. </el-form-item>
  61. </div>
  62. </div>
  63. <div class="padding16 bg_color_fff border_radius_10 mt10">
  64. <div class="gap10 mb20">
  65. <div class="line_vertical"></div>
  66. <div class="font_size20 bold">价格设置</div>
  67. </div>
  68. <el-form-item label="付费设置" style="width: 500px">
  69. <div class="gap20 mt10 mb20">
  70. <div class="payType active gap10">
  71. <div class="checkType"></div>
  72. <div>付费(用户需付费后使用)</div>
  73. </div>
  74. <div class="payType gap10">
  75. <div class="checkType"></div>
  76. <div>付费(用户需付费后使用)</div>
  77. </div>
  78. </div>
  79. <el-input v-model="ruleForm.name" placeholder="请输入暴米币数量" maxlength="50" type="number">
  80. <template #append>暴米币</template>
  81. </el-input>
  82. </el-form-item>
  83. </div>
  84. <div class="mt20">
  85. <el-button type="primary" class="font_size16" @click="submitForm">
  86. <el-icon><Promotion /></el-icon>
  87. <span class="ml10">发布工作流</span>
  88. </el-button>
  89. <el-button class="font_size16" @click="goBack">
  90. <el-icon><Close /></el-icon>
  91. <span class="ml10">取消</span>
  92. </el-button>
  93. </div>
  94. </el-form>
  95. </div>
  96. </template>
  97. <script setup>
  98. import { ref, onMounted, reactive } from 'vue'
  99. import { useRoute } from 'vue-router'
  100. import FileUploader from '@/components/FileUploader.vue'
  101. import DGTMessage from '@/utils/message'
  102. import BlockNoteEditor from '@/components/BlockNoteEditor.vue';
  103. const route = useRoute()
  104. // 从路由参数中获取 activePlatform
  105. const activePlatform = ref(route.query.activePlatform || '');
  106. // 上传文件列表
  107. const uploadedFiles = ref([])
  108. const uploadUrl = ref('/api/upload') // 实际项目中替换为真实的上传接口地址
  109. const editorContent = ref(
  110. [
  111. {
  112. type: "paragraph",
  113. content: [{ type: "text", text: "只读模式" }]
  114. },
  115. {
  116. "id": "378ce968-02c2-4856-888b-c35a355aa84b",
  117. "type": "codeBlock",
  118. "props": {
  119. "language": "text"
  120. },
  121. "content": [],
  122. "children": []
  123. }
  124. ]
  125. );
  126. // 表单实例
  127. const ruleFormRef = ref(null)
  128. const ruleForm = reactive({
  129. name: '',
  130. })
  131. // 校验规则
  132. const rules = reactive({
  133. name: [
  134. { required: true, message: '请输入工作流标题', trigger: 'blur' },
  135. ],
  136. })
  137. onMounted(() => {
  138. });
  139. // 提交表单
  140. const submitForm = async () => {
  141. await ruleFormRef.value.validate((valid, fields) => {
  142. console.log(valid, fields)
  143. if (!valid) {
  144. DGTMessage.warning(fields.name[0].message)
  145. return
  146. }
  147. DGTMessage.success('表单提交成功')
  148. })
  149. }
  150. // 上传成功处理
  151. const handleUploadSuccess = (response, rawFile, uploadedFiles) => {
  152. DGTMessage.success('文件上传成功')
  153. console.log('上传成功:', response)
  154. }
  155. // 上传失败处理
  156. const handleUploadError = (error, rawFile, uploadedFiles) => {
  157. DGTMessage.error('文件上传失败')
  158. console.error('上传失败:', error)
  159. }
  160. // 上传进度处理
  161. const handleUploadProgress = (event, file, uploadedFiles) => {
  162. console.log('上传进度:', event.percent)
  163. };
  164. </script>
  165. <style lang="scss">
  166. .workflow-add{
  167. .inputBg{
  168. background: #F5F7FA !important;
  169. }
  170. .el-form-item__label{
  171. font-size: 16px;
  172. color: #333333;
  173. font-weight: 400;
  174. }
  175. .el-input__wrapper {
  176. background: #F5F7FA !important;
  177. .el-input__inner{
  178. height: 44px !important;
  179. line-height: 44px !important;
  180. }
  181. }
  182. .payType{
  183. background: #EAF0FF;
  184. border-radius: 8px 8px 8px 8px;
  185. border: 1px solid transparent;
  186. padding: 20px 16px;
  187. &.active{
  188. background: #EAF0FF;
  189. border-color: $primary-color;
  190. .checkType{
  191. border-color: $primary-color;
  192. }
  193. }
  194. .checkType{
  195. width: 14px;
  196. height: 14px;
  197. border:4px solid transparent;
  198. border-radius: 50%;
  199. background-color: #ffffff;
  200. }
  201. }
  202. }
  203. </style>