artUpload.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561
  1. // pages/user/artUpload/artUpload.js
  2. import WxValidate from "../../../utils/WxValidate";
  3. import {pointNum} from "../../../utils/util"
  4. const app = getApp();
  5. const api = app.api;
  6. Page({
  7. /**
  8. * 页面的初始数据
  9. */
  10. data: {
  11. id:null,
  12. userInfo:null,
  13. avatarImgFile:null,
  14. //作品分类
  15. categoryList:[],
  16. categoryIdPicker:[],
  17. categoryIdPickerValue:[0,0],
  18. categoryName:"",
  19. // 数字艺术品选项
  20. digitalArtworkOptions: {
  21. index: 0,
  22. options: [
  23. {label: '否', value: 0},
  24. {label: '是', value: 2}
  25. ]
  26. },
  27. //作品文件
  28. opusPicFile:[],
  29. maxTime:'', //时间限制
  30. formData:{
  31. avatarId:"", //艺术家头像id
  32. artistName:'', //艺名
  33. author:"", //作者
  34. name:"", //作品名称
  35. categoryId: "", //作品分类ID
  36. material:"", //材质
  37. fixedHeight:"", //固定高
  38. fixedLength:"", //固定长
  39. fixedWidth:"", //固定宽
  40. sizeMark:"", //无尺寸备注
  41. frameLength:"", //画框长
  42. frameWidth:"", //画框宽
  43. heartLength:"", //画芯长
  44. heartWidth:"", //画芯宽
  45. opusPicInfoList:[
  46. ],
  47. sourceType:0, //作品来源 0艺术家平台作品登记,1活动报名
  48. time:"", //作品年份
  49. price:"", //作品价格单位分
  50. version:"", //作品版本
  51. desp:"", //作品描述
  52. types: 0 // 不是数字艺术品
  53. },
  54. rules: {
  55. avatarId:{
  56. required: true,
  57. }, //艺术家头像id
  58. artistName:{
  59. required: true,
  60. }, //艺名
  61. opusPicInfoList:{
  62. required: true,
  63. },
  64. // author:{
  65. // required: true,
  66. // }, //作者
  67. categoryId: {
  68. required: true,
  69. }, //作品分类ID
  70. material:{
  71. required: true,
  72. }, //材质
  73. name:{
  74. required: true,
  75. }, //作品名称
  76. price:{
  77. required: true,
  78. }, //作品价格单位分
  79. sourceType:{
  80. required: true,
  81. }, //作品来源 0艺术家平台作品登记,1活动报名
  82. time:{
  83. required: true,
  84. }, //作品年份
  85. desp:{
  86. required: true,
  87. }, //作品描述
  88. /*
  89. version:{
  90. required: true,
  91. } */
  92. //作品版本
  93. },
  94. messages: {
  95. avatarId:{
  96. required: '请上传艺术家头像',
  97. },
  98. artistName:{
  99. required: '请输入艺术家姓名',
  100. },
  101. opusPicInfoList:{
  102. required: '请上传作品',
  103. },
  104. // author:{
  105. // required: '请填写作者姓名',
  106. // }, //作者
  107. categoryId:{
  108. required: '请选择作品类型',
  109. },
  110. material:{
  111. required: '请输入作品材质',
  112. },
  113. time:{
  114. required: '请选择作品日期',
  115. },
  116. version:{
  117. required: '请输入作品版本',
  118. },
  119. price:{
  120. required: '请输入作品价格',
  121. },
  122. desp:{
  123. required: '请输入作品阐述',
  124. }
  125. },
  126. rulesPM:{
  127. frameLength:{
  128. required: true,
  129. }, //画框长
  130. frameWidth:{
  131. required: true,
  132. number: true
  133. }, //画框宽
  134. heartLength:{
  135. required: true,
  136. number: true
  137. }, //画芯长
  138. heartWidth:{
  139. required: true,
  140. number: true
  141. }, //画芯宽
  142. },
  143. messagesPM:{
  144. frameLength:{
  145. required: '请输入画框长度',
  146. number: '请输入正确的画框长度'
  147. }, //画框长
  148. frameWidth:{
  149. required: '请输入画框宽度',
  150. number: '请输入正确的画框宽度'
  151. }, //画框宽
  152. heartLength:{
  153. required: '请输入画芯长度',
  154. number: '请输入正确的画芯长度'
  155. }, //画芯长
  156. heartWidth:{
  157. required: '请输入画芯宽度',
  158. number: '请输入正确的画芯宽度'
  159. }, //画芯宽
  160. },
  161. rulesLT:{
  162. fixedHeight:{
  163. required: true,
  164. number: true
  165. }, //固定高
  166. fixedLength:{
  167. required: true,
  168. number: true
  169. }, //固定长
  170. fixedWidth:{
  171. required: true,
  172. number: true
  173. }, //固定宽
  174. },
  175. messagesLT:{
  176. fixedHeight:{
  177. required: '请输入作品高',
  178. number: '请输入正确的作品高'
  179. }, //固定高
  180. fixedLength:{
  181. required: '请输入作品长',
  182. number: '请输入正确的作品长'
  183. }, //固定长
  184. fixedWidth:{
  185. required: '请输入作品宽',
  186. number: '请输入正确的作品宽'
  187. }, //固定宽
  188. },
  189. isSubmit:false,
  190. },
  191. /**
  192. * 生命周期函数--监听页面加载
  193. */
  194. onLoad: function (options) {
  195. this.setData({
  196. id:options.id||null
  197. })
  198. const {
  199. rules,
  200. messages,
  201. rulesPM,
  202. messagesPM,
  203. rulesLT,
  204. messagesLT
  205. }
  206. = this.data;
  207. this.WxValidate = new WxValidate(rules, messages);
  208. this.WxValidatePM = new WxValidate(rulesPM, messagesPM);
  209. this.WxValidateLT = new WxValidate(rulesLT, messagesLT);
  210. this.getArtCode().then(res=>{
  211. console.log('getData=======>')
  212. const {id}=this.data;
  213. if(id){
  214. this.getData();
  215. }
  216. });
  217. this.getUserData();
  218. wx.hideShareMenu();
  219. },
  220. /**
  221. * 生命周期函数--监听页面初次渲染完成
  222. */
  223. onReady: function () {
  224. },
  225. /**
  226. * 生命周期函数--监听页面显示
  227. */
  228. onShow: function () {
  229. this.getMaxTime()
  230. },
  231. /**当前日期**/
  232. getMaxTime(){
  233. const date=new Date()
  234. const year = date.getFullYear()
  235. const month = date.getMonth() + 1
  236. const day = date.getDate()
  237. this.setData({
  238. maxTime:`${year}-${month}-${day}`
  239. })
  240. },
  241. getArtCode(){
  242. return app.post(api.findTreeByType,{
  243. "categoryType": 5
  244. }).then(res=>{
  245. const data=res.data[0];
  246. this.setData({
  247. categoryList:data.children,
  248. categoryIdPicker:[data.children,data.children[0].children]
  249. })
  250. return Promise.resolve(true)
  251. })
  252. },
  253. /**编辑作品信息获取数据**/
  254. getData(){
  255. const {opusPicFile,categoryList,categoryIdPickerValue,categoryIdPicker}=this.data;
  256. const {opusPicInfoList}=this.data.formData;
  257. app.post(api.artFindById,{
  258. id:this.data.id
  259. }).then(res=>{
  260. res.data.price = res.data.price/100
  261. if(res.data.opusPicInfoList&&res.data.opusPicInfoList.length!=0){
  262. res.data.opusPicInfoList=[{
  263. fileId:res.data.opusPicInfoList[0].id,
  264. type:'img', // img||video
  265. url:res.data.opusPicInfoList[0].url
  266. }];
  267. opusPicFile.push(res.data.opusPicInfoList[0]);
  268. }
  269. console.info(res.data)
  270. console.info(opusPicFile);
  271. const categoryId=res.data.categoryId;
  272. const categoryName=res.data.categoryName;
  273. categoryList.forEach((category,categoryIndex)=>{
  274. category.children.forEach((item,index)=>{
  275. if(categoryId==item.id){
  276. categoryIdPickerValue[0]=categoryIndex;
  277. categoryIdPickerValue[1]=index;
  278. categoryIdPicker[1]=categoryList[categoryIndex].children;
  279. }
  280. });
  281. });
  282. this.setData({
  283. opusPicFile:opusPicFile,
  284. formData:res.data,
  285. categoryIdPicker,
  286. categoryIdPickerValue,
  287. categoryName
  288. })
  289. })
  290. },
  291. /*获取个人信息*/
  292. getUserData(){
  293. let {
  294. rules,
  295. messages,
  296. }
  297. = this.data;
  298. app.post(api.getBaseInfo).then(res=>{
  299. if(res.data.type == 0 ){
  300. console.log('delete=====================');
  301. delete rules.avatarId
  302. delete rules.artistName
  303. }
  304. this.setData({
  305. userInfo:res.data,
  306. rules:rules
  307. },()=>{
  308. this.WxValidate=null;
  309. this.WxValidate = new WxValidate(rules, messages);
  310. });
  311. });
  312. },
  313. upArtImg(){
  314. app.uploadFile().then(res=>{
  315. console.log(res);
  316. const fileInfo=JSON.parse(res.data);
  317. this.setData({
  318. avatarImgFile:fileInfo,
  319. 'formData.avatarId':fileInfo.id
  320. })
  321. });
  322. },
  323. removeUpArtImg(){
  324. this.setData({
  325. avatarImgFile:null,
  326. 'formData.avatarId':""
  327. })
  328. },
  329. upArtFile(){
  330. const {opusPicFile}=this.data;
  331. const {opusPicInfoList}=this.data.formData;
  332. app.uploadFile().then(res=>{
  333. console.log(res);
  334. const fileInfo=JSON.parse(res.data);
  335. opusPicInfoList.push({
  336. fileId:fileInfo.id,
  337. type:'img' // img||video
  338. });
  339. opusPicFile.push(fileInfo);
  340. this.setData({
  341. opusPicFile:opusPicFile,
  342. 'fromData.opusPicInfoList':opusPicInfoList
  343. })
  344. });
  345. },
  346. removeUpArtFile(e){
  347. const {index}=e.currentTarget.dataset;
  348. const {opusPicFile}=this.data;
  349. const {opusPicInfoList}=this.data.formData;
  350. opusPicFile.splice(index,1);
  351. opusPicInfoList.splice(index,1);
  352. this.setData({
  353. opusPicFile:opusPicFile,
  354. 'fromData.opusPicInfoList':opusPicInfoList
  355. })
  356. },
  357. /** input change value**/
  358. changeInput(e){
  359. console.log(e);
  360. const id = e.currentTarget.id;
  361. const number = e.currentTarget.dataset.number;
  362. let value = e.detail.value;
  363. if(number=='pointNum'){
  364. value=pointNum(value)
  365. }
  366. this.setData({
  367. [id]: value
  368. });
  369. },
  370. changeTime(e){
  371. console.log('作品时间',e);
  372. this.setData({
  373. 'formData.time':e.detail.value
  374. });
  375. },
  376. bindMultiPickerChange: function (e) {
  377. //console.log('picker发送选择改变,携带值为', e.detail.value)
  378. const {value}=e.detail;
  379. //console.log(value);
  380. const {categoryIdPicker}=this.data;
  381. this.setData({
  382. categoryIdPickerValue: value,
  383. 'formData.categoryId':categoryIdPicker[1][value[1]].id,
  384. categoryName:categoryIdPicker[1][value[1]].name
  385. });
  386. },
  387. bindMultiPickerColumnChange: function (e) {
  388. //console.log(e);
  389. const {column,value}=e.detail;
  390. const {categoryIdPicker,categoryList,categoryIdPickerValue}=this.data;
  391. if(column==0){
  392. categoryIdPicker[1]=categoryList[value].children;
  393. //categoryIdPickerValue[1]=0;
  394. this.setData({
  395. //categoryIdPickerValue:categoryIdPickerValue,
  396. categoryIdPicker:categoryIdPicker
  397. });
  398. };
  399. },
  400. /***
  401. * 保存数据
  402. * */
  403. saveData(e){
  404. const {status}=e.currentTarget.dataset;
  405. const {formData,categoryIdPickerValue,isSubmit}=this.data;
  406. //重复提交
  407. if(isSubmit){
  408. return
  409. }
  410. console.info(status)
  411. //状态暂存或者提交
  412. formData.isTemp=(status == 1?true:false);
  413. if (!this.WxValidate.checkForm(formData)) {
  414. const error = this.WxValidate.errorList[0];
  415. wx.showToast({
  416. title: error.msg,
  417. icon: 'none',
  418. duration: 2000
  419. })
  420. return false
  421. }
  422. //平面作品验证
  423. if(categoryIdPickerValue[0]==0){
  424. if (!this.WxValidatePM.checkForm(formData)) {
  425. const error = this.WxValidatePM.errorList[0];
  426. wx.showToast({
  427. title: error.msg,
  428. icon: 'none',
  429. duration: 2000
  430. })
  431. return false
  432. }
  433. }else{//立体作品
  434. if (formData.sizeMark!==""){
  435. }else if(!this.WxValidateLT.checkForm(formData)) {
  436. const error = this.WxValidateLT.errorList[0];
  437. wx.showToast({
  438. title: error.msg,
  439. icon: 'none',
  440. duration: 2000
  441. })
  442. return false
  443. }
  444. }
  445. formData.price = parseInt(formData.price * 100);
  446. this.setData({
  447. isSubmit:true,
  448. });
  449. if(formData.id){
  450. app.post(api.artUpdate,formData).then(res=>{
  451. this.setData({
  452. isSubmit:false,
  453. });
  454. wx.redirectTo({
  455. url:"/pages/user/myArtist/myArtist"
  456. });
  457. }).catch(()=>{
  458. this.setData({
  459. isSubmit:false,
  460. });
  461. })
  462. }else{
  463. app.post(api.artAdd,formData).then(res=>{
  464. this.setData({
  465. isSubmit:false,
  466. });
  467. wx.redirectTo({
  468. url:"/pages/user/myArtist/myArtist"
  469. });
  470. }).catch(()=>{
  471. this.setData({
  472. isSubmit:false,
  473. });
  474. })
  475. }
  476. },
  477. /**
  478. *预览图片
  479. ***/
  480. prevFile() {
  481. const {opusPicFile}=this.data;
  482. app.previewImg(opusPicFile.map(item=>{
  483. return item.url
  484. }));
  485. },
  486. /**
  487. * 生命周期函数--监听页面隐藏
  488. */
  489. onHide: function () {
  490. },
  491. /**
  492. * 生命周期函数--监听页面卸载
  493. */
  494. onUnload: function () {
  495. },
  496. /**
  497. * 页面相关事件处理函数--监听用户下拉动作
  498. */
  499. onPullDownRefresh: function () {
  500. },
  501. /**
  502. * 页面上拉触底事件的处理函数
  503. */
  504. onReachBottom: function () {
  505. },
  506. /**
  507. * 用户点击右上角分享
  508. */
  509. onShareAppMessage: function () {
  510. },
  511. /**
  512. * 数字艺术品选中
  513. */
  514. digitalArtworkChange: function(event) {
  515. const index = parseInt(event.detail.value);
  516. const self = this;
  517. const value = self.data.digitalArtworkOptions.options[index].value;
  518. self.setData({
  519. ['formData.types']: value,
  520. ['digitalArtworkOptions.index']: index
  521. });
  522. }
  523. })