add.vue 21 KB

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