index.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <template>
  2. <view class="container">
  3. <navBar title="绘本生成" :back="true" color="#333333" background="#FFFFFF" />
  4. <view class="topBox">
  5. <view class="left">
  6. <image :src="picBase+'upCamera.png'" mode="heightFix" class="aiIcon" @click="upload"></image>
  7. </view>
  8. <view class="right">
  9. <view class="label1">
  10. 纯AI制作
  11. </view>
  12. <view class="label2">
  13. 创作独一无二的绘本
  14. </view>
  15. </view>
  16. </view>
  17. <view class="mainBox">
  18. <view class="titleBox">
  19. 上传一张故事主角的照片
  20. </view>
  21. <view class="uploadBox">
  22. <view class="tipBox">
  23. <image :src="picBase+'upCamera.png'" mode="heightFix" class="tipIcon" @click="upload"></image>
  24. 绘本内容会根据您所上传的照片进行创作
  25. </view>
  26. <view class="selBox">
  27. <u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" multiple
  28. :maxCount="1">
  29. <view class="myUpArea">
  30. <image :src="picBase+'upCamera.png'" mode="heightFix" class="upIcon">
  31. </image>
  32. 上传图片
  33. </view>
  34. </u-upload>
  35. </view>
  36. </view>
  37. </view>
  38. <view class="parmasBox">
  39. <view class="titleBox">
  40. 故事主角信息
  41. </view>
  42. <view class="inputBox">
  43. <view class="selAndTileBox">
  44. <view class="nickname">
  45. <input type="text" class="nackI" v-model="formData.nickName" placeholder="请输入昵称" />
  46. <image :src="picBase+'arrR2.png'" mode="heightFix" class="arrIcon">
  47. </image>
  48. </view>
  49. <view class="selBtn" @click="show5=true">
  50. 选择主角
  51. </view>
  52. </view>
  53. <view class="otherBox">
  54. <view class="item" @click="show=true">
  55. <input type="text" class="nackI" disabled v-model="formData.sex" placeholder="选择性别" />
  56. <image :src="picBase+'arrR2.png'" mode="heightFix" class="arrIcon">
  57. </image>
  58. </view>
  59. <view class="item" @click="show2=true">
  60. <input type="text" class="nackI" disabled v-model="formData.age" placeholder="选择年龄" />
  61. <image :src="picBase+'arrR2.png'" mode="heightFix" class="arrIcon">
  62. </image>
  63. </view>
  64. <view class="item" @click="show3=true">
  65. <input type="text" class="nackI" disabled v-model="formData.star" placeholder="选择星座" />
  66. <image :src="picBase+'arrR2.png'" mode="heightFix" class="arrIcon">
  67. </image>
  68. </view>
  69. <view class="item" @click="show4=true">
  70. <input type="text" class="nackI" disabled v-model="formData.class" placeholder="选择年级" />
  71. <image :src="picBase+'arrR2.png'" mode="heightFix" class="arrIcon">
  72. </image>
  73. </view>
  74. </view>
  75. </view>
  76. </view>
  77. <view class="pos">
  78. </view>
  79. <view class="btnBox">
  80. <view class="left">
  81. <image :src="picBase+'kefu.png'" mode="heightFix" class="kfIcon">
  82. </image>
  83. 客服
  84. </view>
  85. <view class="right" @click="gen">
  86. <view class="top">
  87. 立即生成
  88. </view>
  89. <view class="bot">
  90. 绘本生成剩余次数:8次
  91. </view>
  92. </view>
  93. </view>
  94. <u-picker :show="show" title="性别选择" aColor="#007AFF" :columns="columns" confirmColor="#007AFF"
  95. @confirm="confirm1" @cancel="show=false"></u-picker>
  96. <u-picker :show="show2" title="年龄选择" keyName="label" aColor="#007AFF" :columns="columns2" confirmColor="#007AFF"
  97. @confirm="confirm2" @cancel="show2=false"></u-picker>
  98. <u-picker :show="show3" title="星座选择" aColor="#007AFF" :columns="columns3" confirmColor="#007AFF"
  99. @confirm="confirm3" @cancel="show3=false"></u-picker>
  100. <u-picker :show="show4" title="班级选择" aColor="#007AFF" :columns="columns4" confirmColor="#007AFF"
  101. @confirm="confirm4" @cancel="show4=false"></u-picker>
  102. <u-picker keyName="name" :show="show5" title="选择主角" aColor="#007AFF" :columns="columns5" confirmColor="#007AFF"
  103. @confirm="confirm5" @cancel="show5=false"></u-picker>
  104. </view>
  105. </template>
  106. <script>
  107. // import navBar from '@/components/navBar/index.vue'
  108. import uploadUrl from '@/common/config.js'
  109. import {
  110. getRoleparmas,
  111. postTask
  112. } from '@/api/index/index.js'
  113. export default {
  114. // components: {
  115. // navBar
  116. // },
  117. data() {
  118. return {
  119. // roleList:[],
  120. picBase: this.$picBase2,
  121. fileList1: [],
  122. formData: {
  123. nickName: '',
  124. sex: '',
  125. age: '',
  126. star: '',
  127. class: ''
  128. },
  129. show: false,
  130. columns: [
  131. ['男孩', '女孩']
  132. ],
  133. show2: false,
  134. columns2: [
  135. [
  136. '1岁',
  137. '2岁'
  138. ]
  139. ],
  140. show3: false,
  141. columns3: [
  142. ['白羊座', '金牛座', '双子座 ', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座']
  143. ],
  144. show4: false,
  145. columns4: [
  146. ['蒙大一', '蒙大二', '蒙小一', '蒙小二', '蒙小三']
  147. ],
  148. show5: false,
  149. columns5: [
  150. ],
  151. roleId: -1
  152. }
  153. },
  154. onLoad() {
  155. this.getRoleparmas()
  156. },
  157. methods: {
  158. async gen() {
  159. // console.log('fileList1',this.fileList1[0].url);
  160. // return
  161. if (this.fileList1.length == 0) {
  162. return this.$toast('请上传图片')
  163. }
  164. if (!this.formData.nickName) {
  165. return this.$toast('请输入昵称')
  166. }
  167. if (!this.formData.sex) {
  168. return this.$toast('请选择性别')
  169. }
  170. if (!this.formData.age) {
  171. return this.$toast('请选择年龄')
  172. }
  173. if (!this.formData.star) {
  174. return this.$toast('请选择星座')
  175. }
  176. if (!this.formData.class) {
  177. return this.$toast('请选择班级')
  178. }
  179. let p = {}
  180. if (this.roleId != -1) {
  181. p = {
  182. roleId: this.roleId,
  183. image: this.fileList1[0].url
  184. }
  185. } else {
  186. p = {
  187. image: this.fileList1[0].url,
  188. name: this.formData.nickName,
  189. sex: this.formData.sex,
  190. age: this.formData.age.slice(0, 1),
  191. star: this.formData.star,
  192. level: this.formData.class,
  193. }
  194. }
  195. let res1 = await postTask(p)
  196. console.log('生成任务提交返回值--------2', res1);
  197. if (res1.code == 0) {
  198. this.$toast('生成任务提交成功')
  199. setTimeout(() => {
  200. uni.navigateTo({
  201. url: '/pages/index/genRes/index?taskId=' + res1.data.id
  202. })
  203. }, 1500)
  204. } else {
  205. this.$toast(res1.message)
  206. }
  207. },
  208. async getRoleparmas() {
  209. let res1 = await getRoleparmas()
  210. console.log('角色列表返回值--------2', res1);
  211. if (res1.code == 0) {
  212. this.columns5[0] = res1.data.data
  213. // this.chargeList=[]
  214. } else {
  215. this.$toast(res1.message)
  216. }
  217. },
  218. confirm1(e) {
  219. console.log('e', e);
  220. this.formData.sex = e.value[0]
  221. this.show = false
  222. },
  223. confirm2(e) {
  224. console.log('e', e);
  225. this.formData.age = e.value[0]
  226. this.show2 = false
  227. },
  228. confirm3(e) {
  229. console.log('e', e);
  230. this.formData.star = e.value[0]
  231. this.show3 = false
  232. },
  233. confirm4(e) {
  234. console.log('e', e);
  235. this.formData.class = e.value[0]
  236. this.show4 = false
  237. },
  238. confirm5(e) {
  239. console.log('e-----5', e.indexs[0], e.value[0]);
  240. this.formData.class = e.value[0].level
  241. this.formData.nickName = e.value[0].name
  242. this.formData.sex = e.value[0].sex
  243. this.formData.star = e.value[0].star
  244. this.formData.age = e.value[0].age + '岁'
  245. this.roleId = e.value[0].id
  246. this.show5 = false
  247. },
  248. // 删除图片
  249. deletePic(event) {
  250. this[`fileList${event.name}`].splice(event.index, 1)
  251. },
  252. // 新增图片
  253. async afterRead(event) {
  254. // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
  255. let lists = [].concat(event.file)
  256. let fileListLen = this[`fileList${event.name}`].length
  257. lists.map((item) => {
  258. this[`fileList${event.name}`].push({
  259. ...item,
  260. status: 'uploading',
  261. message: '上传中'
  262. })
  263. })
  264. for (let i = 0; i < lists.length; i++) {
  265. const result = await this.uploadFilePromise(lists[i].url)
  266. let item = this[`fileList${event.name}`][fileListLen]
  267. this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
  268. status: 'success',
  269. message: '',
  270. url: result
  271. }))
  272. fileListLen++
  273. }
  274. },
  275. uploadFilePromise(url) {
  276. return new Promise((resolve, reject) => {
  277. let a = uni.uploadFile({
  278. // url: 'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址
  279. url: uploadUrl.baseUrl + '/api/avatar/upload', // 仅为示例,非真实的接口地址
  280. filePath: url,
  281. name: 'file',
  282. header: {
  283. 'Content-Type': 'multipart/form-data',
  284. 'Authorization': uni.getStorageSync('token')
  285. },
  286. formData: {
  287. user: 'test',
  288. 'tag': 'lamp',
  289. },
  290. success: (res) => {
  291. console.log('uploadFilePromise返回值', res);
  292. setTimeout(() => {
  293. resolve(JSON.parse(res.data).data.url)
  294. }, 1000)
  295. }
  296. });
  297. })
  298. },
  299. }
  300. }
  301. </script>
  302. <style lang="scss" scoped>
  303. @import "./index.scss";
  304. </style>