add.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. <template>
  2. <view>
  3. <view class="add_page">
  4. <u-navbar class="nav-bar" title="商品入库" :autoBack="true" :placeholder="true" v-hideNav>
  5. <view class="u-nav-slot" slot="right">
  6. <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
  7. <u-checkbox label="连续入库" name="continuous"></u-checkbox>
  8. </u-checkbox-group>
  9. </view>
  10. </u-navbar>
  11. <view class="form_list">
  12. <u--form labelPosition="top" :model="formData" :rules="rules" ref="addForm" labelWidth="100%">
  13. <u-form-item borderBottom class="u-form-item-col">
  14. <u--textarea v-model="recognitionContent" placeholder='品牌:浪琴
  15. 来源:【麒麟】私信-杰3-3
  16. 实价:6500
  17. 型号:L2.257.5.89.7
  18. 编码:52356065
  19. 日期:2021.11.09
  20. 备注:全套
  21. 付款方式:线上' confirmType="done" height="170" :maxlength="-1" @blur='handleRecognition'>
  22. </u--textarea>
  23. <u-button text="粘贴识别" @click="handleRecognition"></u-button>
  24. </u-form-item>
  25. <u-form-item label="商品图片" required prop="imgs" borderBottom>
  26. <u-upload :fileList="goodPicFileList" @afterRead="afterReadGoodPic" @delete="deleteGoodPic"
  27. name="3" multiple :maxCount="9" :previewFullImage="true"></u-upload>
  28. </u-form-item>
  29. <u-form-item label="商品描述(详细的描述让用户更好的了解您的产品)" required prop="desc" borderBottom>
  30. <u--textarea v-model="formData.desc" clearable placeholder="95新 WHZ19219H
  31. CHANEL香奈儿链条单肩包
  32. 21开 牛皮 尺寸25 4 15
  33. 配件中溯卡" count autoHeight maxlength="250" height="100" confirmType="done"></u--textarea>
  34. </u-form-item>
  35. <u-form-item label="商品分类" required prop="type" borderBottom>
  36. <TabSelect :tabList="typeList" @tabChange="handleTabChangeType" :colNum="4" mode="single">
  37. </TabSelect>
  38. </u-form-item>
  39. <u-form-item label="品牌" required prop="brand" class="u-form-item-row" borderBottom>
  40. <FormSelectToPage :val="formData.brand" :url="brandToUrl" @handleClear="clear('brand')">
  41. </FormSelectToPage>
  42. </u-form-item>
  43. <u-form-item label="系列" class="u-form-item-row" borderBottom>
  44. <u--input v-model="formData.series" placeholder="请输入" clearable border="none"></u--input>
  45. </u-form-item>
  46. <u-form-item label="型号" class="u-form-item-row" borderBottom>
  47. <u--input v-model="formData.model" placeholder="请输入" clearable border="none"></u--input>
  48. </u-form-item>
  49. <u-form-item label="机芯类型" class="u-form-item-row" borderBottom>
  50. <u--input v-model="formData.brand" placeholder="请输入" clearable border="none"></u--input>
  51. </u-form-item>
  52. <u-form-item label="表壳材质" class="u-form-item-row" borderBottom>
  53. <u--input v-model="formData.caseMaterial" placeholder="请输入" clearable border="none"></u--input>
  54. </u-form-item>
  55. <u-form-item label="表盘直径" class="u-form-item-row" borderBottom>
  56. <u--input v-model="formData.dialDiameter" placeholder="请输入" clearable border="none"></u--input>
  57. </u-form-item>
  58. <u-form-item label="材质" class="u-form-item-row" borderBottom>
  59. <u--input v-model="formData.material" placeholder="请输入" clearable border="none"></u--input>
  60. </u-form-item>
  61. <u-form-item label="尺寸" class="u-form-item-row" borderBottom>
  62. <u--input v-model="formData.size" placeholder="请输入" clearable border="none"></u--input>
  63. </u-form-item>
  64. <u-form-item label="尺码" class="u-form-item-row" borderBottom>
  65. <u--input v-model="formData.yardage" placeholder="请输入" clearable border="none"></u--input>
  66. </u-form-item>
  67. <u-form-item label="官方指导价" class="u-form-item-row" borderBottom>
  68. <u--input v-model="formData.price" placeholder="请输入" clearable border="none"></u--input>
  69. </u-form-item>
  70. <u-form-item label="商品成色" required prop="productCondition" borderBottom>
  71. <TabSelect :tabList="productConditionList" :colNum="2" mode="single"
  72. @tabChange="handleTabChangeProductCondition"></TabSelect>
  73. </u-form-item>
  74. <u-form-item label="细节图" borderBottom>
  75. <u-upload :fileList="detailVideoFileList" @afterRead="afterReadDeatilVideo"
  76. @delete="deleteDetailVideo" name="2" multiple :maxCount="10" accept="video"></u-upload>
  77. <u-upload :fileList="detailPicFileList" @afterRead="afterReadDetailPic"
  78. @delete="deleteDetailPic" name="1" multiple :maxCount="10"></u-upload>
  79. </u-form-item>
  80. <u-form-item label="商品标题" borderBottom>
  81. <u--textarea v-model="formData.title" clearable :placeholder="titlePlaceholder" count autoHeight
  82. maxlength="50" height="100" confirmType="done"></u--textarea>
  83. </u-form-item>
  84. <u-form-item label="商品货号" class="u-form-item-row" borderBottom>
  85. <u--input v-model="formData.productNo" placeholder="请输入" clearable border="none"></u--input>
  86. </u-form-item>
  87. <u-form-item label="商品属性" required prop="productAttribute" borderBottom>
  88. <TabSelect :tabList="productAttributeList" :colNum="4" mode="single"
  89. @tabChange="handleTabChangeProductAttribute"></TabSelect>
  90. </u-form-item>
  91. <u-form-item label="库存数量" required prop="stock" class="u-form-item-row" borderBottom>
  92. <u--input v-model="formData.stock" placeholder="请输入" clearable border="none"></u--input>
  93. </u-form-item>
  94. <u-form-item label="总成本价" class="u-form-item-row" borderBottom>
  95. <u--input v-model="formData.costPrice" placeholder="请输入" clearable border="none"></u--input>
  96. </u-form-item>
  97. <u-form-item label="同行价格" class="u-form-item-row" borderBottom>
  98. <u--input v-model="formData.samePrice" placeholder="请输入" clearable border="none"></u--input>
  99. </u-form-item>
  100. <u-form-item label="代理价格" class="u-form-item-row" borderBottom>
  101. <u--input v-model="formData.agentPrice" placeholder="请输入" clearable border="none"></u--input>
  102. </u-form-item>
  103. <u-form-item label="销售价格" class="u-form-item-row" borderBottom>
  104. <u--input v-model="formData.salePrice" placeholder="请输入" clearable border="none"></u--input>
  105. </u-form-item>
  106. <u-form-item label="商品位置" class="u-form-item-row" borderBottom>
  107. <u--input v-model="formData.productPosition" placeholder="请输入" clearable
  108. border="none"></u--input>
  109. </u-form-item>
  110. <u-form-item label="手表年份" class="u-form-item-row" borderBottom>
  111. <u--input v-model="formData.watchYear" placeholder="请输入" clearable border="none"></u--input>
  112. </u-form-item>
  113. <u-form-item label="鉴定人员" class="u-form-item-row" borderBottom>
  114. <u--input v-model="formData.identifyingPerson" placeholder="请输入" clearable
  115. border="none"></u--input>
  116. </u-form-item>
  117. <u-form-item label="回收类型" borderBottom>
  118. <TabSelect :tabList="recycleTypeList" :colNum="4" mode="single"
  119. @tabChange="handleTabChangeRecycleType">
  120. </TabSelect>
  121. </u-form-item>
  122. <u-form-item label="回收人员" class="u-form-item-row" borderBottom>
  123. <u--input v-model="formData.recyclePerson" disabled clearable border="none"></u--input>
  124. </u-form-item>
  125. <u-form-item label="回收留底图" borderBottom>
  126. <view class="recycle_bottom_desc">
  127. <u--textarea v-model="formData.recycleBottomDesc" clearable count autoHeight maxlength="250"
  128. height="100" confirmType="done"></u--textarea>
  129. <u-upload :fileList="recycleBottomFileList" @afterRead="afterReadRecycleBottom"
  130. @delete="deleteRecycleBottom" name="1" multiple :maxCount="1" accept="image"></u-upload>
  131. </view>
  132. </u-form-item>
  133. <u-form-item label="回收时间" required prop="recycleTime" class="u-form-item-row" borderBottom
  134. @click="clickRecycleTimeRow">
  135. <FormSelectToPage :val="formData.recycleTime" @deleteItem.stop="clear('recycleTime')">
  136. </FormSelectToPage>
  137. <u-datetime-picker @confirm="confirmRecycleTime" @close="closeRecycleTimePicker"
  138. @cancel="closeRecycleTimePicker" :show="recycleTimeShow" v-model="formData.recycleTime"
  139. mode="date"></u-datetime-picker>
  140. </u-form-item>
  141. <u-form-item label="独立编码" class="u-form-item-row" borderBottom>
  142. <u--input v-model="formData.indentifyCode" placeholder="请输入" clearable border="none"></u--input>
  143. </u-form-item>
  144. <u-form-item label="适用人群" class="u-form-item-row" borderBottom>
  145. <u-radio-group v-model="formData.targetAudience" placement="row">
  146. <u-radio activeColor="#3c9cff" name="general" label="通用"></u-radio>
  147. <u-radio activeColor="#3c9cff" name="man" label="男"></u-radio>
  148. <u-radio activeColor="#3c9cff" name="woman" label="女"></u-radio>
  149. </u-radio-group>
  150. </u-form-item>
  151. <u-form-item label="商品保卡" class="u-form-item-row" borderBottom>
  152. <u-radio-group v-model="formData.productCard" placement="row">
  153. <u-radio activeColor="#3c9cff" name="has" label="有保卡"></u-radio>
  154. <u-radio activeColor="#3c9cff" name="no" label="无保卡"></u-radio>
  155. </u-radio-group>
  156. </u-form-item>
  157. <u-form-item label="保卡年份" class="u-form-item-row" borderBottom
  158. v-if="formData.productCard === 'has'">
  159. <u--input v-model="formData.cardYear" placeholder="不填写默认空白保卡" clearable
  160. border="none"></u--input>
  161. </u-form-item>
  162. <u-form-item label="保卡图片或独立编码照片留底(仅内部人员可见)" borderBottom>
  163. <u-upload :fileList="productCardFileList" @afterRead="afterReadProductCard"
  164. @delete="deleteProductCard" name="3" multiple :maxCount="9"
  165. :previewFullImage="true"></u-upload>
  166. </u-form-item>
  167. <u-form-item label="商品标签" class="u-form-item-row" borderBottom>
  168. <u--input v-model="formData.productTag" placeholder="请输入" clearable border="none"></u--input>
  169. </u-form-item>
  170. <u-form-item label="商品附件" class="u-form-item-row" borderBottom>
  171. <u--input v-model="formData.productAttachment" placeholder="请输入" clearable
  172. border="none"></u--input>
  173. </u-form-item>
  174. <u-form-item label="备注(仅内部人员可见)">
  175. <view class="recycle_bottom_desc">
  176. <u--textarea v-model="formData.productDesc" clearable count autoHeight maxlength="250"
  177. height="100" confirmType="done"></u--textarea>
  178. <u-upload :fileList="productCardFileList" @afterRead="afterReadProductCard"
  179. @delete="deleteProductCard" name="1" multiple :maxCount="1" accept="image"></u-upload>
  180. </view>
  181. </u-form-item>
  182. <u-form-item label="付款方式" borderBottom>
  183. <TabSelect :tabList="paymentTabList" :colNum="4" mode="single"
  184. @tabChange="handlePaymentTabChange">
  185. </TabSelect>
  186. </u-form-item>
  187. </u--form>
  188. </view>
  189. </view>
  190. <view class="btn_group">
  191. <u-button plain type="primary" @click="submitForm('onlyIn')">仅入库</u-button>
  192. <u-button type="primary" @click="submitForm('inAndUp')">入库并上架</u-button>
  193. </view>
  194. </view>
  195. </template>
  196. <script>
  197. import TabSelect from '@/components/custom-tab-select/index.vue'
  198. import FormSelectToPage from '@/components/form-select-to-page/index.vue'
  199. export default {
  200. components: {
  201. TabSelect,
  202. FormSelectToPage,
  203. },
  204. data() {
  205. return {
  206. checkboxValue: [],
  207. recognitionContent: '',
  208. formData: {
  209. imgs: [],
  210. desc: '',
  211. type: '',
  212. brand: '',
  213. series: '',
  214. model: '',
  215. caseMaterial: '',
  216. dialDiameter: '',
  217. material: '',
  218. size: '',
  219. yardage: '',
  220. price: '',
  221. productCondition: '',
  222. productNo: '',
  223. stock: null,
  224. costPrice: '',
  225. samePrice: '',
  226. agentPrice: '',
  227. salePrice: '',
  228. productPosition: '',
  229. watchYear: '',
  230. identifyingPerson: '',
  231. recycleType: '',
  232. recyclePerson: '',
  233. recycleBottomDesc: '',
  234. recycleTime: null,
  235. indentifyCode: '',
  236. targetAudience: '',
  237. productCard: '',
  238. cardYear: '',
  239. productTag: '',
  240. productAttachment: '',
  241. productDesc: '',
  242. paymentType: '',
  243. },
  244. rules: {
  245. imgs: [
  246. { required: true, message: '请上传商品图片', trigger: 'blur' },
  247. ],
  248. desc: [
  249. { required: true, message: '请输入商品描述', trigger: 'blur' },
  250. ],
  251. type: [
  252. { required: true, message: '请选择商品分类', trigger: 'blur' },
  253. ],
  254. brand: [
  255. { required: true, message: '请选择品牌', trigger: 'blur' },
  256. ],
  257. productCondition: [
  258. { required: true, message: '请选择商品成色', trigger: 'blur' },
  259. ],
  260. productAttribute: [
  261. { required: true, message: '请选择商品属性', trigger: 'blur' },
  262. ],
  263. stock: [
  264. { required: true, message: '请输入库存数量', trigger: 'blur' },
  265. ],
  266. recycleTime: [
  267. { required: true, message: '请选择回收时间', trigger: 'blur' },
  268. ],
  269. },
  270. recycleTimeShow: false,
  271. titlePlaceholder: '如不填,自动截取商品描述前50字',
  272. typeList: [
  273. {
  274. name: '腕表',
  275. value: '1',
  276. },
  277. {
  278. name: '箱包',
  279. value: '2',
  280. },
  281. {
  282. name: '珠宝',
  283. value: '3',
  284. },
  285. {
  286. name: '鞋靴',
  287. value: '4',
  288. },
  289. {
  290. name: '配饰',
  291. value: '5',
  292. },
  293. {
  294. name: '服饰',
  295. value: '6',
  296. },
  297. {
  298. name: '其他',
  299. value: '7',
  300. },
  301. ],
  302. productConditionList: [
  303. {
  304. name: '闲置未使用',
  305. value: '1',
  306. },
  307. {
  308. name: '二手',
  309. value: '2',
  310. },
  311. ],
  312. productAttributeList: [
  313. {
  314. name: '自有商品',
  315. value: '1',
  316. },
  317. {
  318. name: '寄卖商品',
  319. value: '2',
  320. },
  321. {
  322. name: '质押商品',
  323. value: '3',
  324. },
  325. {
  326. name: '其它',
  327. value: '4',
  328. },
  329. ],
  330. recycleTypeList: [
  331. {
  332. name: '其它',
  333. value: '1',
  334. },
  335. {
  336. name: '线上',
  337. value: '2',
  338. },
  339. {
  340. name: '同行',
  341. value: '3',
  342. },
  343. {
  344. name: '门店',
  345. value: '4',
  346. },
  347. ],
  348. paymentTabList: [
  349. {
  350. name: '微信',
  351. value: 1,
  352. },
  353. {
  354. name: '支付宝',
  355. value: 2,
  356. },
  357. {
  358. name: '银行卡',
  359. value: 3,
  360. },
  361. {
  362. name: '现金',
  363. value: 4,
  364. },
  365. {
  366. name: '数字货币',
  367. value: 5,
  368. },
  369. {
  370. name: '挂账',
  371. value: 6,
  372. },
  373. ],
  374. brandToUrl: '/pages/wareHouse/brandList',
  375. // 上传
  376. goodPicFileList: [{ url: 'https://uviewui.com/swiper/1.jpg' }],//商品图片
  377. detailPicFileList: [],//细节图片
  378. detailVideoFileList: [],//细节视频
  379. recycleBottomFileList: [],//回收留底图
  380. productCardFileList: [],//商品保卡图片或独立编码照片留底
  381. productTagFileList: [],//商品标签图片留底
  382. }
  383. },
  384. methods: {
  385. submitForm() {
  386. this.$refs.addForm.validate().then((valid) => {
  387. if (valid) {
  388. console.log('表单校验通过');
  389. } else {
  390. console.log('表单校验不通过');
  391. }
  392. });
  393. },
  394. handleTabChange(e) {
  395. console.log(e);
  396. },
  397. clear(key) {
  398. this.formData[key] = '';
  399. },
  400. // 商品分类
  401. handleTabChangeType(e) {
  402. this.formData.type = e;
  403. console.log(e, this.formData.type);
  404. this.$refs.addForm.validateField('type')
  405. },
  406. // 商品成色
  407. handleTabChangeProductCondition(e) {
  408. this.formData.productCondition = e;
  409. this.$refs.addForm.validateField('productCondition')
  410. },
  411. // 商品属性
  412. handleTabChangeProductAttribute(e) {
  413. this.formData.productAttribute = e;
  414. this.$refs.addForm.validateField('productAttribute')
  415. },
  416. // 回收类型
  417. handleTabChangeRecycleType(e) {
  418. this.formData.recycleType = e;
  419. },
  420. // 付款方式
  421. handlePaymentTabChange(e) {
  422. console.log(e);
  423. },
  424. clickRecycleTimeRow() {
  425. this.recycleTimeShow = true;
  426. },
  427. confirmRecycleTime(val) {
  428. this.formData.recycleTime = this.$dayjs(val.value).format('YYYY-MM-DD');
  429. console.log(val, this.formData.recycleTime);
  430. this.recycleTimeShow = false;
  431. },
  432. closeRecycleTimePicker(val) {
  433. console.log(val);
  434. this.recycleTimeShow = false;
  435. },
  436. cancelRecycleTimePicker(val) {
  437. console.log(val);
  438. this.recycleTimeShow = false;
  439. },
  440. recycleTimeFormatter(value) {
  441. if (value) {
  442. console.log(value);
  443. }
  444. return ''
  445. },
  446. // 删除商品图片
  447. deleteGoodPic(event) {
  448. console.log(event);
  449. // this[`fileList${event.name}`].splice(event.index, 1);
  450. },
  451. // 新增商品图片
  452. async afterReadGoodPic(event) {
  453. console.log(event);
  454. // this.fileList = [...this.fileList, ...event.fileList];
  455. },
  456. // 删除细节视频
  457. deleteVideo(event) {
  458. console.log(event);
  459. // this[`fileList${event.name}`].splice(event.index, 1);
  460. },
  461. // 新增细节视频
  462. async afterReadVideo(event) {
  463. console.log(event);
  464. // this.fileList2 = [...this.fileList2, ...event.fileList];
  465. },
  466. // 删除细节图片
  467. deleteDetailPic(event) {
  468. console.log(event);
  469. // this[`fileList${event.name}`].splice(event.index, 1);
  470. },
  471. // 新增细节图片
  472. async afterReadDetailPic(event) {
  473. console.log(event);
  474. // this.fileList1 = [...this.fileList1, ...event.fileList];
  475. },
  476. // 删除回收留底图
  477. deleteRecycleBottom(event) {
  478. console.log(event);
  479. // this[`fileList${event.name}`].splice(event.index, 1);
  480. },
  481. // 新增回收留底图
  482. async afterReadRecycleBottom(event) {
  483. console.log(event);
  484. // this.fileList3 = [...this.fileList3, ...event.fileList];
  485. },
  486. // 删除商品保卡图片或独立编码照片留底
  487. deleteProductCard(event) {
  488. console.log(event);
  489. // this[`fileList${event.name}`].splice(event.index, 1);
  490. },
  491. // 新增商品保卡图片或独立编码照片留底
  492. async afterReadProductCard(event) {
  493. console.log(event);
  494. // this.fileList4 = [...this.fileList4, ...event.fileList];
  495. },
  496. // 删除商品标签图片留底
  497. deleteProductTag(event) {
  498. console.log(event);
  499. // this[`fileList${event.name}`].splice(event.index, 1);
  500. },
  501. // 新增商品标签图片留底
  502. async afterReadProductTag(event) {
  503. console.log(event);
  504. // this.fileList5 = [...this.fileList5, ...event.fileList];
  505. },
  506. async handleRecognition() {
  507. // 品牌:浪琴
  508. // 来源:【麒麟】私信-杰3-3
  509. // 实价:6500
  510. // 型号:L2.257.5.89.7
  511. // 编码:52356065
  512. // 日期:2021.11.09
  513. // 备注:全套
  514. // 付款方式:线上
  515. if (!this.recognitionContent) {
  516. return;
  517. }
  518. try {
  519. uni.$u.toast("识别成功");
  520. } catch (e) {
  521. uni.$u.toast("文本识别异常");
  522. }
  523. },
  524. }
  525. }
  526. </script>
  527. <style lang="scss" scoped>
  528. @import './styles/add.scss';
  529. </style>