add.vue 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  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="continuousWarehousing" placement="column">
  7. <u-checkbox label="连续入库" name="1"></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">
  22. </u--textarea>
  23. <view class="btn_group_recognition">
  24. <u-button text="清除" @click="clearRecognitionContent()"></u-button>
  25. <u-button text="粘贴识别" type="primary"
  26. @click="handlePasteRecognition(recognitionContent)"></u-button>
  27. </view>
  28. </u-form-item>
  29. <u-form-item label="商品图片" required prop="imgs" borderBottom>
  30. <ImgsRowScroll v-if="formData.goodPicFileList.length > 0" :isShowDeleteIcon="true"
  31. @deleteImgInfo="getDeleteGoodPicInfo" imgMode="aspectFill" :totalWidth="400"
  32. :images="formData.goodPicFileList" :previewEnabled="true" :imageWidth="150"
  33. :imageHeight="150"></ImgsRowScroll>
  34. <u-upload @afterRead="afterReadGoodPic" name="3" multiple :maxCount="9"
  35. :previewFullImage="true"></u-upload>
  36. </u-form-item>
  37. <u-form-item label="商品描述(详细的描述让用户更好的了解您的产品)" required prop="desc" borderBottom>
  38. <u--textarea v-model="formData.desc" clearable placeholder="95新 WHZ19219H
  39. CHANEL香奈儿链条单肩包
  40. 21开 牛皮 尺寸25 4 15
  41. 配件中溯卡" count autoHeight maxlength="250" height="100" confirmType="done"></u--textarea>
  42. </u-form-item>
  43. <u-form-item label="商品分类" required prop="type" borderBottom>
  44. <TabSelect :tabList="typeList" :isClear="typeIsClear" @tabChange="handleTabChangeType"
  45. :colNum="4" mode="single">
  46. </TabSelect>
  47. </u-form-item>
  48. <u-form-item label="品牌" required prop="dictLabel" class="u-form-item-row" borderBottom
  49. @click="showBrandList">
  50. <Cell :val="formData.dictLabel"></Cell>
  51. <BrandList ref="brandListRef" @selectedBrand="handleSelectedBrand"></BrandList>
  52. </u-form-item>
  53. <u-form-item label="系列" class="u-form-item-row" borderBottom>
  54. <u--input v-model="formData.series" placeholder="请输入" clearable border="none"></u--input>
  55. </u-form-item>
  56. <u-form-item label="型号" class="u-form-item-row" borderBottom>
  57. <u--input v-model="formData.model" placeholder="请输入" clearable border="none"></u--input>
  58. </u-form-item>
  59. <u-form-item label="机芯类型" class="u-form-item-row" borderBottom>
  60. <u--input v-model="formData.dialType" placeholder="请输入" clearable border="none"></u--input>
  61. </u-form-item>
  62. <u-form-item label="表壳材质" class="u-form-item-row" borderBottom>
  63. <u--input v-model="formData.caseMaterial" placeholder="请输入" clearable border="none"></u--input>
  64. </u-form-item>
  65. <u-form-item label="表盘直径" class="u-form-item-row" borderBottom>
  66. <u--input v-model="formData.dialDiameter" placeholder="请输入" clearable border="none"></u--input>
  67. </u-form-item>
  68. <u-form-item label="材质" class="u-form-item-row" borderBottom>
  69. <u--input v-model="formData.material" placeholder="请输入" clearable border="none"></u--input>
  70. </u-form-item>
  71. <u-form-item label="尺寸" class="u-form-item-row" borderBottom>
  72. <u--input v-model="formData.size" placeholder="请输入" clearable border="none"></u--input>
  73. </u-form-item>
  74. <u-form-item label="尺码" class="u-form-item-row" borderBottom>
  75. <u--input v-model="formData.yardage" placeholder="请输入" clearable border="none"></u--input>
  76. </u-form-item>
  77. <u-form-item label="官方指导价" class="u-form-item-row" borderBottom>
  78. <u--input v-model="formData.price" placeholder="请输入" clearable border="none"></u--input>
  79. </u-form-item>
  80. <u-form-item label="商品成色" required prop="productCondition" borderBottom>
  81. <TabSelect :tabList="productConditionList" :isClear="productConditionIsClear"
  82. @tabChange="handleTabChangeProductCondition" :colNum="2" mode="single"></TabSelect>
  83. </u-form-item>
  84. <u-form-item label="细节图" borderBottom>
  85. <view class="detail_pic_container">
  86. <!-- <view>
  87. <text class="tip">视频:</text>
  88. <ImgsRowScroll v-if="formData.detailVideoFileList.length > 0" :isShowDeleteIcon="true"
  89. @deleteVideoInfo="getDeleteDetailVideoInfo" imgMode="aspectFill" :totalWidth="400"
  90. :videos="formData.detailVideoFileList" :previewEnabled="true" :imageWidth="150"
  91. :imageHeight="150" accept="video"></ImgsRowScroll>
  92. <u-upload @afterRead="afterReadDeatilVideo" name="2" multiple :maxCount="10" accept="video"></u-upload>
  93. </view> -->
  94. <view>
  95. <!-- <text class="tip">图片:</text> -->
  96. <ImgsRowScroll v-if="formData.detailPicFileList.length > 0" :isShowDeleteIcon="true"
  97. @deleteImgInfo="getDeleteDetailPicInfo" imgMode="aspectFill" :totalWidth="400"
  98. :images="formData.detailPicFileList" :previewEnabled="true" :imageWidth="150"
  99. :imageHeight="150"></ImgsRowScroll>
  100. <u-upload @afterRead="afterReadDetailPic" name="1" multiple :maxCount="10"></u-upload>
  101. </view>
  102. </view>
  103. </u-form-item>
  104. <u-form-item label="商品标题" borderBottom>
  105. <u--textarea v-model="formData.title" clearable :placeholder="titlePlaceholder" count autoHeight
  106. maxlength="50" height="100" confirmType="done"></u--textarea>
  107. </u-form-item>
  108. <u-form-item label="商品货号" class="u-form-item-row" borderBottom>
  109. <u--input v-model="formData.productNo" placeholder="请输入" clearable border="none"></u--input>
  110. </u-form-item>
  111. <u-form-item label="商品属性" required prop="productAttribute" borderBottom>
  112. <TabSelect :tabList="productAttributeList" :colNum="4" mode="single"
  113. :isClear="productAttributeIsClear" @tabChange="handleTabChangeProductAttribute">
  114. </TabSelect>
  115. </u-form-item>
  116. <u-form-item label="库存数量" required prop="stock" class="u-form-item-row" borderBottom>
  117. <u--input v-model="formData.stock" placeholder="请输入" clearable border="none"></u--input>
  118. </u-form-item>
  119. <u-form-item label="总成本价" class="u-form-item-row" borderBottom>
  120. <u--input v-model="formData.costPrice" placeholder="请输入" clearable border="none"></u--input>
  121. </u-form-item>
  122. <u-form-item label="同行价格" class="u-form-item-row" borderBottom>
  123. <u--input v-model="formData.samePrice" placeholder="请输入" clearable border="none"></u--input>
  124. </u-form-item>
  125. <u-form-item label="代理价格" class="u-form-item-row" borderBottom>
  126. <u--input v-model="formData.agentPrice" placeholder="请输入" clearable border="none"></u--input>
  127. </u-form-item>
  128. <u-form-item label="销售价格" class="u-form-item-row" borderBottom>
  129. <u--input v-model="formData.salePrice" placeholder="请输入" clearable border="none"></u--input>
  130. </u-form-item>
  131. <u-form-item label="商品位置" class="u-form-item-row" borderBottom>
  132. <u--input v-model="formData.productPosition" placeholder="请输入" clearable
  133. border="none"></u--input>
  134. </u-form-item>
  135. <u-form-item label="手表年份" class="u-form-item-row" borderBottom>
  136. <u--input v-model="formData.watchYear" placeholder="请输入" clearable border="none"></u--input>
  137. </u-form-item>
  138. <u-form-item label="鉴定人员" class="u-form-item-row" borderBottom @click="identifyingPersonClick">
  139. <Cell :val="formData.identifyingPerson" :isDelete="true" @handleClear="clear('identifyingPerson')"></Cell>
  140. <PersonPicker ref="identifyingPersonPickerRef" title="请选择鉴定人员"
  141. @selectPerson="handleSelectIdentifyingPerson"></PersonPicker>
  142. </u-form-item>
  143. <u-form-item label="回收类型" borderBottom>
  144. <TabSelect :tabList="recycleTypeList" :colNum="4" mode="single"
  145. :isClear="recycleTypeIsClear" @tabChange="handleTabChangeRecycleType">
  146. </TabSelect>
  147. </u-form-item>
  148. <u-form-item label="回收人员" class="u-form-item-row" borderBottom @click="recyclePersonClick">
  149. <!-- <u--input v-model="formData.recyclePerson" disabledColor="#fff" disabled clearable
  150. border="none"></u--input> -->
  151. <Cell :val="formData.recyclePerson" :isDelete="true" @handleClear="clear('recyclePerson')"></Cell>
  152. <PersonPicker ref="recyclePersonPickerRef" title="请选择回收人员"
  153. @selectPerson="handleSelectRecyclePerson"></PersonPicker>
  154. </u-form-item>
  155. <u-form-item label="回收留底图" borderBottom>
  156. <view class="recycle_bottom_desc">
  157. <u--textarea v-model="formData.recycleBottomDesc" clearable count autoHeight maxlength="250"
  158. height="100" confirmType="done"></u--textarea>
  159. <view>
  160. <ImgsRowScroll v-if="formData.recycleBottomPicList.length > 0" :isShowDeleteIcon="true"
  161. @deleteImgInfo="getDeleteRecycleBottomPicInfo" imgMode="aspectFill"
  162. :totalWidth="400" :images="formData.recycleBottomPicList" :previewEnabled="true"
  163. :imageWidth="150" :imageHeight="150"></ImgsRowScroll>
  164. <u-upload @afterRead="afterReadRecycleBottom" name="1" multiple :maxCount="1"
  165. accept="image"></u-upload>
  166. </view>
  167. </view>
  168. </u-form-item>
  169. <u-form-item label="回收时间" required prop="recycleTime" class="u-form-item-row" borderBottom
  170. @click="clickRecycleTimeRow">
  171. <Cell :val="formData.recycleTime"></Cell>
  172. <u-datetime-picker @confirm="confirmRecycleTime" @close="closeRecycleTimePicker"
  173. @cancel="closeRecycleTimePicker" :show="recycleTimeShow" v-model="formData.recycleTime"
  174. mode="date"></u-datetime-picker>
  175. </u-form-item>
  176. <u-form-item label="独立编码" class="u-form-item-row" borderBottom>
  177. <u--input v-model="formData.indentifyCode" placeholder="请输入" clearable border="none"></u--input>
  178. </u-form-item>
  179. <u-form-item label="适用人群" class="u-form-item-row" borderBottom>
  180. <u-radio-group v-model="formData.targetAudience" placement="row">
  181. <u-radio activeColor="#3c9cff" name="general" label="通用"></u-radio>
  182. <u-radio activeColor="#3c9cff" name="man" label="男"></u-radio>
  183. <u-radio activeColor="#3c9cff" name="woman" label="女"></u-radio>
  184. </u-radio-group>
  185. </u-form-item>
  186. <u-form-item label="商品保卡" class="u-form-item-row" borderBottom>
  187. <u-radio-group v-model="formData.productCard" placement="row">
  188. <u-radio activeColor="#3c9cff" name="has" label="有保卡"></u-radio>
  189. <u-radio activeColor="#3c9cff" name="no" label="无保卡"></u-radio>
  190. </u-radio-group>
  191. </u-form-item>
  192. <u-form-item label="保卡年份" class="u-form-item-row" borderBottom
  193. v-if="formData.productCard === 'has'">
  194. <u--input v-model="formData.cardYear" placeholder="不填写默认空白保卡" clearable
  195. border="none"></u--input>
  196. </u-form-item>
  197. <u-form-item label="保卡图片或独立编码照片留底(仅内部人员可见)" borderBottom>
  198. <ImgsRowScroll v-if="formData.productCardPicFileList.length > 0" :isShowDeleteIcon="true"
  199. @deleteImgInfo="getDeleteProductCardPicInfo" imgMode="aspectFill" :totalWidth="400"
  200. :images="formData.productCardPicFileList" :previewEnabled="true" :imageWidth="150"
  201. :imageHeight="150"></ImgsRowScroll>
  202. <u-upload @afterRead="afterReadProductCardPic" name="3" multiple :maxCount="9"
  203. :previewFullImage="true"></u-upload>
  204. </u-form-item>
  205. <u-form-item label="商品标签" class="u-form-item-row" borderBottom>
  206. <u--input v-model="formData.productTag" placeholder="请输入" clearable border="none"></u--input>
  207. </u-form-item>
  208. <u-form-item label="商品附件" class="u-form-item-row" borderBottom>
  209. <u--input v-model="formData.productAttachment" placeholder="请输入" clearable
  210. border="none"></u--input>
  211. </u-form-item>
  212. <u-form-item label="备注(仅内部人员可见)">
  213. <view class="recycle_bottom_desc">
  214. <u--textarea v-model="formData.productDesc" clearable count autoHeight maxlength="250"
  215. height="100" confirmType="done"></u--textarea>
  216. <view>
  217. <ImgsRowScroll v-if="formData.productDescPicFileList.length > 0"
  218. :isShowDeleteIcon="true" @deleteImgInfo="getDeleteProductDescPicInfo"
  219. imgMode="aspectFill" :totalWidth="400" :images="formData.productDescPicFileList"
  220. :previewEnabled="true" :imageWidth="150" :imageHeight="150"></ImgsRowScroll>
  221. <u-upload @afterRead="afterReadProductDescPic" name="1" multiple :maxCount="1"
  222. accept="image"></u-upload>
  223. </view>
  224. </view>
  225. </u-form-item>
  226. <u-form-item label="付款方式" borderBottom>
  227. <TabSelect :tabList="paymentTabList" :echoInfo="payTypeEcho" :colNum="4" mode="single"
  228. :isClear="payTypeIsClear" @tabChange="handlePayTypeTabChange">
  229. </TabSelect>
  230. </u-form-item>
  231. </u--form>
  232. </view>
  233. </view>
  234. <view class="btn_group">
  235. <u-button plain type="primary" @click="submitForm('onlyIn')">仅入库</u-button>
  236. <u-button type="primary" @click="submitForm('inAndUp')">入库并上架</u-button>
  237. </view>
  238. </view>
  239. </template>
  240. <script>
  241. import TabSelect from '@/components/custom-tab-select/index.vue'
  242. import Cell from '@/components/custom-cell/index.vue'
  243. import BrandList from '@/components/brand-list/index.vue'
  244. import ImgsRowScroll from '@/components/imgs-row-scroll/index.vue'
  245. import PersonPicker from '@/components/person-picker/index.vue'
  246. export default {
  247. components: {
  248. TabSelect,
  249. Cell,
  250. BrandList,
  251. ImgsRowScroll,
  252. PersonPicker
  253. },
  254. data() {
  255. return {
  256. checkboxValue: [],
  257. recognitionContent: '',
  258. formData: {
  259. goodPicFileList: [],//商品图片
  260. desc: '',
  261. type: '',
  262. dictLabel: '',
  263. dictValue: '',
  264. series: '',
  265. model: '',
  266. dialType: '',
  267. caseMaterial: '',
  268. dialDiameter: '',
  269. material: '',
  270. size: '',
  271. yardage: '',
  272. price: '',
  273. productCondition: '',
  274. detailPicFileList: [],//细节图片
  275. // detailVideoFileList:[],
  276. productNo: '',
  277. stock: null,
  278. costPrice: '',
  279. samePrice: '',
  280. agentPrice: '',
  281. salePrice: '',
  282. productPosition: '',
  283. watchYear: '',
  284. identifyingPerson: '',
  285. identifyingPersonId: '',
  286. recycleType: '',
  287. recyclePerson: '',
  288. recyclePersonId: '',
  289. recycleBottomDesc: '',
  290. recycleBottomPicList: [],//回收留底图
  291. recycleTime: this.$dayjs().format('YYYY-MM-DD'),
  292. indentifyCode: '',
  293. targetAudience: '',
  294. productCard: '',
  295. cardYear: '',
  296. productCardPicFileList: [],//商品保卡图片或独立编码照片留底
  297. productTag: '',
  298. productAttachment: '',
  299. productDesc: '',
  300. productDescPicFileList: [],//商品备注图片
  301. payType: '',
  302. },
  303. continuousWarehousing: [],//是否连续入库 1:是 0:否
  304. rules: {
  305. goodPicFileList: [
  306. { required: true, message: '请上传商品图片', trigger: 'blur' },
  307. ],
  308. desc: [
  309. { required: true, message: '请输入商品描述', trigger: 'blur' },
  310. ],
  311. type: [
  312. { required: true, message: '请选择商品分类', trigger: 'blur' },
  313. ],
  314. dictLabel: [
  315. { required: true, message: '请选择品牌', trigger: 'blur' },
  316. ],
  317. productCondition: [
  318. { required: true, message: '请选择商品成色', trigger: 'blur' },
  319. ],
  320. productAttribute: [
  321. { required: true, message: '请选择商品属性', trigger: 'blur' },
  322. ],
  323. stock: [
  324. { required: true, message: '请输入库存数量', trigger: 'blur' },
  325. ],
  326. recycleTime: [
  327. { required: true, message: '请选择回收时间', trigger: 'blur' },
  328. ],
  329. },
  330. recycleTimeShow: false,
  331. titlePlaceholder: '如不填,自动截取商品描述前50字',
  332. typeList: [
  333. {
  334. name: '腕表',
  335. value: '1',
  336. },
  337. {
  338. name: '箱包',
  339. value: '2',
  340. },
  341. {
  342. name: '珠宝',
  343. value: '3',
  344. },
  345. {
  346. name: '鞋靴',
  347. value: '4',
  348. },
  349. {
  350. name: '配饰',
  351. value: '5',
  352. },
  353. {
  354. name: '服饰',
  355. value: '6',
  356. },
  357. {
  358. name: '其他',
  359. value: '7',
  360. },
  361. ],
  362. productConditionList: [
  363. {
  364. name: '闲置未使用',
  365. value: '1',
  366. },
  367. {
  368. name: '二手',
  369. value: '2',
  370. },
  371. ],
  372. productAttributeList: [
  373. {
  374. name: '自有商品',
  375. value: '1',
  376. },
  377. {
  378. name: '寄卖商品',
  379. value: '2',
  380. },
  381. {
  382. name: '质押商品',
  383. value: '3',
  384. },
  385. {
  386. name: '其它',
  387. value: '4',
  388. },
  389. ],
  390. recycleTypeList: [
  391. {
  392. name: '线上',
  393. value: '1',
  394. },
  395. {
  396. name: '同行',
  397. value: '2',
  398. },
  399. {
  400. name: '门店',
  401. value: '3',
  402. },
  403. {
  404. name: '其它',
  405. value: '4',
  406. },
  407. ],
  408. paymentTabList: [
  409. {
  410. name: '微信',
  411. value: 1,
  412. },
  413. {
  414. name: '支付宝',
  415. value: 2,
  416. },
  417. {
  418. name: '银行卡',
  419. value: 3,
  420. },
  421. {
  422. name: '现金',
  423. value: 4,
  424. },
  425. {
  426. name: '数字货币',
  427. value: 5,
  428. },
  429. {
  430. name: '挂账',
  431. value: 6,
  432. },
  433. ],
  434. typeIsClear: false,//商品分类是否清空
  435. productConditionIsClear: false,//商品成色是否清空
  436. productAttributeIsClear: false,//商品属性是否清空
  437. recycleTypeIsClear: false,//回收类型是否清空
  438. payTypeIsClear: false,//付款方式是否清空
  439. payTypeEcho: ''//付款方式识别回显
  440. }
  441. },
  442. methods: {
  443. // 提交表单
  444. submitForm(submitType) {
  445. this.$refs.addForm.validate().then((valid) => {
  446. if (valid) {
  447. if (this.formData.title == '') {
  448. this.formData.title = this.formData.desc.substring(0, 50);
  449. }
  450. const data = {
  451. ...this.formData,
  452. submitType: submitType, //提交类型 onlyIn:仅入库 inAndUp:入库并上架
  453. continuousWarehousing: this.continuousWarehousing[0] || '0',//是否连续入库 1:是 0:否
  454. }
  455. uni.$u.api.wareHouseAdd(data).then(res => {
  456. console.log(res);
  457. if (res.code === 200) {
  458. uni.$u.toast('新增成功');
  459. if (data.continuousWarehousing == '0') {
  460. setTimeout(() => {
  461. uni.navigateBack({
  462. delta: 1
  463. });
  464. }, 1000);
  465. } else {
  466. this.clearForm();
  467. }
  468. } else {
  469. uni.$u.toast(res.msg);
  470. }
  471. })
  472. } else {
  473. console.log('表单校验不通过');
  474. }
  475. });
  476. },
  477. clearForm() {
  478. this.formData = {
  479. goodPicFileList: [],//商品图片
  480. desc: '',
  481. type: '',
  482. dictLabel: '',
  483. dictValue: '',
  484. series: '',
  485. model: '',
  486. dialType: '',
  487. caseMaterial: '',
  488. dialDiameter: '',
  489. material: '',
  490. size: '',
  491. yardage: '',
  492. price: '',
  493. productCondition: '',
  494. detailPicFileList: [],//细节图片
  495. // detailVideoFileList:[],
  496. productNo: '',
  497. stock: null,
  498. costPrice: '',
  499. samePrice: '',
  500. agentPrice: '',
  501. salePrice: '',
  502. productPosition: '',
  503. watchYear: '',
  504. identifyingPerson: '',
  505. identifyingPersonId: '',
  506. recycleType: '',
  507. recyclePerson: '',
  508. recyclePersonId: '',
  509. recycleBottomDesc: '',
  510. recycleBottomPicList: [],//回收留底图
  511. recycleTime: this.$dayjs().format('YYYY-MM-DD'),
  512. indentifyCode: '',
  513. targetAudience: '',
  514. productCard: '',
  515. cardYear: '',
  516. productCardPicFileList: [],//商品保卡图片或独立编码照片留底
  517. productTag: '',
  518. productAttachment: '',
  519. productDesc: '',
  520. productDescPicFileList: [],//商品备注图片
  521. payType: '',
  522. }
  523. this.typeIsClear = true;
  524. this.productConditionIsClear = true;
  525. this.productAttributeIsClear = true;
  526. this.recycleTypeIsClear = true;
  527. this.payTypeIsClear = true;
  528. this.continuousWarehousing = [];
  529. this.$refs.addForm.resetFields();
  530. },
  531. // 选择品牌
  532. handleSelectedBrand(info) {
  533. this.formData.dictLabel = info.dictLabel;
  534. this.formData.dictValue = info.dictValue;
  535. this.$refs.addForm.validateField('dictLabel');
  536. },
  537. // 显示品牌列表
  538. showBrandList() {
  539. this.$refs.brandListRef.showBrandList();
  540. },
  541. // 清空输入框
  542. clear(key) {
  543. // 品牌
  544. if (key == 'dictLabel') {
  545. this.formData.dictLabel = '';
  546. this.formData.dictValue = '';
  547. return;
  548. }
  549. // 鉴定人
  550. if (key == 'identifyingPerson') {
  551. this.formData.identifyingPerson = '';
  552. this.formData.identifyingPersonId = '';
  553. return;
  554. }
  555. // 回收人
  556. if (key == 'recyclePerson') {
  557. this.formData.recyclePerson = '';
  558. this.formData.recyclePersonId = '';
  559. return;
  560. }
  561. this.formData[key] = '';
  562. },
  563. // 商品分类
  564. handleTabChangeType(e) {
  565. this.formData.type = e;
  566. console.log(e, this.formData.type);
  567. this.$refs.addForm.validateField('type')
  568. },
  569. // 商品成色
  570. handleTabChangeProductCondition(e) {
  571. this.formData.productCondition = e;
  572. this.$refs.addForm.validateField('productCondition')
  573. },
  574. // 商品属性
  575. handleTabChangeProductAttribute(e) {
  576. this.formData.productAttribute = e;
  577. this.$refs.addForm.validateField('productAttribute')
  578. },
  579. // 回收类型
  580. handleTabChangeRecycleType(e) {
  581. this.formData.recycleType = e;
  582. },
  583. // 付款方式
  584. handlePayTypeTabChange(e) {
  585. this.formData.payType = e;
  586. },
  587. // 打开回收时间选择器
  588. clickRecycleTimeRow() {
  589. this.recycleTimeShow = true;
  590. },
  591. // 确认回收时间
  592. confirmRecycleTime(val) {
  593. this.$nextTick(() => {
  594. this.formData.recycleTime = this.$dayjs(val.value).format('YYYY-MM-DD');
  595. this.recycleTimeShow = false;
  596. })
  597. },
  598. // 关闭回收时间选择器
  599. closeRecycleTimePicker(val) {
  600. this.recycleTimeShow = false;
  601. },
  602. // 打开鉴定人选择器
  603. identifyingPersonClick() {
  604. this.$refs.identifyingPersonPickerRef.open();
  605. },
  606. // 选择鉴定人
  607. handleSelectIdentifyingPerson(info) {
  608. this.formData.identifyingPerson = info.label;
  609. this.formData.identifyingPersonId = info.id;
  610. },
  611. // 打开回收人选择器
  612. recyclePersonClick() {
  613. this.$refs.recyclePersonPickerRef.open();
  614. },
  615. // 选择回收人
  616. handleSelectRecyclePerson(info) {
  617. this.formData.recyclePerson = info.label;
  618. this.formData.recyclePersonId = info.id;
  619. },
  620. // 新增商品图片
  621. async afterReadGoodPic(event) {
  622. event.file.forEach(item => {
  623. uni.$u.api.uploadFile(item.url).then((res) => {
  624. this.formData.goodPicFileList.push(res.data.url);
  625. uni.$u.toast("文件上传成功");
  626. }).catch(() => {
  627. uni.$u.toast("上传文件失败");
  628. })
  629. })
  630. },
  631. // 获取删除商品图片信息
  632. getDeleteGoodPicInfo(info) {
  633. this.formData.goodPicFileList = info.newImages
  634. },
  635. // 获取删除细节图片信息
  636. getDeleteDetailPicInfo(info) {
  637. this.formData.detailPicFileList = info.newImages
  638. },
  639. // 新增细节图片
  640. async afterReadDetailPic(event) {
  641. event.file.forEach(item => {
  642. uni.$u.api.uploadFile(item.url).then((res) => {
  643. this.formData.detailPicFileList.push(res.data.url);
  644. uni.$u.toast("文件上传成功");
  645. }).catch(() => {
  646. uni.$u.toast("上传文件失败");
  647. })
  648. })
  649. },
  650. // 获取删除回收留底图信息
  651. getDeleteRecycleBottomPicInfo(info) {
  652. this.formData.recycleBottomPicList = info.newImages
  653. },
  654. // 新增回收留底图
  655. async afterReadRecycleBottom(event) {
  656. event.file.forEach(item => {
  657. uni.$u.api.uploadFile(item.url).then((res) => {
  658. this.formData.recycleBottomPicList.push(res.data.url);
  659. uni.$u.toast("文件上传成功");
  660. }).catch(() => {
  661. uni.$u.toast("上传文件失败");
  662. })
  663. })
  664. },
  665. // 删除商品保卡图片或独立编码照片留底
  666. getDeleteProductCardPicInfo(info) {
  667. this.formData.productCardPicFileList = info.newImages
  668. },
  669. // 新增商品保卡图片或独立编码照片留底
  670. async afterReadProductCardPic(event) {
  671. event.file.forEach(item => {
  672. uni.$u.api.uploadFile(item.url).then((res) => {
  673. this.formData.productCardPicFileList.push(res.data.url);
  674. uni.$u.toast("文件上传成功");
  675. }).catch(() => {
  676. uni.$u.toast("上传文件失败");
  677. })
  678. })
  679. },
  680. // 获取删除商品备注图片信息
  681. getDeleteProductDescPicInfo(info) {
  682. this.formData.productDescPicFileList = info.newImages
  683. },
  684. // 新增商品备注图片
  685. async afterReadProductDescPic(event) {
  686. event.file.forEach(item => {
  687. uni.$u.api.uploadFile(item.url).then((res) => {
  688. this.formData.productDescPicFileList.push(res.data.url);
  689. uni.$u.toast("文件上传成功");
  690. }).catch(() => {
  691. uni.$u.toast("上传文件失败");
  692. })
  693. })
  694. },
  695. async handlePasteRecognition(text) {
  696. // 品牌:浪琴
  697. // 来源:【麒麟】私信-杰3-3
  698. // 实价:6500
  699. // 型号:L2.257.5.89.7
  700. // 编码:52356065
  701. // 日期:2021-11-09
  702. // 备注:全套
  703. // 付款方式:微信
  704. if (!text) {
  705. return;
  706. }
  707. try {
  708. if (!text) return {};
  709. const result = {};
  710. // 支持中文冒号和英文冒号
  711. const lines = text.split(/[\n\r]+/);
  712. lines.forEach(line => {
  713. const lineStr = line.trim();
  714. if (!lineStr) return;
  715. // 尝试中文冒号
  716. let separatorIndex = lineStr.indexOf(':');
  717. // 如果没有中文冒号,尝试英文冒号
  718. if (separatorIndex === -1) {
  719. separatorIndex = lineStr.indexOf(':');
  720. }
  721. if (separatorIndex > 0) {
  722. const key = lineStr.substring(0, separatorIndex).trim();
  723. const value = lineStr.substring(separatorIndex + 1).trim();
  724. result[key] = value;
  725. }
  726. });
  727. if (result['品牌']) {
  728. this.formData.dictLabel = result['品牌'];
  729. }
  730. if (result['来源']) {
  731. this.formData.desc = result['来源'];
  732. }
  733. if (result['实价']) {
  734. this.formData.costPrice = result['实价'];
  735. }
  736. if (result['型号']) {
  737. this.formData.model = result['型号'];
  738. }
  739. if (result['编码']) {
  740. this.formData.indentifyCode = result['编码'];
  741. }
  742. if (result['日期']) {
  743. this.formData.recycleTime = result['日期'];
  744. }
  745. if (result['备注']) {
  746. this.formData.productDesc = result['备注'];
  747. }
  748. if (result['付款方式']) {
  749. this.getPaymentType(result['付款方式'])
  750. this.formData.payType = result['付款方式'];
  751. }
  752. // return result;
  753. } catch (e) {
  754. uni.$u.toast("文本识别异常");
  755. }
  756. },
  757. // 清空识别内容
  758. clearRecognitionContent() {
  759. this.recognitionContent = '';
  760. },
  761. // 识别内容 回显付款方式
  762. getPaymentType(val) {
  763. let arr = []
  764. this.paymentTabList.filter(item => {
  765. if (item.name == val) arr.push(item.value)
  766. })
  767. if (arr.length > 0) {
  768. this.payTypeEcho = arr[0]
  769. }
  770. }
  771. }
  772. }
  773. </script>
  774. <style lang="scss" scoped>
  775. @import '../styles/add.scss';
  776. </style>