add.vue 25 KB

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