index.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. import { queryPermancePlanTmp } from "../../../../services/api/orders/index"
  2. import { accountid, clientType, getErrorMsg, isEncrypted, marketid, protoHeader, timetample, userid } from "../../../../services/utils"
  3. import { hideLoading, showLoading, showModel, showToast } from "../../../../utils/message/index"
  4. import services from "../../../../services/index"
  5. import { formatDate, getDecimalNum } from "../../../../utils/util"
  6. import { FunCode } from "../../../../constants/enum/funcode"
  7. import { sendMsgToMQ } from "../../../../services/api/common/index"
  8. import { encryptBody } from "../../../../utils/websocket/crypto"
  9. Page({
  10. /**
  11. * 页面的初始数据
  12. */
  13. data: {
  14. /// 底部安全区域
  15. safeBottom: getApp().globalData.safeBottom,
  16. /// 履约模板信息
  17. tmps: <GuangZuan.PermancePlanTmp[]>[],
  18. /// 选中履约模板
  19. tmp: <GuangZuan.PermancePlanTmp>({}),
  20. /// 是否显示
  21. show: false,
  22. /// 是否显示日历
  23. showCal: false,
  24. /// 颜色
  25. tcolors: ['rebeccapurple', 'green', 'hotpink', 'orange', 'darkgoldenrod', 'firebrick', 'forestgreen', 'darksalmon', 'goldenrod', 'khaki', 'rosybrown', 'sandybrown'],
  26. /// 是否开始日期
  27. isstart: true,
  28. /// 开始日期
  29. startdate: formatDate(new Date()),
  30. /// 结束日期
  31. enddate: formatDate(new Date()),
  32. /// 文件上传列表
  33. fileList: [],
  34. /// 上传的文件路径
  35. filePath: '',
  36. /// 商品名称
  37. wrstandname: '',
  38. /// 预售总量
  39. pretotalqty: '0.0',
  40. /// 最小采购单位
  41. minbuyqty: '0.0',
  42. /// 最大采购单位
  43. maxbuyqty: '0.0',
  44. /// 最低成团量
  45. minsuccessqty: '0.0',
  46. /// 采购保证金比例
  47. buymarginvalue: '0.0',
  48. /// 形状
  49. zsshape: '',
  50. /// 颜色
  51. zscolor: '',
  52. /// 净度
  53. zsclarity: '',
  54. /// 尺寸
  55. zssize: '',
  56. /// 抛光
  57. zspolish: '',
  58. /// 对称
  59. zssymmetry: '',
  60. /// 切工
  61. zscut: '',
  62. /// 荧光
  63. zsfluorescence: '',
  64. /// 备注
  65. remark: '',
  66. /// 钻石分类
  67. categorys: [{ text: '单颗裸钻', value: 2 }, { text: '单颗彩钻', value: 5 }],
  68. category: 2,
  69. /// 列头
  70. columns: ['序号', '数量 >=', '价格/(元/克拉)', '操作'],
  71. /// 显示信息
  72. actions: [''],
  73. /// 数据信息
  74. datas: [{ price: 0.0, qty: 0.0, step: 1 }]
  75. },
  76. /**
  77. * 返回上层视图
  78. */
  79. backToParent() {
  80. /// 返回上层视图
  81. wx.navigateBack()
  82. },
  83. /**
  84. * 按钮点击响应事件
  85. */
  86. onButtonClick(e: any) {
  87. switch (e.target.id) {
  88. case 'startdate': /// 开始日期
  89. this.setData({ showCal: true, isstart: true })
  90. break;
  91. case 'enddate': /// 结束日期
  92. this.setData({ showCal: true, isstart: false })
  93. break
  94. case 'submit': /// 申请提交
  95. this.doSubmit()
  96. break
  97. default:
  98. break;
  99. }
  100. },
  101. check(): boolean {
  102. /// 请输入商品名称
  103. if (this.data.wrstandname === '') {
  104. showToast('请输入商品名称')
  105. return false
  106. }
  107. /// 请输入预售总量
  108. if ((this.data.pretotalqty === '') || (Number(this.data.pretotalqty) === 0.0) ) {
  109. showToast('请输入预售总量')
  110. return false
  111. }
  112. /// 请输入最小采购单位
  113. if ((this.data.minbuyqty === '') || (Number(this.data.minbuyqty) === 0.0) ) {
  114. showToast('请输入最小采购单位')
  115. return false
  116. }
  117. /// 请输入最大采购单位
  118. if ((this.data.maxbuyqty === '') || (Number(this.data.maxbuyqty) === 0.0) ) {
  119. showToast('请输入最大采购单位')
  120. return false
  121. }
  122. /// 请输入最低成团量
  123. if ((this.data.minsuccessqty === '') || (Number(this.data.minsuccessqty) === 0.0) ) {
  124. showToast('请输入最低成团量')
  125. return false
  126. }
  127. /// 请输入采购保证金比例
  128. if ((this.data.buymarginvalue === '') || (Number(this.data.buymarginvalue) === 0.0) ) {
  129. showToast('请输入采购保证金比例')
  130. return false
  131. }
  132. return true
  133. },
  134. /// 日期确定触发
  135. onConfirm(e: any) {
  136. this.setData({ showCal: false })
  137. /// 开始日期
  138. if (this.data.isstart) {
  139. this.setData({
  140. startdate: formatDate(e.detail)
  141. })
  142. } else {
  143. this.setData({
  144. enddate: formatDate(e.detail)
  145. })
  146. }
  147. },
  148. /// 日期关闭触发
  149. onCloseCal() {
  150. this.setData({ showCal: false })
  151. },
  152. /// 显示履约模板
  153. showPlanTmps() {
  154. this.setData({ show: true })
  155. },
  156. /// 关闭
  157. onClose() {
  158. this.setData({ show: false })
  159. },
  160. onSelect(e: any) {
  161. /// 默认显示项
  162. const { index } = e.detail;
  163. this.setData({ tmp: this.data.tmps[index], show: false })
  164. },
  165. /// 删除图片
  166. deleteImage(e: any) {
  167. const {index} = e.detail.index
  168. // 上传完成需要更新 fileList
  169. const { fileList = [] } = this.data;
  170. fileList.splice(index, 1)
  171. this.setData({ fileList });
  172. },
  173. onChange(e: any) {
  174. this.setData({ category: e.detail });
  175. },
  176. /// 照片上传
  177. afterRead(e: any) {
  178. const { file } = e.detail;
  179. // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
  180. wx.uploadFile({
  181. url: services.config.uploadUrl,
  182. filePath: file.url,
  183. name: 'file',
  184. formData: { user: 'test' },
  185. success: (res) => {
  186. if (res.statusCode != 200) {
  187. showToast('图片上传失败,原因:'+res.errMsg)
  188. return
  189. }
  190. // 上传完成需要更新 fileList
  191. const { fileList = [] } = this.data;
  192. fileList.push({ ...file, url: res.data});
  193. this.setData({ fileList });
  194. /// 设置文件路径
  195. this.setData({ filePath: JSON.parse(res.data)[0].filePath })
  196. },
  197. });
  198. },
  199. // input输入中
  200. getInputNum (e: any) {
  201. /// 截取两位小数位
  202. let num = getDecimalNum(e.detail)
  203. switch (e.target.id) {
  204. case 'maxbuyqty': /// 最大采购单位
  205. this.setData({ maxbuyqty: num})
  206. break;
  207. case 'pretotalqty': /// 预售总量
  208. this.setData({ pretotalqty: num})
  209. break;
  210. case 'buymarginvalue': /// 采购保证金
  211. this.setData({ buymarginvalue: num})
  212. break;
  213. case 'minbuyqty': /// 最小采购单位
  214. this.setData({ minbuyqty: num})
  215. break;
  216. case 'minsuccessqty': /// 最低成团量
  217. this.setData({ minsuccessqty: num})
  218. break;
  219. default:
  220. break;
  221. }
  222. },
  223. /// 申请提交
  224. doSubmit() {
  225. /// 校验不合规
  226. if (!this.check()) { return }
  227. /// showModel
  228. showModel(() => {
  229. /// showLoading
  230. showLoading(() => {
  231. /// 钻石属性
  232. var list = this.data.datas.map(obj => {
  233. return {
  234. StepIndex: obj.step,
  235. Qty: Number(obj.qty),
  236. Price: Number(obj.price)
  237. }
  238. })
  239. /// 请求参数
  240. const info = JSON.stringify({
  241. Header: protoHeader(FunCode.GZCenterPurchaseApplyReq),
  242. SellUserID: userid(),
  243. SellAccountID: accountid(),
  244. WRStandardName: this.data.wrstandname,
  245. PresaleQty: Number(this.data.pretotalqty),
  246. MinBuyQty: Number(this.data.minbuyqty),
  247. MaxBuyQty: Number(this.data.maxbuyqty),
  248. MinSuccessQty: Number(this.data.minsuccessqty),
  249. StartDate: this.data.startdate,
  250. EndDate: this.data.enddate,
  251. BuyMarginAlgorithm: 1,
  252. BuyMarginValue: this.data.buymarginvalue,
  253. PerformanceTemplateID: this.data.tmp.autoid,
  254. YSZSCategory: this.data.category,
  255. ZSShapeTypeStr: this.data.zsshape,
  256. ZSColorTypeStr: this.data.zscolor,
  257. ZSClarityTypeStr: this.data.zsclarity,
  258. ZSCutTypeStr: this.data.zscut,
  259. ZSSymmetryTypeStr: this.data.zssymmetry,
  260. ZSPolishTypeStr: this.data.zspolish,
  261. ZSFluorescenceTypeStr: this.data.zsfluorescence,
  262. SizeStr: this.data.zssize,
  263. PictureUrls: this.data.filePath,
  264. Remark: this.data.remark,
  265. GZCenterPurchasePriceLists: list,
  266. MarketID: marketid(),
  267. ClientType: clientType(),
  268. ClientSerialNo: timetample().toString()
  269. })
  270. /// 发送请求
  271. sendMsgToMQ({
  272. data: {
  273. data: encryptBody(info),
  274. funCodeReq: FunCode.GZCenterPurchaseApplyReq,
  275. funCodeRsp: FunCode.GZCenterPurchaseApplyRsp,
  276. isEncrypted: isEncrypted()
  277. },
  278. success: (res) => {
  279. /// 解析对象
  280. const data = JSON.parse(res.data.data)
  281. if (data.RetCode != 0) {
  282. hideLoading(() => {}, getErrorMsg(data.RetCode))
  283. return
  284. }
  285. /// 求购发布请求成功
  286. hideLoading(() => {
  287. wx.navigateBack()
  288. }, '提交申请成功', 'success')
  289. },
  290. fail: (emsg) => {
  291. hideLoading(()=>{}, emsg)
  292. }
  293. })
  294. }, '提交申请请求中....')
  295. }, '提示', '确认要提交申请吗?')
  296. },
  297. /// 获取履约模板信息
  298. queryPermancePlanTmp() {
  299. /// showLoading
  300. showLoading(() => {
  301. queryPermancePlanTmp({
  302. // data: {
  303. // marketid: marketid()
  304. // },
  305. success: (res) => {
  306. /// 获取数据
  307. this.setData({
  308. tmps: res.data,
  309. tmp: res.data[0],
  310. actions: res.data.map(obj => { return obj.templatename })
  311. })
  312. },
  313. complete: () => {
  314. /// hideLoading
  315. hideLoading()
  316. }
  317. })
  318. })
  319. },
  320. /**
  321. * 新增价格
  322. */
  323. addPrice() {
  324. this.setData({
  325. datas: this.data.datas.concat([{price: 0.0, qty: 0.0, step: this.data.datas.length+1}])
  326. })
  327. },
  328. /**
  329. * 删除某一行
  330. */
  331. deleteRow(e: any) {
  332. const row = e.target.id
  333. var obj = this.data.datas[row-1]
  334. if (obj.qty === 0.0 && row === '1') {
  335. showToast('第一条数据信息不能删除')
  336. return
  337. }
  338. /// 删除数据
  339. this.data.datas.splice(row-1, 1)
  340. this.setData({ datas: this.data.datas })
  341. },
  342. /**
  343. * 数据变化
  344. */
  345. onRowChanged(e: any) {
  346. /// 获取对应的id
  347. const ids = (<string> e.target.id).split(' ')
  348. const row = <number><unknown>ids[0]
  349. const id = ids[1]
  350. var obj = this.data.datas[row-1]
  351. /// 截取两位小数
  352. let num = getDecimalNum(e.detail)
  353. /// 数据赋值
  354. if (id === "qty") { obj.qty = num } else { obj.price = num }
  355. /// 删除数据
  356. this.data.datas.splice(row-1, 1)
  357. this.data.datas.splice(row-1, 0, obj)
  358. this.setData({ datas: this.data.datas })
  359. },
  360. /**
  361. * 数据变化重新排序
  362. */
  363. onRowSort() {
  364. /// 数据排序
  365. this.setData({
  366. datas: this.data.datas.sort(function(a, b) {
  367. if (a.qty > b.qty) { return 1; }
  368. if (a.qty < b.qty) { return -1; }
  369. return 0;
  370. })
  371. })
  372. },
  373. /**
  374. * 生命周期函数--监听页面加载
  375. */
  376. onLoad() {
  377. /// 获取履约模板信息
  378. this.queryPermancePlanTmp()
  379. },
  380. /**
  381. * 生命周期函数--监听页面初次渲染完成
  382. */
  383. onReady() {
  384. },
  385. /**
  386. * 生命周期函数--监听页面显示
  387. */
  388. onShow() {
  389. },
  390. /**
  391. * 生命周期函数--监听页面隐藏
  392. */
  393. onHide() {
  394. },
  395. /**
  396. * 生命周期函数--监听页面卸载
  397. */
  398. onUnload() {
  399. },
  400. /**
  401. * 页面相关事件处理函数--监听用户下拉动作
  402. */
  403. onPullDownRefresh() {
  404. },
  405. /**
  406. * 页面上拉触底事件的处理函数
  407. */
  408. onReachBottom() {
  409. },
  410. /**
  411. * 用户点击右上角分享
  412. */
  413. onShareAppMessage() {
  414. }
  415. })