OrderItems.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. <template>
  2. <div class="container">
  3. <el-alert type="warning"
  4. :title="type+'项目条目'"
  5. :closable="false" show-icon style="margin-bottom: 15px"></el-alert>
  6. <el-tabs>
  7. <el-tab-pane label="图表">
  8. <el-divider>标准配置</el-divider>
  9. <el-row :gutter="24" type="flex" style="flex-wrap: wrap; flex-direction: row">
  10. <el-col :span="12" v-for="(item, index) in baseDevice" :key="item.id">
  11. <el-card shadow="always">
  12. <div slot="header" class="clearfix">
  13. <el-link @click="() => { $router.push({ path: `/pj/pj-goods-detail/${item.good_id}` }) }">{{ item.name }}</el-link>
  14. <el-button v-if="boolFounder" size="mini" @click="changeEdit(item)">修改</el-button>
  15. </div>
  16. <div>
  17. <div class="param-item">
  18. <div class="image">
  19. <el-link @click="() => { $router.push({ path: `/pj/pj-goods-detail/${item.good_id}` }) }">
  20. <img :src="item.image">
  21. </el-link>
  22. </div>
  23. <div class="info">
  24. <div>生产型号:{{ item.code }}</div>
  25. <div>产品编码:{{ item.no }}</div>
  26. <div>生产周期:{{ item.produce_day }}天</div>
  27. <div>数量:{{item.qty}}</div>
  28. <div>价格:{{item.price}}</div>
  29. </div>
  30. </div>
  31. <div class="myFont">{{ item.sales_remark }}</div>
  32. <el-row>
  33. <el-col :span="12">
  34. <template v-if="boolFounder || permissions.filter(p => p === 'pjTech' || p === 'pjOrderItemsList').length > 0">
  35. <el-divider>技术:
  36. <el-button type="text" icon="el-icon-edit-outline" @click="handleTechSave(item)">保存</el-button>
  37. </el-divider>
  38. <div class="tech_panel">
  39. <div class="myFont">填写人:
  40. <el-tooltip class="item" effect="dark" :content="item.tech_name" placement="top">
  41. <span style="font-size: 11px">{{item.tech_name}}</span>
  42. </el-tooltip>
  43. </div>
  44. <div class="myFont">填写时间:
  45. <el-tooltip class="item" effect="dark" :content="item.tech_time" placement="top">
  46. <span style="font-size: 11px">{{ item.tech_time }}</span>
  47. </el-tooltip>
  48. </div>
  49. <div>硬件版本:<el-input v-model="item.hard_ver" size="small"></el-input></div>
  50. <div>软件版本:<el-input v-model="item.soft_ver" size="small"></el-input></div>
  51. <div>备注:<el-input type="textarea" rows="3" placeholder="备注,最大150字" maxlength="150" show-word-limit v-model="item.tech_remark"></el-input></div>
  52. </div>
  53. </template>
  54. <template v-else>
  55. <el-divider>技术:</el-divider>
  56. <div class="tech_panel myFont">
  57. <div class="">填写人:
  58. <el-tooltip class="item" effect="dark" :content="item.tech_name" placement="top">
  59. <span style="font-size: 11px">{{item.tech_name}}</span>
  60. </el-tooltip>
  61. </div>
  62. <div>填写时间:
  63. <el-tooltip class="item" effect="dark" :content="item.tech_time" placement="top">
  64. <span style="font-size: 11px">{{ item.tech_time }}</span>
  65. </el-tooltip>
  66. </div>
  67. <div>硬件版本:<el-tooltip class="item" effect="dark" :content="item.hard_ver" placement="top">
  68. <span style="font-size: 11px">{{item.hard_ver}}</span>
  69. </el-tooltip>
  70. </div>
  71. <div>软件版本:<el-tooltip class="item" effect="dark" :content="item.soft_ver" placement="top">
  72. <span style="font-size: 11px">{{item.soft_ver}}</span>
  73. </el-tooltip></div>
  74. <div>备注:<el-tooltip class="item" effect="dark" :content="item.tech_remark" placement="top">
  75. <span style="font-size: 11px">{{item.tech_remark}}</span>
  76. </el-tooltip></div>
  77. </div>
  78. </template>
  79. </el-col>
  80. <el-col :span="12">
  81. <template v-if="boolFounder || permissions.filter(p => p === 'pjOrderItemsList').length > 0">
  82. <el-divider>生产:
  83. <el-button type="text" icon="el-icon-edit-outline" @click="handleProduceSave(item)">保存</el-button>
  84. </el-divider>
  85. <div class="tech_panel">
  86. <div class="myFont">填写人:
  87. <el-tooltip class="item" effect="dark" :content="item.produce_name" placement="top">
  88. <span style="font-size: 11px">{{item.produce_name}}</span>
  89. </el-tooltip>
  90. </div>
  91. <div class="myFont">填写时间:
  92. <el-tooltip class="item" effect="dark" :content="item.produce_time" placement="top">
  93. <span style="font-size: 11px">{{ item.produce_time }}</span>
  94. </el-tooltip>
  95. </div>
  96. <div>已产量:<el-input v-model="item.produced_qty"><template slot="append">共{{item.qty}}</template></el-input></div>
  97. <div>发货量:<el-input v-model="item.shipped_qty" /></div>
  98. <div>备注:
  99. <el-input type="textarea" rows="3" placeholder="备注,最大150字" maxlength="150" show-word-limit v-model="item.produced_remark"></el-input>
  100. </div>
  101. <div>生产状态:
  102. <el-select placeholder="请选择" slot="prepend" v-model="item.produce_status">
  103. <el-option value="采购原料中"></el-option>
  104. <el-option value="生产中"></el-option>
  105. <el-option value="完成"></el-option>
  106. </el-select>
  107. </div>
  108. <div @click="clickImg(index)">
  109. <el-upload :action="`${MixinUploadApi}?scene=pjorders`" :file-list="getImg(item.name, item.produce_img)" :on-preview="handlePictureCardPreview" :before-upload="beforeAvatarUpload"
  110. :on-success="handleImageSuccess" :on-remove="handleRemove" :on-exceed="handleExceed" :limit="1">
  111. <el-button v-if="!item.produce_img" size="small" type="primary">点击上传</el-button>
  112. </el-upload>
  113. </div>
  114. </div>
  115. </template>
  116. <template v-else>
  117. <el-divider>生产情况</el-divider>
  118. <div class="tech_panel myFont">
  119. <div>填写人:
  120. <el-tooltip class="item" effect="dark" :content="item.produce_name" placement="top">
  121. <span style="font-size: 11px">{{item.produce_name}}</span>
  122. </el-tooltip>
  123. </div>
  124. <div>填写时间:
  125. <el-tooltip class="item" effect="dark" :content="item.produce_time" placement="top">
  126. <span style="font-size: 11px">{{ item.produce_time }}</span>
  127. </el-tooltip>
  128. </div>
  129. <div>已产量:<el-tooltip class="item" effect="dark" :content="item.produced_qty" placement="top">
  130. <span style="font-size: 11px">{{ item.produced_qty }}</span>
  131. </el-tooltip>件</div>
  132. <div>发货量:<el-tooltip class="item" effect="dark" :content="item.shipped_qty" placement="top">
  133. <span style="font-size: 11px">{{ item.shipped_qty }}</span>
  134. </el-tooltip>件</div>
  135. <div>备注:<el-tooltip class="item" effect="dark" :content="item.produced_remark" placement="top">
  136. <span style="font-size: 11px">{{ item.produced_remark }}</span>
  137. </el-tooltip></div>
  138. <div>生产状态:<span style="font-size: 11px">{{ item.produce_status }}</span></div>
  139. <div @click="clickImg(index)">
  140. <el-upload :action="`${MixinUploadApi}?scene=pjorders`" :file-list="getImg(item.name, item.produce_img)" :on-preview="handlePictureCardPreview" :before-upload="beforeAvatarUpload"
  141. :on-success="handleImageSuccess" :on-remove="handleRemove" :on-exceed="handleExceed" disabled :limit="1">
  142. </el-upload>
  143. </div>
  144. </div>
  145. </template>
  146. </el-col>
  147. </el-row>
  148. </div>
  149. </el-card>
  150. </el-col>
  151. </el-row>
  152. <el-divider>其它选配</el-divider>
  153. <el-row :gutter="24" type="flex" style="flex-wrap: wrap; flex-direction: row">
  154. <el-col :span="12" v-for="item in addonDevice" :key="item.id">
  155. <el-card shadow="always">
  156. <div slot="header" class="clearfix">
  157. <el-link @click="() => { $router.push({ path: `/pj/pj-goods-detail/${item.good_id}` }) }">{{ item.name }}</el-link>
  158. <el-button v-if="boolFounder" size="mini" @click="changeEdit(item)">修改</el-button>
  159. </div>
  160. <div>
  161. <div class="param-item">
  162. <div class="image">
  163. <el-link @click="() => { $router.push({ path: `/pj/pj-goods-detail/${item.good_id}` }) }">
  164. <img :src="item.image">
  165. </el-link>
  166. </div>
  167. <div class="info">
  168. <div>生产型号:{{ item.code }}</div>
  169. <div>产品编码:{{ item.no }}</div>
  170. <div>生产周期:{{ item.produce_day }}天</div>
  171. <div>数量:{{item.qty}}</div>
  172. <div>价格:{{item.price}}</div>
  173. </div>
  174. </div>
  175. <div class="myFont">{{ item.sales_remark }}</div>
  176. <el-row>
  177. <el-col :span="12">
  178. <template v-if="boolFounder || permissions.filter(p => p === 'pjTech' || p === 'pjOrderItemsList').length > 0">
  179. <el-divider>技术:
  180. <el-button type="text" icon="el-icon-edit-outline" @click="handleTechSave(item)">保存</el-button>
  181. </el-divider>
  182. <div class="tech_panel">
  183. <div class="myFont">填写人:
  184. <el-tooltip class="item" effect="dark" :content="item.tech_name" placement="top">
  185. <span style="font-size: 11px">{{item.tech_name}}</span>
  186. </el-tooltip>
  187. </div>
  188. <div class="myFont">填写时间:
  189. <el-tooltip class="item" effect="dark" :content="item.tech_time" placement="top">
  190. <span style="font-size: 11px">{{ item.tech_time }}</span>
  191. </el-tooltip>
  192. </div>
  193. <div>硬件版本:<el-input v-model="item.hard_ver" size="small"></el-input></div>
  194. <div>软件版本:<el-input v-model="item.soft_ver" size="small"></el-input></div>
  195. <div>备注:<el-input type="textarea" rows="3" placeholder="备注,最大150字" maxlength="150" show-word-limit v-model="item.tech_remark"></el-input></div>
  196. </div>
  197. </template>
  198. <template v-else>
  199. <el-divider>技术:</el-divider>
  200. <div class="tech_panel myFont">
  201. <div class="">填写人:
  202. <el-tooltip class="item" effect="dark" :content="item.tech_name" placement="top">
  203. <span style="font-size: 11px">{{item.tech_name}}</span>
  204. </el-tooltip>
  205. </div>
  206. <div>填写时间:
  207. <el-tooltip class="item" effect="dark" :content="item.tech_time" placement="top">
  208. <span style="font-size: 11px">{{ item.tech_time }}</span>
  209. </el-tooltip>
  210. </div>
  211. <div>硬件版本:<el-tooltip class="item" effect="dark" :content="item.hard_ver" placement="top">
  212. <span style="font-size: 11px">{{item.hard_ver}}</span>
  213. </el-tooltip>
  214. </div>
  215. <div>软件版本:<el-tooltip class="item" effect="dark" :content="item.soft_ver" placement="top">
  216. <span style="font-size: 11px">{{item.soft_ver}}</span>
  217. </el-tooltip></div>
  218. <div>备注:<el-tooltip class="item" effect="dark" :content="item.tech_remark" placement="top">
  219. <span style="font-size: 11px">{{item.tech_remark}}</span>
  220. </el-tooltip></div>
  221. </div>
  222. </template>
  223. </el-col>
  224. <el-col :span="12">
  225. <template v-if="boolFounder || permissions.filter(p => p === 'pjOrderItemsList').length > 0">
  226. <el-divider>生产:
  227. <el-button type="text" icon="el-icon-edit-outline" @click="handleProduceSave(item)">保存</el-button>
  228. </el-divider>
  229. <div class="tech_panel">
  230. <div class="myFont">填写人:
  231. <el-tooltip class="item" effect="dark" :content="item.produce_name" placement="top">
  232. <span style="font-size: 11px">{{item.produce_name}}</span>
  233. </el-tooltip>
  234. </div>
  235. <div class="myFont">填写时间:
  236. <el-tooltip class="item" effect="dark" :content="item.produce_time" placement="top">
  237. <span style="font-size: 11px">{{ item.produce_time }}</span>
  238. </el-tooltip>
  239. </div>
  240. <div>已产量:<el-input v-model="item.produced_qty"><template slot="append">共{{item.qty}}</template></el-input></div>
  241. <div>发货量:<el-input v-model="item.shipped_qty" /></div>
  242. <div>备注:
  243. <el-input type="textarea" rows="3" placeholder="备注,最大150字" maxlength="150" show-word-limit v-model="item.produced_remark"></el-input>
  244. </div>
  245. <div>生产状态:
  246. <el-select placeholder="请选择" slot="prepend" v-model="item.produce_status">
  247. <el-option value="采购原料中"></el-option>
  248. <el-option value="生产中"></el-option>
  249. <el-option value="完成"></el-option>
  250. </el-select>
  251. </div>
  252. <div @click="clickImg(index)">
  253. <el-upload :action="`${MixinUploadApi}?scene=pjorders`" :file-list="getImg(item.name, item.produce_img)" :on-preview="handlePictureCardPreview" :before-upload="beforeAvatarUpload"
  254. :on-success="handleImageSuccess" :on-remove="handleRemove" :on-exceed="handleExceed" :limit="1">
  255. <el-button v-if="!item.produce_img" size="small" type="primary">点击上传</el-button>
  256. </el-upload>
  257. </div>
  258. </div>
  259. </template>
  260. <template v-else>
  261. <el-divider>生产情况</el-divider>
  262. <div class="tech_panel myFont">
  263. <div>填写人:
  264. <el-tooltip class="item" effect="dark" :content="item.produce_name" placement="top">
  265. <span style="font-size: 11px">{{item.produce_name}}</span>
  266. </el-tooltip>
  267. </div>
  268. <div>填写时间:
  269. <el-tooltip class="item" effect="dark" :content="item.produce_time" placement="top">
  270. <span style="font-size: 11px">{{ item.produce_time }}</span>
  271. </el-tooltip>
  272. </div>
  273. <div>已产量:<el-tooltip class="item" effect="dark" :content="item.produced_qty" placement="top">
  274. <span style="font-size: 11px">{{ item.produced_qty }}</span>
  275. </el-tooltip>件</div>
  276. <div>发货量:<el-tooltip class="item" effect="dark" :content="item.shipped_qty" placement="top">
  277. <span style="font-size: 11px">{{ item.shipped_qty }}</span>
  278. </el-tooltip>件</div>
  279. <div>备注:<el-tooltip class="item" effect="dark" :content="item.produced_remark" placement="top">
  280. <span style="font-size: 11px">{{ item.produced_remark }}</span>
  281. </el-tooltip></div>
  282. <div>生产状态:<span style="font-size: 11px">{{ item.produce_status }}</span></div>
  283. <div @click="clickImg(index)">
  284. <el-upload :action="`${MixinUploadApi}?scene=pjorders`" :file-list="getImg(item.name, item.produce_img)" :on-preview="handlePictureCardPreview" :before-upload="beforeAvatarUpload"
  285. :on-success="handleImageSuccess" :on-remove="handleRemove" :on-exceed="handleExceed" disabled :limit="1">
  286. </el-upload>
  287. </div>
  288. </div>
  289. </template>
  290. </el-col>
  291. </el-row>
  292. </div>
  293. </el-card>
  294. </el-col>
  295. </el-row>
  296. </el-tab-pane>
  297. <el-tab-pane label="表格">
  298. <el-table :data="listData" stripe style="width: 100%;">
  299. <el-table-column prop="name" label="名称"></el-table-column>
  300. <el-table-column label="基础件?">
  301. <template slot-scope="scope">
  302. <el-tag type="success" v-if="scope.row.type_base">标准件</el-tag>
  303. <el-tag type="info" v-else>配件</el-tag>
  304. </template>
  305. </el-table-column>
  306. <el-table-column prop="code" show-overflow-tooltip label="生产型号"></el-table-column>
  307. <el-table-column prop="no" show-overflow-tooltip label="生产编码"></el-table-column>
  308. <el-table-column prop="hard_ver" show-overflow-tooltip label="硬件版本"></el-table-column>
  309. <el-table-column prop="soft_ver" show-overflow-tooltip label="软件版本"></el-table-column>
  310. <el-table-column prop="qty" label="数量" width="100"></el-table-column>
  311. <el-table-column prop="produced_qty" label="已产数量" width="100"></el-table-column>
  312. <el-table-column prop="produced_qty" label="需产数量" width="100">
  313. <template slot-scope="scope">
  314. <span>{{ scope.row.qty - scope.row.produced_qty}}</span>
  315. </template>
  316. </el-table-column>
  317. <el-table-column prop="price" label="价格" width="100"></el-table-column>
  318. <el-table-column prop="sales_remark" show-overflow-tooltip label="销售备注"></el-table-column>
  319. </el-table>
  320. <div style="margin-top: 20px">
  321. <el-button type="primary" @click="outExcel">导出Excel</el-button>
  322. </div>
  323. </el-tab-pane>
  324. </el-tabs>
  325. <el-dialog :visible.sync="dialogImage">
  326. <img width="100%" :src="dialogImageUrl" alt="">
  327. </el-dialog>
  328. <el-drawer
  329. title="设备"
  330. :visible.sync="goodsSelectVisible"
  331. :append-to-body="true"
  332. size="80%"
  333. >
  334. <goods-select :type="type" :type_base="type_base" @selected="goodsSelect"></goods-select>
  335. </el-drawer>
  336. </div>
  337. </template>
  338. <script>
  339. import * as API_orderItems from '@/api/pjOrderItems.js'
  340. import { Foundation } from '~/ui-utils'
  341. import Storage from '../../utils/storage'
  342. import goodsSelect from '../goods/goodsSelect.vue'
  343. import { editModel } from '../../api/pjOrderItems'
  344. export default {
  345. name: 'pjOrderItems',
  346. components: { goodsSelect },
  347. props: {
  348. orderNo: {
  349. type: String,
  350. value: ''
  351. },
  352. type: {
  353. type: String,
  354. value: '服务器版'
  355. }
  356. },
  357. data() {
  358. return {
  359. boolFounder: JSON.parse(Storage.getItem('admin_user')).founder === 1,
  360. permissions: [],
  361. keyId: '',
  362. params: {
  363. page_no: 1,
  364. page_size: 1000,
  365. sort: 'type_base',
  366. dir: 'desc'
  367. },
  368. listData: [],
  369. baseDevice: [],
  370. addonDevice: [],
  371. dialogImage: false,
  372. dialogImageUrl: '',
  373. changeId: null,
  374. index: 0,
  375. goodsSelectVisible: false,
  376. type_base: true
  377. }
  378. },
  379. mounted() {
  380. if (!this.boolFounder) {
  381. this.permissions = JSON.parse(Storage.getItem('permissions'))
  382. }
  383. },
  384. activated() {
  385. },
  386. watch: {
  387. orderNo(val) {
  388. if (val) {
  389. this.getData()
  390. }
  391. }
  392. },
  393. methods: {
  394. getData() {
  395. this.params.fixedCondition = 'order_no=' + this.orderNo
  396. API_orderItems.getList(this.params).then(res => {
  397. this.listData = res.data
  398. this.baseDevice = this.listData.filter(p => p.type_base)
  399. this.addonDevice = this.listData.filter(p => !p.type_base)
  400. })
  401. },
  402. handleTechSave(item) {
  403. const adminUser = JSON.parse(Storage.getItem('admin_user'))
  404. item.tech_user = adminUser.uid
  405. if (item.tech_name) {
  406. item.tech_name = item.tech_name + ',' + adminUser.realname
  407. } else {
  408. item.tech_name = adminUser.realname
  409. }
  410. if (item.tech_time) {
  411. item.tech_time = item.tech_time + ',' + Foundation.unixToDate(Math.round(new Date() / 1000))
  412. } else {
  413. item.tech_time = Foundation.unixToDate(Math.round(new Date() / 1000))
  414. }
  415. API_orderItems.editModelAndStatus(item, 1).then(res => {
  416. this.$message.success('保存成功!')
  417. })
  418. },
  419. handleProduceSave(item) {
  420. if (item.produced_qty) {
  421. if (item.produced_qty < 0) {
  422. this.$message.error('数量不能小于0!')
  423. return
  424. }
  425. }
  426. const adminUser = JSON.parse(Storage.getItem('admin_user'))
  427. item.produce_user = adminUser.uid
  428. if (item.produce_name) {
  429. item.produce_name = item.produce_name + ',' + adminUser.realname
  430. } else {
  431. item.produce_name = adminUser.realname
  432. }
  433. if (item.produce_time) {
  434. item.produce_time = item.produce_time + ',' + Foundation.unixToDate(Math.round(new Date() / 1000))
  435. } else {
  436. item.produce_time = Foundation.unixToDate(Math.round(new Date() / 1000))
  437. }
  438. API_orderItems.editModelAndStatus(item, 2).then(res => {
  439. this.$message.success('保存成功!')
  440. })
  441. },
  442. outExcel() {
  443. const json = {
  444. sheet_name: '产品列表',
  445. sheet_values: this.listData.map(item => ({
  446. '产品名称': item.name,
  447. '生产型号': item.code,
  448. '生产编码': item.no,
  449. '硬件版本': item.hard_ver,
  450. '软件编码': item.soft_ver,
  451. '数量': item.qty,
  452. '单价': Foundation.formatPrice(item.price),
  453. '销售备注': item.sales_remark
  454. }))
  455. }
  456. this.MixinExportJosnToExcel(json, '产品列表')
  457. },
  458. handlePictureCardPreview(file) {
  459. this.dialogImageUrl = file.url
  460. this.dialogImage = true
  461. },
  462. /** 图片上传之前的校验 */
  463. beforeAvatarUpload(file) {
  464. const isType = file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png'
  465. const isLt1M = file.size / 1024 / 1024 < 3
  466. if (!isType) {
  467. this.$message.error('上传图片只能是 JPG/JPEG/PNG 格式!')
  468. }
  469. if (!isLt1M) {
  470. this.$message.error('上传图片大小不能超过 3MB!')
  471. }
  472. return isType && isLt1M
  473. },
  474. /** 文件列表上传成功时的钩子 上传成功校验 */
  475. async handleImageSuccess(response, file) {
  476. if (file.status === 'success') {
  477. this.$set(this.baseDevice[this.index], 'produce_img', response.url)
  478. }
  479. },
  480. handleRemove(e) {
  481. setTimeout(() => {
  482. this.$set(this.baseDevice[this.index], 'produce_img', null)
  483. }, 400)
  484. },
  485. handleExceed(e) {
  486. this.$message.error('最多只能上传一个文件!')
  487. },
  488. clickImg(index) {
  489. this.index = index
  490. },
  491. changeEdit(item) {
  492. this.changeId = item.id
  493. this.type_base = item.type_base
  494. this.goodsSelectVisible = true
  495. },
  496. goodsSelect(list) {
  497. if (list.length > 1) {
  498. this.$message.error('只能选择一个产品!')
  499. return
  500. }
  501. if (this.listData.findIndex(p => p.good_id === list[0].id) > -1) {
  502. this.$message.error('产品已存在!')
  503. return
  504. }
  505. const data = {
  506. good_id: list[0].id,
  507. name: list[0].name,
  508. code: list[0].code,
  509. no: list[0].no,
  510. image: list[0].image,
  511. id: this.changeId
  512. }
  513. API_orderItems.editModel(data).then(res => {
  514. this.$message.success('保存成功!')
  515. this.getData()
  516. })
  517. this.goodsSelectVisible = false
  518. },
  519. getImg(name, img) {
  520. if (img) {
  521. return [{ name: name + '备注图', url: img }]
  522. } else {
  523. return []
  524. }
  525. },
  526. formartLen(str) {
  527. console.log('str===', str)
  528. if (!str) {
  529. return ''
  530. } else {
  531. return str.length > 20 ? str.substr(0, 20) + '...' : str
  532. }
  533. }
  534. }
  535. }
  536. </script>
  537. <style type="text/scss" lang="scss" scoped>
  538. .param-item {
  539. display: flex;
  540. align-items: center;
  541. //justify-content: space-between;
  542. padding: 3px;
  543. font-size: 14px;
  544. .image {
  545. width: 38%;
  546. }
  547. .image img {
  548. width: 100px;
  549. height: 100px;
  550. }
  551. .info div {
  552. margin-bottom: 5px;
  553. }
  554. &.empty {
  555. background-color: #fff
  556. }
  557. }
  558. .tech_panel div{
  559. margin: 8px 5px 3px 3px;
  560. }
  561. .avatar {
  562. width: 100px;
  563. height: 100px;
  564. display: block;
  565. }
  566. .myFont {
  567. overflow: hidden;
  568. text-overflow: ellipsis; //超出部分以省略号显示
  569. white-space: nowrap;
  570. width: 16em; //用px单位亦可行
  571. }
  572. </style>