plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1808 lines
62 KiB

2 years ago
2 years ago
2 years ago
2 years ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- 查询条件 -->
  4. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  5. <el-form-item :label="'物料编码'">
  6. <el-input v-model="searchData.partNo" clearable style="width: 120px"></el-input>
  7. </el-form-item>
  8. <el-form-item :label="'物料描述'">
  9. <el-input v-model="searchData.partDesc" clearable style="width: 210px"></el-input>
  10. </el-form-item>
  11. <el-form-item :label="' '">
  12. <el-button @click="getDataList()">查询</el-button>
  13. <el-button type="primary" @click="addModal()">新增</el-button>
  14. <!-- <el-button type="primary" @click="delModal()">删除</el-button>-->
  15. <download-excel
  16. :fields="fields()"
  17. :data="exportData"
  18. type="xls"
  19. :name="exportName"
  20. :header="exportHeader"
  21. :footer="exportFooter"
  22. :fetch="createExportData"
  23. :before-generate="startDownload"
  24. :before-finish="finishDownload"
  25. worksheet="导出信息"
  26. class="el-button el-button--primary el-button--medium">
  27. {{ "导出" }}
  28. </download-excel>
  29. </el-form-item>
  30. </el-form>
  31. <!-- 物料列表 -->
  32. <el-table
  33. :height="height"
  34. :data="dataList"
  35. border
  36. ref="partTable"
  37. :row-style="rowStyle"
  38. @row-click="partClickRow"
  39. @selection-change="selectionPart"
  40. @current-change="changeCurrentRow"
  41. style="width: 100%;">
  42. <el-table-column
  43. type="selection"
  44. header-align="center"
  45. align="center"
  46. :selectable="selectFlag"
  47. width="50">
  48. </el-table-column>
  49. <el-table-column
  50. v-for="(item,index) in columnList" :key="index"
  51. :sortable="item.columnSortable"
  52. :prop="item.columnProp"
  53. :header-align="item.headerAlign"
  54. :show-overflow-tooltip="item.showOverflowTooltip"
  55. :align="item.align"
  56. :fixed="item.fixed === ''?false:item.fixed"
  57. :min-width="item.columnWidth"
  58. :label="item.columnLabel">
  59. <template slot-scope="scope">
  60. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  61. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  62. </template>
  63. </el-table-column>
  64. <el-table-column
  65. fixed="right"
  66. header-align="center"
  67. align="center"
  68. width="100"
  69. label="操作">
  70. <template slot-scope="scope">
  71. <el-link style="cursor: pointer" @click="updateModal(scope.row)">编辑</el-link>
  72. </template>
  73. </el-table-column>
  74. </el-table>
  75. <selectDiv ref="selectDiv"></selectDiv>
  76. <!-- 分页插件 -->
  77. <el-pagination
  78. @size-change="sizeChangeHandle"
  79. @current-change="currentChangeHandle"
  80. :current-page="pageIndex"
  81. :page-sizes="[20, 50, 100, 200, 500]"
  82. :page-size="pageSize"
  83. :total="totalPage"
  84. layout="total, sizes, prev, pager, next, jumper">
  85. </el-pagination>
  86. <!-- 物料新增/编辑模态框 -->
  87. <el-dialog :title="modalData.title" top="29vh" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="737px">
  88. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  89. <el-form-item label="物料编码" prop="partNo" :rules="rules.partNo">
  90. <el-input v-model="modalData.partNo" clearable style="width: 120px" :disabled="modalDisableFlag"></el-input>
  91. </el-form-item>
  92. <el-form-item label="物料描述" prop="partDesc" :rules="rules.partDesc" style="margin-left: -10px">
  93. <el-input v-model="modalData.partDesc" clearable style="width: 330px"></el-input>
  94. </el-form-item>
  95. <el-form-item style="margin-top: 20px">
  96. <el-checkbox v-model="modalData.conditionCodeUsageDb" true-label="Y">允许条件代码</el-checkbox><br>
  97. <el-checkbox v-model="modalData.multilevelTrackingDb" true-label="Y">多级跟踪</el-checkbox><br>
  98. <el-checkbox v-model="modalData.allowAsNotConsumedDb" true-label="Y">允许为未使用</el-checkbox>
  99. </el-form-item>
  100. <!-- <el-form-item v-if="modalData.flag === '2' && modalData.officialFlag !== 'Y'">-->
  101. <!-- <el-button type="primary" @click="toBecomeOfficialPart" style="margin-top: 62px;margin-left: 10px;width: 110px">转正式物料</el-button>-->
  102. <!-- </el-form-item>-->
  103. </el-form>
  104. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  105. <el-form-item prop="umId" :rules="rules.umId">
  106. <span style="cursor: pointer" slot="label" @click="getBaseList(1007)"><a herf="#">计量单位</a></span>
  107. <el-input v-model="modalData.umId" @blur="umIdBlur(1007)" style="width: 120px"></el-input>
  108. <el-input v-model="modalData.umName" disabled style="width: 330px"></el-input>
  109. </el-form-item>
  110. </el-form>
  111. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  112. <el-form-item prop="codeNo" :rules="rules.codeDesc">
  113. <span style="cursor: pointer" slot="label" @click="getBaseList(22)"><a herf="#">属性模板</a></span>
  114. <el-input v-model="modalData.codeNo" style="width: 120px"></el-input>
  115. <el-input v-model="modalData.codeDesc" disabled style="width: 330px"></el-input>
  116. </el-form-item>
  117. <el-form-item label="批次/批次跟踪">
  118. <el-select v-model="modalData.lotTrackingCode" style="width: 230px">
  119. <el-option label="Lot Tracking" value="Lot Tracking"></el-option>
  120. <el-option label="Not Lot Tracking" value="Not Lot Tracking"></el-option>
  121. <el-option label="Order Based" value="Order Based"></el-option>
  122. </el-select>
  123. </el-form-item>
  124. </el-form>
  125. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  126. <el-form-item>
  127. <span style="cursor: pointer" slot="label" @click="getBaseList(109)"><a herf="#">物料分组</a></span>
  128. <el-input v-model="modalData.partMainGroup" @blur="groupIdBlur(109)" style="width: 120px"></el-input>
  129. <el-input v-model="modalData.groupName" disabled style="width: 330px"></el-input>
  130. </el-form-item>
  131. <el-form-item label="批量规则">
  132. <el-select v-model="modalData.lotQuantityRule" :disabled="modalData.lotTrackingCode === 'Not Lot Tracking'" style="width: 230px">
  133. <el-option label="One Lot Per Production Order" value="One Lot Per Production Order"></el-option>
  134. <el-option label="Many Lots Per Production Order" value="Many Lots Per Production Order"></el-option>
  135. </el-select>
  136. </el-form-item>
  137. </el-form>
  138. <el-form :inline="true" label-position="top" :model="modalData" :rules="rules" style="margin-left: 7px;margin-top: -5px;">
  139. <el-form-item label="净重">
  140. <el-input class="inlineNumber numInput" v-model="modalData.weightNet" @input="handleInput(modalData.weightNet,1)" type="number" style="width: 120px"></el-input>
  141. </el-form-item>
  142. <el-form-item label="净重单位" style="margin-left: -10px">
  143. <dict-data-select v-if="modalFlag" v-model="modalData.uomForWeightNet" style="width: 330px" :use-default-value="false" dict-type="part_uom_for_weight_net"></dict-data-select>
  144. </el-form-item>
  145. <el-form-item label="子批次规则">
  146. <el-select v-model="modalData.subLotRule" :disabled="modalData.lotTrackingCode === 'Not Lot Tracking'" style="width: 230px">
  147. <el-option label="Sub Lots Allowed" value="Sub Lots Allowed"></el-option>
  148. <el-option label="No Sub Lots Allowed" value="No Sub Lots Allowed"></el-option>
  149. </el-select>
  150. </el-form-item>
  151. </el-form>
  152. <el-form :inline="true" label-position="top" :model="modalData" style="margin-left: 7px;margin-top: -5px;">
  153. <el-form-item label="体积">
  154. <el-input class="inlineNumber numInput" v-model="modalData.volumeNet" @input="handleInput(modalData.volumeNet,2)" type="number" style="width: 120px"></el-input>
  155. </el-form-item>
  156. <el-form-item label="体积单位" style="margin-left: -10px">
  157. <dict-data-select v-if="modalFlag" v-model="modalData.uomForVolumeNet" style="width: 330px" dict-type="part_uom_for_volume_net"></dict-data-select>
  158. </el-form-item>
  159. <el-form-item label="组件批次规则">
  160. <el-select v-model="modalData.componentLotRule" :disabled="modalData.lotTrackingCode === 'Not Lot Tracking'" style="width: 230px">
  161. <el-option label="Many Lots Allowed" value="Many Lots Allowed"></el-option>
  162. <el-option label="One Lot Allowed" value="One Lot Allowed"></el-option>
  163. </el-select>
  164. </el-form-item>
  165. </el-form>
  166. <el-footer style="height:35px;margin-top: 25px;text-align:center">
  167. <el-button type="primary" @click="saveData()">保存</el-button>
  168. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  169. </el-footer>
  170. </el-dialog>
  171. <!-- 页签 -->
  172. <el-tabs v-model="activeTable" style="width: 100%" :style="{height: this.secondHeight + 'px'}" type="border-card" @tab-click="tabClick" class="customer-tab">
  173. <!-- 物料属性页签 -->
  174. <el-tab-pane label="物料属性" name="part_item">
  175. <el-form label-position="top" style="margin-top: 2px; margin-left: 2px;">
  176. <el-button type="primary" @click="addOrDelItem">新增</el-button>
  177. <!-- <el-button type="primary" @click="updateItemValue">编辑</el-button>-->
  178. <el-button type="primary" :loading="loading" @click="clickSave">{{ attributeDialog?'编辑':'保存' }}</el-button>
  179. </el-form>
  180. <div class="rq" v-if="attributeDialog">
  181. <el-table
  182. :data="partItemList"
  183. :height="secondHeight - 60"
  184. border
  185. style="width: 100%;">
  186. <el-table-column
  187. v-for="(item,index) in columnItemList" :key="index"
  188. :sortable="item.columnSortable"
  189. :prop="item.columnProp"
  190. :header-align="item.headerAlign"
  191. :show-overflow-tooltip="item.showOverflowTooltip"
  192. :align="item.align"
  193. :fixed="item.fixed==''?false:item.fixed"
  194. :min-width="item.columnWidth"
  195. :label="item.columnLabel">
  196. <template slot-scope="scope">
  197. <div v-if="item.columnProp !== 'textValue' && item.columnProp !== 'numValue'">
  198. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  199. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  200. </div>
  201. <div v-else>
  202. {{scope.row.textValue?scope.row.textValue:scope.row.numValue}}
  203. </div>
  204. </template>
  205. </el-table-column>
  206. </el-table>
  207. </div>
  208. <div class="rq" v-else>
  209. <el-table
  210. :data="copyAttributeList"
  211. :height="secondHeight - 60"
  212. border
  213. style="width: 100%">
  214. <el-table-column
  215. v-for="(item,index) in columnItemList" :key="index"
  216. :sortable="item.columnSortable"
  217. :prop="item.columnProp"
  218. :header-align="item.headerAlign"
  219. :show-overflow-tooltip="item.showOverflowTooltip"
  220. :align="item.align"
  221. :fixed="item.fixed===''?false:item.fixed"
  222. :min-width="item.columnWidth"
  223. :label="item.columnLabel">
  224. <template slot-scope="scope">
  225. <div v-if="item.columnProp !== 'textValue' && item.columnProp !== 'numValue'">
  226. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  227. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  228. </div>
  229. <div v-else>
  230. <div v-if="scope.row.valueChooseFlag !== 'Y'">
  231. <el-input-number v-model="scope.row.numValue" style="padding: 0;width: 100%" v-if="scope.row.valueTypeDb === 'N'" :controls="false"></el-input-number>
  232. <el-input v-model="scope.row.textValue" v-else></el-input>
  233. </div>
  234. <div v-else>
  235. <el-select style="width: 100%;" v-if="scope.row.valueTypeDb === 'T'" v-model="scope.row.textValue">
  236. <el-option :value="i.availableValue" :label="i.availableValue" v-for="(i,key) in scope.row.list" :key="key"></el-option>
  237. </el-select>
  238. <el-select style="width: 100%;" v-else v-model="scope.row.numValue">
  239. <el-option :value="i.availableValue" :label="i.availableValue" v-for="(i,key) in scope.row.list" :key="key"></el-option>
  240. </el-select>
  241. </div>
  242. </div>
  243. </template>
  244. </el-table-column>
  245. </el-table>
  246. </div>
  247. </el-tab-pane>
  248. </el-tabs>
  249. <!-- 物料属性值编辑模态框 -->
  250. <el-dialog title="物料属性" :close-on-click-modal="false" v-drag :visible.sync="updateItemModelFlag" width="1000px">
  251. <div class="rq ">
  252. <el-table
  253. :data="updatePartItemList"
  254. height="350px"
  255. border
  256. style="width: 100%;">
  257. <el-table-column
  258. v-for="(item,index) in updateColumnItemList" :key="index"
  259. :sortable="item.columnSortable"
  260. :prop="item.columnProp"
  261. :header-align="item.headerAlign"
  262. :show-overflow-tooltip="item.showOverflowTooltip"
  263. :align="item.align"
  264. :fixed="item.fixed==''?false:item.fixed"
  265. :min-width="item.columnWidth"
  266. :label="item.columnLabel">
  267. <template slot-scope="scope">
  268. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  269. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  270. </template>
  271. </el-table-column>
  272. <el-table-column
  273. prop="textValue"
  274. header-align="center"
  275. align="right"
  276. min-width="80"
  277. label="文本值">
  278. <template slot-scope="scope">
  279. <el-input v-if="scope.row.valueTypeDb === 'T' && scope.row.valueChooseFlag === 'N'" v-model="scope.row.textValue" style="height: 11px;padding: 0px " allow-create>;width:98%"></el-input>
  280. <el-select v-if="scope.row.valueTypeDb === 'T' && scope.row.valueChooseFlag === 'Y'" v-model="scope.row.textValue" style="width: 180px" placeholder="请选择">
  281. <el-option v-for="item in scope.row.availableValueList" :key="index" :label="item.availableValue" :value="item.availableValue"></el-option>
  282. </el-select>
  283. <el-input v-if="scope.row.valueTypeDb !== 'T'" v-model="scope.row.textValue" disabled style="height: 11px;padding: 0px " allow-create>;width:98%"></el-input>
  284. </template>
  285. </el-table-column>
  286. <el-table-column
  287. prop="numValue"
  288. header-align="center"
  289. align="right"
  290. min-width="80"
  291. label="数字值">
  292. <template slot-scope="scope">
  293. <el-input v-if="scope.row.valueTypeDb === 'N' && scope.row.valueChooseFlag === 'N'" v-model="scope.row.numValue" style="height: 11px;padding: 0px " allow-create>;width:98%"></el-input>
  294. <el-select v-if="scope.row.valueTypeDb === 'N' && scope.row.valueChooseFlag === 'Y'" v-model="scope.row.numValue" style="width: 180px" placeholder="请选择">
  295. <el-option v-for="item in scope.row.availableValueList" :key="index" :label="item.availableValue" :value="item.availableValue"></el-option>
  296. </el-select>
  297. <el-input v-if="scope.row.valueTypeDb !== 'N'" v-model="scope.row.numValue" disabled style="height: 11px;padding: 0px " allow-create>;width:98%"></el-input>
  298. </template>
  299. </el-table-column>
  300. </el-table>
  301. </div>
  302. <span slot="footer" class="dialog-footer">
  303. <el-button type="primary" @click="commitItemValue()">保存</el-button>
  304. <el-button type="primary" @click="updateItemModelFlag=false">关闭</el-button>
  305. </span>
  306. </el-dialog>
  307. <el-dialog title="新增" :close-on-click-modal="false" v-drag :visible.sync="fastAddFlag" width="1000px">
  308. <div style="font-size: 12px">
  309. <el-form :inline="true" label-position="top" :model="itemData">
  310. <el-form-item :label="'属性编码'">
  311. <el-input v-model="itemData.propertiesItemNo" clearable style="width: 120px"></el-input>
  312. </el-form-item>
  313. <el-form-item :label="'属性名称'">
  314. <el-input v-model="itemData.itemDesc" clearable style="width: 150px"></el-input>
  315. </el-form-item>
  316. <el-form-item :label="' '">
  317. <el-button type="primary" @click="queryMasterPartItem()">查询</el-button>
  318. </el-form-item>
  319. </el-form>
  320. </div>
  321. <el-container style="margin-top: 0px;">
  322. <el-main style="width: 350px;padding: 1px">
  323. <span style="font-size: 12px" >可选属性</span>
  324. <el-table
  325. height="400px"
  326. :data="itemList1"
  327. border
  328. ref="itemTable1"
  329. @row-click="itemClickRow1"
  330. @selection-change="selectionItem1"
  331. highlight-current-row
  332. style="width: 100%">
  333. <el-table-column
  334. type="selection"
  335. header-align="center"
  336. align="center"
  337. :selectable="selectFlag"
  338. width="50">
  339. </el-table-column>
  340. <el-table-column
  341. prop="itNo"
  342. header-align="center"
  343. align="center"
  344. min-width="80"
  345. label="属性编码">
  346. </el-table-column>
  347. <el-table-column
  348. prop="itemDesc"
  349. header-align="center"
  350. align="center"
  351. min-width="200"
  352. label="属性名称">
  353. </el-table-column>
  354. </el-table>
  355. </el-main>
  356. <el-main style="width: 10px;padding: 1px">
  357. <div style="margin-top: 200px;margin-left: 18px">
  358. <el-button type="primary" @click="addItem()">添加>></el-button>
  359. </div>
  360. <div style="margin-top: 15px;margin-left: 18px">
  361. <el-button type="primary" @click="deleteItem()">删除<<</el-button>
  362. </div>
  363. </el-main>
  364. <el-main style="width: 350px;padding: 1px">
  365. <span style="font-size: 12px" >已有属性</span>
  366. <el-table
  367. height="400px"
  368. :data="itemList2"
  369. border
  370. ref="itemTable2"
  371. @row-click="itemClickRow2"
  372. @selection-change="selectionItem2"
  373. highlight-current-row
  374. style="width: 100%">
  375. <el-table-column
  376. type="selection"
  377. header-align="center"
  378. align="center"
  379. :selectable="selectFlag"
  380. width="50">
  381. </el-table-column>
  382. <el-table-column
  383. prop="itNo"
  384. header-align="center"
  385. align="center"
  386. min-width="80"
  387. label="属性编码">
  388. </el-table-column>
  389. <el-table-column
  390. prop="itemDesc"
  391. header-align="center"
  392. align="center"
  393. min-width="200"
  394. label="属性名称">
  395. </el-table-column>
  396. </el-table>
  397. </el-main>
  398. </el-container>
  399. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  400. <el-button type="primary" @click="fastAddFlag = false">关闭</el-button>
  401. </el-footer>
  402. </el-dialog>
  403. <!-- chooseList模态框 -->
  404. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  405. </div>
  406. </template>
  407. <script>
  408. import {
  409. masterPartSearch, // 物料信息列表查询
  410. masterPartInformationSave, // 物料信息新增
  411. masterPartInformationEdit, // 物料信息编辑
  412. masterPartInformationDelete, // 物料信息删除
  413. getMasterPartItem, // 查询物料属性
  414. commitItemValue, // 修改物料属性值
  415. getItemLists, // 获取模板属性
  416. addMasterPartItem, // 新增物料属性
  417. deleteMasterPartItem, // 删除物料属性
  418. queryMasterPartItem,
  419. toBecomeOfficialMasterPart, // 转正式物料
  420. } from '@/api/part/masterPartInformation.js'
  421. import {getChooselistData, verifyData} from "@/api/chooselist/chooselist.js"
  422. import {getProjectPartNo} from '@/api/part/partInformation.js'
  423. import Chooselist from '@/views/modules/common/Chooselist'
  424. import DictDataSelect from '../sys/dict-data-select.vue'
  425. export default {
  426. components: {
  427. DictDataSelect,
  428. Chooselist
  429. },
  430. watch: {
  431. searchData: {
  432. deep: true,
  433. handler: function (newV, oldV) {
  434. this.searchData.partNo = this.searchData.partNo.toUpperCase()
  435. }
  436. },
  437. modalData: {
  438. deep: true,
  439. handler: function (newV, oldV) {
  440. this.modalData.partNo = this.modalData.partNo.toUpperCase()
  441. //this.modalData.umId = this.modalData.umId.toUpperCase()
  442. this.modalData.codeNo = this.modalData.codeNo.toUpperCase()
  443. }
  444. },
  445. itemData: {
  446. deep: true,
  447. handler: function (newV, oldV) {
  448. this.itemData.propertiesItemNo = this.itemData.propertiesItemNo.toUpperCase()
  449. }
  450. }
  451. },
  452. data () {
  453. return {
  454. // 导出
  455. exportData: [],
  456. exportName: '物料档案管理' + this.dayjs().format('YYYYMMDDHHmmss'),
  457. exportHeader: ['物料档案管理'],
  458. exportFooter: [],
  459. resultList: [],
  460. // ======== 行高 ========
  461. height: 200,
  462. secondHeight: 200,
  463. // ======== 分页 ========
  464. pageIndex: 1,
  465. pageSize: 50,
  466. totalPage: 0,
  467. selectedDataNum: 0,
  468. tempCodeNo: '',
  469. // 条件查询
  470. searchData: {
  471. site: '*',
  472. partNo: '',
  473. partDesc: '',
  474. page: 1,
  475. limit: 10
  476. },
  477. // 其它
  478. // 初始页签
  479. activeTable: 'part_item',
  480. // ======== 数据对象 ========
  481. modalData: {
  482. flag: '',
  483. title: '',
  484. partNo: '',
  485. partDesc: '',
  486. umId: '',
  487. umName: '',
  488. partMainGroup: '',
  489. groupName: '',
  490. weightNet: '',
  491. uomForWeightNet: '',
  492. volumeNet: '',
  493. uomForVolumeNet: '',
  494. codeNo: '',
  495. codeDesc: '',
  496. conditionCodeUsageDb: '',
  497. multilevelTrackingDb: '',
  498. allowAsNotConsumedDb: '',
  499. lotTrackingCode: '',
  500. lotQuantityRule: '',
  501. subLotRule: '',
  502. componentLotRule: '',
  503. createDate: '',
  504. createBy: '',
  505. updateDate: '',
  506. updateBy: '',
  507. officialFlag: ''
  508. },
  509. itemData: {
  510. site: this.$store.state.user.site,
  511. partNo: '',
  512. propertiesItemNo: '',
  513. codeNo: '',
  514. itemDesc: '',
  515. textValue: '',
  516. numValue: '',
  517. recordType: 'IP'
  518. },
  519. // ======== 数据列表 ========
  520. dataList: [],
  521. partItemList: [],
  522. updatePartItemList: [],
  523. availableValueList:[],
  524. itemSelections1: [],
  525. itemSelections2: [],
  526. itemList1:[],
  527. itemList2:[],
  528. copyAttributeList: [],
  529. // ======== 列表表头 ========
  530. columnList: [
  531. {
  532. userId: this.$store.state.user.name,
  533. functionId: 104001,
  534. serialNumber: '104001Table1PartNo',
  535. tableId: '104001Table1',
  536. tableName: '物料信息表',
  537. columnProp: 'partNo',
  538. headerAlign: 'center',
  539. align: 'center',
  540. columnLabel: '物料编码',
  541. columnHidden: false,
  542. columnImage: false,
  543. columnSortable: false,
  544. sortLv: 0,
  545. status: true,
  546. fixed: '',
  547. columnWidth: 120
  548. },
  549. {
  550. userId: this.$store.state.user.name,
  551. functionId: 104001,
  552. serialNumber: '104001Table1PartDesc',
  553. tableId: '104001Table1',
  554. tableName: '物料信息表',
  555. columnProp: 'partDesc',
  556. headerAlign: 'center',
  557. align: 'left',
  558. columnLabel: '物料描述',
  559. columnHidden: false,
  560. columnImage: false,
  561. columnSortable: false,
  562. sortLv: 0,
  563. status: true,
  564. fixed: '',
  565. columnWidth: 120
  566. },
  567. {
  568. userId: this.$store.state.user.name,
  569. functionId: 104001,
  570. serialNumber: '104001Table1OfficialFlag',
  571. tableId: '104001Table1',
  572. tableName: '物料信息表',
  573. columnProp: 'officialFlag',
  574. headerAlign: 'center',
  575. align: 'center',
  576. columnLabel: '是否为正式物料',
  577. columnHidden: false,
  578. columnImage: false,
  579. columnSortable: false,
  580. sortLv: 0,
  581. status: true,
  582. fixed: '',
  583. columnWidth: 100
  584. },
  585. {
  586. userId: this.$store.state.user.name,
  587. functionId: 104001,
  588. serialNumber: '104001Table1WeightNet',
  589. tableId: '104001Table1',
  590. tableName: '物料信息表',
  591. columnProp: 'weightNet',
  592. headerAlign: 'center',
  593. align: 'right',
  594. columnLabel: '净重',
  595. columnHidden: false,
  596. columnImage: false,
  597. columnSortable: false,
  598. sortLv: 0,
  599. status: true,
  600. fixed: '',
  601. columnWidth: 60
  602. },
  603. {
  604. userId: this.$store.state.user.name,
  605. functionId: 104001,
  606. serialNumber: '104001Table1UomForWeightNet',
  607. tableId: '104001Table1',
  608. tableName: '物料信息表',
  609. columnProp: 'uomForWeightNet',
  610. headerAlign: 'center',
  611. align: 'center',
  612. columnLabel: '净重单位',
  613. columnHidden: false,
  614. columnImage: false,
  615. columnSortable: false,
  616. sortLv: 0,
  617. status: true,
  618. fixed: '',
  619. columnWidth: 60
  620. },
  621. {
  622. userId: this.$store.state.user.name,
  623. functionId: 104001,
  624. serialNumber: '104001Table1VolumeNet',
  625. tableId: '104001Table1',
  626. tableName: '物料信息表',
  627. columnProp: 'volumeNet',
  628. headerAlign: 'center',
  629. align: 'right',
  630. columnLabel: '体积',
  631. columnHidden: false,
  632. columnImage: false,
  633. columnSortable: false,
  634. sortLv: 0,
  635. status: true,
  636. fixed: '',
  637. columnWidth: 60
  638. },
  639. {
  640. userId: this.$store.state.user.name,
  641. functionId: 104001,
  642. serialNumber: '104001Table1UomForVolumeNet',
  643. tableId: '104001Table1',
  644. tableName: '物料信息表',
  645. columnProp: 'uomForVolumeNet',
  646. headerAlign: 'center',
  647. align: 'center',
  648. columnLabel: '体积单位',
  649. columnHidden: false,
  650. columnImage: false,
  651. columnSortable: false,
  652. sortLv: 0,
  653. status: true,
  654. fixed: '',
  655. columnWidth: 60
  656. },
  657. {
  658. userId: this.$store.state.user.name,
  659. functionId: 104001,
  660. serialNumber: '104001Table1GroupName',
  661. tableId: '104001Table1',
  662. tableName: '物料信息表',
  663. columnProp: 'groupName',
  664. headerAlign: 'center',
  665. align: 'center',
  666. columnLabel: '物料分组',
  667. columnHidden: false,
  668. columnImage: false,
  669. columnSortable: false,
  670. sortLv: 0,
  671. status: true,
  672. fixed: '',
  673. columnWidth: 80
  674. },
  675. {
  676. userId: this.$store.state.user.name,
  677. functionId: 104001,
  678. serialNumber: '104001Table1CodeDesc',
  679. tableId: '104001Table1',
  680. tableName: '物料信息表',
  681. columnProp: 'codeDesc',
  682. headerAlign: 'center',
  683. align: 'center',
  684. columnLabel: '属性模板',
  685. columnHidden: false,
  686. columnImage: false,
  687. columnSortable: false,
  688. sortLv: 0,
  689. status: true,
  690. fixed: '',
  691. columnWidth: 100
  692. },
  693. {
  694. userId: this.$store.state.user.name,
  695. functionId: 104001,
  696. serialNumber: '104001Table1ConditionCodeUsageDb',
  697. tableId: '104001Table1',
  698. tableName: '物料信息表',
  699. columnProp: 'conditionCodeUsageDb',
  700. headerAlign: 'center',
  701. align: 'center',
  702. columnLabel: '允许条件代码',
  703. columnHidden: false,
  704. columnImage: false,
  705. columnSortable: false,
  706. sortLv: 0,
  707. status: true,
  708. fixed: '',
  709. columnWidth: 60
  710. },
  711. {
  712. userId: this.$store.state.user.name,
  713. functionId: 104001,
  714. serialNumber: '104001Table1MultilevelTrackingDb',
  715. tableId: '104001Table1',
  716. tableName: '物料信息表',
  717. columnProp: 'multilevelTrackingDb',
  718. headerAlign: 'center',
  719. align: 'center',
  720. columnLabel: '多级跟踪',
  721. columnHidden: false,
  722. columnImage: false,
  723. columnSortable: false,
  724. sortLv: 0,
  725. status: true,
  726. fixed: '',
  727. columnWidth: 60
  728. },
  729. {
  730. userId: this.$store.state.user.name,
  731. functionId: 104001,
  732. serialNumber: '104001Table1AllowAsNotConsumedDb',
  733. tableId: '104001Table1',
  734. tableName: '物料信息表',
  735. columnProp: 'allowAsNotConsumedDb',
  736. headerAlign: 'center',
  737. align: 'center',
  738. columnLabel: '允许为未使用',
  739. columnHidden: false,
  740. columnImage: false,
  741. columnSortable: false,
  742. sortLv: 0,
  743. status: true,
  744. fixed: '',
  745. columnWidth: 60
  746. },
  747. {
  748. userId: this.$store.state.user.name,
  749. functionId: 104001,
  750. serialNumber: '104001Table1LotTrackingCode',
  751. tableId: '104001Table1',
  752. tableName: '物料信息表',
  753. columnProp: 'lotTrackingCode',
  754. headerAlign: 'center',
  755. align: 'center',
  756. columnLabel: '批次/批次跟踪',
  757. columnHidden: false,
  758. columnImage: false,
  759. columnSortable: false,
  760. sortLv: 0,
  761. status: true,
  762. fixed: '',
  763. columnWidth: 120
  764. },
  765. {
  766. userId: this.$store.state.user.name,
  767. functionId: 104001,
  768. serialNumber: '104001Table1LotQuantityRule',
  769. tableId: '104001Table1',
  770. tableName: '物料信息表',
  771. columnProp: 'lotQuantityRule',
  772. headerAlign: 'center',
  773. align: 'center',
  774. columnLabel: '批量规则',
  775. columnHidden: false,
  776. columnImage: false,
  777. columnSortable: false,
  778. sortLv: 0,
  779. status: true,
  780. fixed: '',
  781. columnWidth: 120
  782. },
  783. {
  784. userId: this.$store.state.user.name,
  785. functionId: 104001,
  786. serialNumber: '104001Table1SubLotRule',
  787. tableId: '104001Table1',
  788. tableName: '物料信息表',
  789. columnProp: 'subLotRule',
  790. headerAlign: 'center',
  791. align: 'center',
  792. columnLabel: '子批次规则',
  793. columnHidden: false,
  794. columnImage: false,
  795. columnSortable: false,
  796. sortLv: 0,
  797. status: true,
  798. fixed: '',
  799. columnWidth: 120
  800. },
  801. {
  802. userId: this.$store.state.user.name,
  803. functionId: 104001,
  804. serialNumber: '104001Table1ComponentLotRule',
  805. tableId: '104001Table1',
  806. tableName: '物料信息表',
  807. columnProp: 'componentLotRule',
  808. headerAlign: 'center',
  809. align: 'center',
  810. columnLabel: '组件批次规则',
  811. columnHidden: false,
  812. columnImage: false,
  813. columnSortable: false,
  814. sortLv: 0,
  815. status: true,
  816. fixed: '',
  817. columnWidth: 120
  818. },
  819. {
  820. userId: this.$store.state.user.name,
  821. functionId: 104001,
  822. serialNumber: '104001Table1CreateDate',
  823. tableId: '104001Table1',
  824. tableName: '物料信息表',
  825. columnProp: 'createDate',
  826. headerAlign: 'center',
  827. align: 'center',
  828. columnLabel: '创建时间',
  829. columnHidden: false,
  830. columnImage: false,
  831. columnSortable: false,
  832. sortLv: 0,
  833. status: true,
  834. fixed: '',
  835. columnWidth: 160
  836. },
  837. {
  838. userId: this.$store.state.user.name,
  839. functionId: 104001,
  840. serialNumber: '104001Table1CreateBy',
  841. tableId: '104001Table1',
  842. tableName: '物料信息表',
  843. columnProp: 'createBy',
  844. headerAlign: 'center',
  845. align: 'center',
  846. columnLabel: '创建人',
  847. columnHidden: false,
  848. columnImage: false,
  849. columnSortable: false,
  850. sortLv: 0,
  851. status: true,
  852. fixed: '',
  853. columnWidth: 80
  854. },
  855. {
  856. userId: this.$store.state.user.name,
  857. functionId: 104001,
  858. serialNumber: '104001Table1UpdateDate',
  859. tableId: '104001Table1',
  860. tableName: '物料信息表',
  861. columnProp: 'updateDate',
  862. headerAlign: 'center',
  863. align: 'center',
  864. columnLabel: '更新时间',
  865. columnHidden: false,
  866. columnImage: false,
  867. columnSortable: false,
  868. sortLv: 0,
  869. status: true,
  870. fixed: '',
  871. columnWidth: 160
  872. },
  873. {
  874. userId: this.$store.state.user.name,
  875. functionId: 104001,
  876. serialNumber: '104001Table1UpdateBy',
  877. tableId: '104001Table1',
  878. tableName: '物料信息表',
  879. columnProp: 'updateBy',
  880. headerAlign: 'center',
  881. align: 'center',
  882. columnLabel: '更新人',
  883. columnHidden: false,
  884. columnImage: false,
  885. columnSortable: false,
  886. sortLv: 0,
  887. status: true,
  888. fixed: '',
  889. columnWidth: 80
  890. }
  891. ],
  892. columnItemList: [
  893. {
  894. userId: this.$store.state.user.name,
  895. functionId: 104001,
  896. serialNumber: '104001Table2PropertiesItemID',
  897. tableId: "104001Table2",
  898. tableName: "物料属性表",
  899. columnProp: 'propertiesItemNo',
  900. headerAlign: "center",
  901. align: "center",
  902. columnLabel: '属性编码',
  903. columnHidden: false,
  904. columnImage: false,
  905. columnSortable: true,
  906. sortLv: 0,
  907. status: true,
  908. fixed: '',
  909. columnWidth: 100,
  910. },
  911. {
  912. userId: this.$store.state.user.name,
  913. functionId: 104001,
  914. serialNumber: '104001Table2PropertiesItemDesc',
  915. tableId: "104001Table2",
  916. tableName: "物料属性表",
  917. columnProp: 'itemDesc',
  918. headerAlign: "center",
  919. align: "left",
  920. columnLabel: '属性名称',
  921. columnHidden: false,
  922. columnImage: false,
  923. columnSortable: true,
  924. sortLv: 0,
  925. status: true,
  926. fixed: '',
  927. columnWidth: 120,
  928. },
  929. {
  930. userId: this.$store.state.user.name,
  931. functionId: 104001,
  932. serialNumber: '104001Table2ValueType',
  933. tableId: "104001Table2",
  934. tableName: "物料属性表",
  935. columnProp: 'valueType',
  936. headerAlign: "center",
  937. align: "center",
  938. columnLabel: '属性类型',
  939. columnHidden: false,
  940. columnImage: false,
  941. columnSortable: true,
  942. sortLv: 0,
  943. status: true,
  944. fixed: '',
  945. columnWidth: 100,
  946. },
  947. {
  948. userId: this.$store.state.user.name,
  949. functionId: 104001,
  950. serialNumber: '104001Table2ValueChooseFlag',
  951. tableId: "104001Table2",
  952. tableName: "物料属性表",
  953. columnProp: 'textValue',
  954. headerAlign: "center",
  955. align: "left",
  956. columnLabel: '实测值',
  957. columnHidden: false,
  958. columnImage: false,
  959. columnSortable: true,
  960. sortLv: 0,
  961. status: true,
  962. fixed: '',
  963. columnWidth: 100,
  964. },
  965. // {
  966. // userId: this.$store.state.user.name,
  967. // functionId: 104001,
  968. // serialNumber: '104001Table2ValueChooseFlag',
  969. // tableId: "104001Table2",
  970. // tableName: "物料属性表",
  971. // columnProp: 'numValue',
  972. // headerAlign: "center",
  973. // align: "center",
  974. // columnLabel: '数字值',
  975. // columnHidden: false,
  976. // columnImage: false,
  977. // columnSortable: true,
  978. // sortLv: 0,
  979. // status: true,
  980. // fixed: '',
  981. // columnWidth: 70,
  982. // },
  983. ],
  984. updateColumnItemList: [
  985. {
  986. userId: this.$store.state.user.name,
  987. functionId: 104001,
  988. serialNumber: '104001Table6PropertiesItemID',
  989. tableId: "104001Table6",
  990. tableName: "物料属性表",
  991. columnProp: 'propertiesItemNo',
  992. headerAlign: "center",
  993. align: "center",
  994. columnLabel: '属性编码',
  995. columnHidden: false,
  996. columnImage: false,
  997. columnSortable: true,
  998. sortLv: 0,
  999. status: true,
  1000. fixed: '',
  1001. columnWidth: 90,
  1002. },
  1003. {
  1004. userId: this.$store.state.user.name,
  1005. functionId: 104001,
  1006. serialNumber: '104001Table6PropertiesItemDesc',
  1007. tableId: "104001Table6",
  1008. tableName: "物料属性表",
  1009. columnProp: 'itemDesc',
  1010. headerAlign: "center",
  1011. align: "center",
  1012. columnLabel: '属性名称',
  1013. columnHidden: false,
  1014. columnImage: false,
  1015. columnSortable: true,
  1016. sortLv: 0,
  1017. status: true,
  1018. fixed: '',
  1019. columnWidth: 90,
  1020. },
  1021. {
  1022. userId: this.$store.state.user.name,
  1023. functionId: 104001,
  1024. serialNumber: '104001Table6ValueType',
  1025. tableId: "104001Table6",
  1026. tableName: "物料属性表",
  1027. columnProp: 'valueType',
  1028. headerAlign: "center",
  1029. align: "center",
  1030. columnLabel: '属性类型',
  1031. columnHidden: false,
  1032. columnImage: false,
  1033. columnSortable: true,
  1034. sortLv: 0,
  1035. status: true,
  1036. fixed: '',
  1037. columnWidth: 70,
  1038. },
  1039. ],
  1040. // ======== 必填规则 ========
  1041. rules: {
  1042. partNo: [
  1043. {
  1044. required: true,
  1045. message: ' ',
  1046. trigger: 'change'
  1047. }
  1048. ],
  1049. partDesc: [
  1050. {
  1051. required: true,
  1052. message: ' ',
  1053. trigger: 'change'
  1054. }
  1055. ],
  1056. umId: [
  1057. {
  1058. required: true,
  1059. message: ' ',
  1060. trigger: 'change'
  1061. }
  1062. ],
  1063. codeDesc: [
  1064. {
  1065. required: true,
  1066. message: ' ',
  1067. trigger: 'change'
  1068. }
  1069. ]
  1070. },
  1071. // ======== 复选数据集 ========
  1072. partSelections: [],
  1073. // ======== 选中的当前行数据 ========
  1074. partCurrentRow: {},
  1075. // ======== 模态框开关控制 ========
  1076. modalFlag: false,
  1077. modalDisableFlag: false,
  1078. itemChooseFlag: false,
  1079. itemTextDisableFlag: false,
  1080. itemNumberDisableFlag: false,
  1081. itemModalDisableFlag: false,
  1082. itemModalFlag: false,
  1083. agentModelFlag: false,
  1084. manufacturerModelFlag: false,
  1085. updateItemModelFlag: false,
  1086. fastAddFlag: false,
  1087. loading: false,
  1088. attributeDialog: true,
  1089. }
  1090. },
  1091. mounted () {
  1092. this.$nextTick(() => {
  1093. this.height = window.innerHeight / 2 - 30
  1094. /*第二个表格高度的动态调整*/
  1095. this.secondHeight = window.innerHeight - this.height - 180
  1096. })
  1097. },
  1098. created () {
  1099. this.getDataList()
  1100. },
  1101. methods: {
  1102. focusNextInput (index, type) {
  1103. let aaa = ''
  1104. if (this.updatePartItemList.length - 1 === index) {
  1105. aaa = `${type}0`
  1106. } else {
  1107. aaa = `${type}${index + 1}`
  1108. }
  1109. this.$nextTick(() => {
  1110. this.$refs[aaa].focus()
  1111. })
  1112. },
  1113. /**
  1114. * 编辑物料属性
  1115. */
  1116. // updateItemValue () {
  1117. // let tempData = {
  1118. // site: this.$store.state.user.site,
  1119. // partNo: this.partCurrentRow.partNo,
  1120. // codeNo: this.partCurrentRow.codeNo,
  1121. // recordType: 'MP'
  1122. // }
  1123. // getMasterPartItem(tempData).then(({data}) => {
  1124. // if (data && data.code === 0) {
  1125. // this.updatePartItemList = data.rows
  1126. // this.updateItemModelFlag = true
  1127. // } else {
  1128. // this.updatePartItemList = []
  1129. // }
  1130. // })
  1131. // },
  1132. clickSave () {
  1133. if (!this.attributeDialog) { // 保存
  1134. this.updateItemValue()
  1135. } else { // 编辑
  1136. this.copyAttributeList = JSON.parse(JSON.stringify(this.partItemList))
  1137. this.attributeDialog = false
  1138. }
  1139. },
  1140. /**
  1141. * 编辑物料属性
  1142. */
  1143. updateItemValue () {
  1144. this.loading = true
  1145. let tempData = {
  1146. itemList: JSON.parse(JSON.stringify(this.copyAttributeList))
  1147. }
  1148. commitItemValue(tempData).then(({data}) => {
  1149. if (data && data.code === 0) {
  1150. this.getMasterPartItem()
  1151. this.attributeDialog = true
  1152. this.$message.success(data.msg)
  1153. } else {
  1154. this.$message.warning(data.msg)
  1155. }
  1156. this.loading = false
  1157. }).catch((error) => {
  1158. this.$message.error(error)
  1159. this.loading = false
  1160. })
  1161. },
  1162. /**
  1163. * 新增/删除物料属性
  1164. */
  1165. addOrDelItem () {
  1166. if (!this.attributeDialog) {
  1167. this.$message.warning('请保存更改!')
  1168. return
  1169. }
  1170. this.itemSelections1 = null
  1171. this.itemSelections2 = null
  1172. this.itemData.propertiesItemNo = ''
  1173. this.itemData.itemDesc = ''
  1174. let tempData = {
  1175. site: this.$store.state.user.site,
  1176. partNo: this.partCurrentRow.partNo,
  1177. codeNo: this.partCurrentRow.codeNo,
  1178. recordType: 'IP'
  1179. }
  1180. getItemLists(tempData).then(({data}) => {
  1181. this.itemList1 = data.rows.row1
  1182. this.itemList2 = data.rows.row2
  1183. })
  1184. this.fastAddFlag = true
  1185. },
  1186. // 可选属性
  1187. itemClickRow1 (row) {
  1188. this.$refs.itemTable1.toggleRowSelection(row)
  1189. },
  1190. // 已有属性
  1191. itemClickRow2 (row) {
  1192. this.$refs.itemTable2.toggleRowSelection(row)
  1193. },
  1194. selectionItem1 (val) {
  1195. this.itemSelections1 = val
  1196. },
  1197. selectionItem2 (val) {
  1198. this.itemSelections2 = val
  1199. },
  1200. // 物料项目新增
  1201. addItem () {
  1202. if (this.itemSelections1 == null || this.itemSelections1.length === 0) {
  1203. this.$message.warning('请选择可选属性!')
  1204. return
  1205. }
  1206. let inData = {
  1207. site: this.$store.state.user.site,
  1208. partNo: this.partCurrentRow.partNo,
  1209. codeNo: this.partCurrentRow.codeNo,
  1210. codeDesc: this.partCurrentRow.codeDesc,
  1211. recordType: 'IP',
  1212. itemList: this.itemSelections1
  1213. }
  1214. addMasterPartItem(inData).then(({data}) => {
  1215. if (data && data.code === 0) {
  1216. getItemLists(inData).then(({data}) => {
  1217. this.itemList1 = data.rows.row1
  1218. this.itemList2 = data.rows.row2
  1219. })
  1220. this.getMasterPartItem()
  1221. this.itemSelections1 = []
  1222. } else {
  1223. this.$alert(data.msg, '错误', {
  1224. confirmButtonText: '确定'
  1225. })
  1226. }
  1227. })
  1228. },
  1229. // 物料项目删除
  1230. deleteItem () {
  1231. if (this.itemSelections2 == null || this.itemSelections2.length === 0) {
  1232. this.$alert("请选择已有属性!", '提示', {
  1233. confirmButtonText: '确定'
  1234. })
  1235. return false
  1236. }
  1237. let inData = {
  1238. site: this.$store.state.user.site,
  1239. partNo: this.partCurrentRow.partNo,
  1240. codeNo: this.partCurrentRow.codeNo,
  1241. codeDesc: this.partCurrentRow.codeDesc,
  1242. recordType: 'IP',
  1243. itemList: this.itemSelections2
  1244. }
  1245. deleteMasterPartItem(inData).then(({data}) => {
  1246. if (data && data.code === 0) {
  1247. getItemLists(inData).then(({data}) => {
  1248. this.itemList1 = data.rows.row1
  1249. this.itemList2 = data.rows.row2
  1250. })
  1251. this.getMasterPartItem()
  1252. this.itemSelections2 = []
  1253. } else {
  1254. this.$alert(data.msg, '错误', {
  1255. confirmButtonText: '确定'
  1256. })
  1257. }
  1258. })
  1259. },
  1260. // 查询物料项目
  1261. queryMasterPartItem () {
  1262. this.itemData.partNo = this.partCurrentRow.partNo
  1263. this.itemData.codeNo = this.partCurrentRow.codeNo
  1264. this.itemData.partNo = this.partCurrentRow.partNo
  1265. queryMasterPartItem(this.itemData).then(({data}) => {
  1266. if (data && data.code === 0) {
  1267. this.itemList1 = data.rows
  1268. } else {
  1269. this.itemList1 = []
  1270. }
  1271. })
  1272. },
  1273. // 确认修改物料属性
  1274. commitItemValue () {
  1275. let tempData = {
  1276. itemList: JSON.parse(JSON.stringify(this.updatePartItemList))
  1277. }
  1278. commitItemValue(tempData).then(({data}) => {
  1279. if (data && data.code === 0) {
  1280. this.getMasterPartItem()
  1281. this.updateItemModelFlag = false
  1282. this.$message({
  1283. message: '操作成功',
  1284. type: 'success',
  1285. duration: 1500,
  1286. onClose: () => {}
  1287. })
  1288. } else {
  1289. this.$alert(data.msg, '错误', {
  1290. confirmButtonText: '确定'
  1291. })
  1292. }
  1293. })
  1294. },
  1295. // ======= 正则校验 =======
  1296. handleInput (value, type) {
  1297. // 大于等于0,且只能输入4位小数
  1298. let val = value.replace(/^\D*([0-9]\d*\.?\d{0,4})?.*$/,'$1')
  1299. if (val === null || val === undefined || val === '') {
  1300. val = 0
  1301. }
  1302. if (type === 1) {
  1303. this.modalData.weightNet = val
  1304. } else if (type === 2) {
  1305. this.modalData.volumeNet = val
  1306. }
  1307. },
  1308. // ======== 分页相关方法 ========
  1309. /**
  1310. * 每页数
  1311. * @param val
  1312. */
  1313. sizeChangeHandle (val) {
  1314. this.pageSize = val
  1315. this.pageIndex = 1
  1316. this.getDataList()
  1317. },
  1318. /**
  1319. * 当前页
  1320. * @param val
  1321. */
  1322. currentChangeHandle (val) {
  1323. this.pageIndex = val
  1324. this.getDataList()
  1325. },
  1326. // ======== 页签切换相关方法 ========
  1327. /**
  1328. * 未知
  1329. * @returns {boolean}
  1330. */
  1331. selectFlag () {
  1332. return true
  1333. },
  1334. /**
  1335. * 列表表格选择替换
  1336. * @param tab
  1337. * @param event
  1338. */
  1339. tabClick (tab, event) {
  1340. // 刷新列表数据
  1341. this.refreshCurrentTabTable()
  1342. },
  1343. /**
  1344. * 当前值发生变化的时候修改
  1345. * @param row
  1346. * @param oldRow
  1347. */
  1348. changeCurrentRow (row, oldRow) {
  1349. // 判断是否是获取焦点的事件
  1350. if (row) {
  1351. this.partCurrentRow = JSON.parse(JSON.stringify(row))
  1352. // 刷新当前页表
  1353. this.refreshCurrentTabTable()
  1354. }
  1355. },
  1356. /**
  1357. * 刷新页签的table数据
  1358. */
  1359. refreshCurrentTabTable () {
  1360. if (this.activeTable === 'part_item') {
  1361. this.getMasterPartItem()
  1362. }
  1363. },
  1364. // ======== 列表数据刷新方法 ========
  1365. /**
  1366. * 查询物料属性
  1367. */
  1368. getMasterPartItem () {
  1369. let tempData = {
  1370. site: this.$store.state.user.site,
  1371. partNo: this.partCurrentRow.partNo,
  1372. codeNo: this.partCurrentRow.codeNo,
  1373. recordType: 'IP'
  1374. }
  1375. getMasterPartItem(tempData).then(({data}) => {
  1376. if (data && data.code === 0) {
  1377. this.partItemList = data.rows
  1378. } else {
  1379. this.partItemList = []
  1380. }
  1381. })
  1382. },
  1383. // ======== 列表数据刷新方法 ========
  1384. /**
  1385. * 获取数据列表
  1386. */
  1387. getDataList () {
  1388. this.searchData.site = this.$store.state.user.site
  1389. this.searchData.limit = this.pageSize
  1390. this.searchData.page = this.pageIndex
  1391. masterPartSearch(this.searchData).then(({data}) => {
  1392. if (data.code === 0) {
  1393. this.dataList = data.page.list
  1394. this.pageIndex = data.page.currPage
  1395. this.pageSize = data.page.pageSize
  1396. this.totalPage = data.page.totalCount
  1397. this.$refs.selectDiv.setLengthAll( this.dataList.length)
  1398. // 判断是否全部存在数据
  1399. if (this.totalPage > 0) {
  1400. // 设置选中行
  1401. this.$refs.partTable.setCurrentRow(this.dataList[0])
  1402. // 加载当前的页签的table
  1403. this.refreshCurrentTabTable()
  1404. this.partClickRow(this.dataList[0])
  1405. }
  1406. }
  1407. })
  1408. },
  1409. // ======== 新增/编辑模态框 ========
  1410. /**
  1411. * 物料信息新增模态框
  1412. */
  1413. addModal () {
  1414. getProjectPartNo(this.searchData).then(({data}) => {
  1415. if (data && data.code === 0) {
  1416. this.modalData = {
  1417. flag: '1',
  1418. title: '物料新增',
  1419. partNo: data.partNo,
  1420. partDesc: '',
  1421. umId: '',
  1422. umName: '',
  1423. partMainGroup: '',
  1424. groupName: '',
  1425. weightNet: '',
  1426. uomForWeightNet: '',
  1427. volumeNet: '',
  1428. uomForVolumeNet: '',
  1429. codeNo: '',
  1430. codeDesc: '',
  1431. conditionCodeUsageDb: '',
  1432. multilevelTrackingDb: '',
  1433. allowAsNotConsumedDb: '',
  1434. lotTrackingCode: 'Not Lot Tracking',
  1435. lotQuantityRule: 'One Lot Per Production Order',
  1436. subLotRule: 'No Sub Lots Allowed',
  1437. componentLotRule: 'Many Lots Allowed',
  1438. createBy: this.$store.state.user.name,
  1439. officialFlag: 'N'
  1440. }
  1441. this.modalDisableFlag = false
  1442. this.modalFlag = true
  1443. } else {
  1444. this.$message.error(data.msg)
  1445. }
  1446. })
  1447. },
  1448. /**
  1449. * 物料信息编辑模态框
  1450. * @param row
  1451. */
  1452. updateModal (row) {
  1453. this.modalData = {
  1454. flag: '2',
  1455. title: '物料编辑',
  1456. partNo: row.partNo,
  1457. partDesc: row.partDesc,
  1458. umId: row.umId,
  1459. umName: row.umName,
  1460. partMainGroup: row.partMainGroup,
  1461. groupName: row.groupName,
  1462. weightNet: row.weightNet,
  1463. uomForWeightNet: row.uomForWeightNet,
  1464. volumeNet: row.volumeNet,
  1465. uomForVolumeNet: row.uomForVolumeNet,
  1466. codeNo: row.codeNo,
  1467. codeDesc: row.codeDesc,
  1468. conditionCodeUsageDb: row.conditionCodeUsageDb,
  1469. multilevelTrackingDb: row.multilevelTrackingDb,
  1470. allowAsNotConsumedDb: row.allowAsNotConsumedDb,
  1471. lotTrackingCode: row.lotTrackingCode,
  1472. lotQuantityRule: row.lotQuantityRule,
  1473. subLotRule: row.subLotRule,
  1474. componentLotRule: row.componentLotRule,
  1475. updateBy: this.$store.state.user.name,
  1476. officialFlag: row.officialFlag
  1477. }
  1478. this.modalDisableFlag = true
  1479. this.modalFlag = true
  1480. },
  1481. /**
  1482. * 返回列表唯一值
  1483. * @param row
  1484. * @returns {string|[{trigger: string, message: string, required: boolean}]|*}
  1485. */
  1486. getRowKeys (row) {
  1487. // 唯一值,一般都为id
  1488. return row.agentId
  1489. },
  1490. // ======== 新增/编辑/删除方法 ========
  1491. /**
  1492. * 物料信息新增/编辑
  1493. */
  1494. saveData () {
  1495. if (this.modalData.partNo === '' || this.modalData.partNo == null) {
  1496. this.$message.warning('请填写物料编码!')
  1497. return
  1498. }
  1499. if (this.modalData.partDesc === '' || this.modalData.partDesc == null) {
  1500. this.$message.warning('请填写物料描述!')
  1501. return
  1502. }
  1503. if (this.modalData.umId === '' || this.modalData.umId == null) {
  1504. this.$message.warning('请选择计量单位!')
  1505. return
  1506. }
  1507. if (this.modalData.codeNo === '' || this.modalData.codeNo == null) {
  1508. this.$message.warning('请选择属性模板!')
  1509. return
  1510. }
  1511. if (this.modalData.flag === '1') {
  1512. masterPartInformationSave(this.modalData).then(({data}) => {
  1513. if (data && data.code === 0) {
  1514. this.getDataList()
  1515. this.modalFlag = false
  1516. this.$message({
  1517. message: '操作成功',
  1518. type: 'success',
  1519. duration: 1500,
  1520. onClose: () => {}
  1521. })
  1522. } else {
  1523. this.$alert(data.msg, '错误', {
  1524. confirmButtonText: '确定'
  1525. })
  1526. }
  1527. })
  1528. } else {
  1529. masterPartInformationEdit(this.modalData).then(({data}) => {
  1530. if (data && data.code === 0) {
  1531. this.getDataList()
  1532. this.modalFlag = false
  1533. this.$message({
  1534. message: '操作成功',
  1535. type: 'success',
  1536. duration: 1500,
  1537. onClose: () => {}
  1538. })
  1539. } else {
  1540. this.$alert(data.msg, '错误', {
  1541. confirmButtonText: '确定'
  1542. })
  1543. }
  1544. })
  1545. }
  1546. },
  1547. /**
  1548. * 物料信息删除
  1549. */
  1550. delModal () {
  1551. if (this.partSelections.length === 0) {
  1552. this.$message.warning('请勾选要删除的物料信息!')
  1553. return
  1554. }
  1555. this.$confirm(`是否删除这 `+ this.partSelections.length +` 条物料信息?`, '提示', {
  1556. confirmButtonText: '确定',
  1557. cancelButtonText: '取消',
  1558. type: 'warning'
  1559. }).then(() => {
  1560. let tempData = {
  1561. informationList: this.partSelections
  1562. }
  1563. masterPartInformationDelete(tempData).then(({data}) => {
  1564. if (data && data.code === 0) {
  1565. this.getDataList()
  1566. this.partSelections = []
  1567. this.$message({
  1568. message: '操作成功',
  1569. type: 'success',
  1570. duration: 1500,
  1571. onClose: () => {}
  1572. })
  1573. } else {
  1574. this.$alert(data.msg, '错误', {
  1575. confirmButtonText: '确定'
  1576. })
  1577. }
  1578. })
  1579. }).catch(() => {
  1580. })
  1581. },
  1582. // ======== 列表操作方法 ========
  1583. /**
  1584. * 单机选中物料信息
  1585. * @param row
  1586. */
  1587. partClickRow (row) {
  1588. // this.$refs.partTable.toggleRowSelection(row)
  1589. this.partCurrentRow = JSON.parse(JSON.stringify(row))
  1590. },
  1591. /**
  1592. * 复选物料信息
  1593. * @param val
  1594. */
  1595. selectionPart (val) {
  1596. this.partSelections = val
  1597. this.$refs.selectDiv.setLengthselected(this.partSelections.length)
  1598. },
  1599. // 转正式物料
  1600. toBecomeOfficialPart () {
  1601. toBecomeOfficialMasterPart(this.modalData).then(({data}) => {
  1602. if (data && data.code === 0) {
  1603. this.getDataList()
  1604. this.modalFlag = false
  1605. this.$message({
  1606. message: '操作成功',
  1607. type: 'success',
  1608. duration: 1500,
  1609. onClose: () => {}
  1610. })
  1611. } else {
  1612. this.$alert(data.msg, '错误', {
  1613. confirmButtonText: '确定'
  1614. })
  1615. }
  1616. })
  1617. },
  1618. // ======== chooseList相关方法 ========
  1619. /**
  1620. * 获取基础数据列表S
  1621. * @param val
  1622. * @param type
  1623. */
  1624. getBaseList (val, type) {
  1625. this.tagNo = val
  1626. this.tempCodeNo = this.modalData.codeNo
  1627. this.$nextTick(() => {
  1628. let strVal = ''
  1629. if (val === 1007) {
  1630. strVal = this.modalData.umId
  1631. } else if (val === 109) {
  1632. strVal = this.modalData.partMainGroup
  1633. } else if (val === 22) {
  1634. strVal = this.modalData.codeNo
  1635. }
  1636. this.$refs.baseList.init(val, strVal)
  1637. })
  1638. },
  1639. /**
  1640. * 列表方法的回调
  1641. * @param val
  1642. */
  1643. getBaseData (val) {
  1644. if (this.tagNo === 1007) {
  1645. this.modalData.umId = val.um_id
  1646. this.modalData.umName = val.um_name
  1647. } else if (this.tagNo === 109) {
  1648. this.modalData.partMainGroup = val.group_id
  1649. this.modalData.groupName = val.group_name
  1650. } else if (this.tagNo === 22) {
  1651. if (this.modalData.flag === '2') {
  1652. if (val.Code_no != this.tempCodeNo) {
  1653. this.$confirm(`更换属性模板将替换下方物料属性数据,请确认?`, '提示', {
  1654. confirmButtonText: '确定',
  1655. cancelButtonText: '取消',
  1656. type: 'warning'
  1657. }).then(() => {
  1658. this.modalData.codeNo = val.Code_no
  1659. this.$set(this.modalData, 'codeDesc', val.Code_desc)
  1660. }).catch(() => {
  1661. })
  1662. }
  1663. } else {
  1664. this.modalData.codeNo = val.Code_no
  1665. this.$set(this.modalData, 'codeDesc', val.Code_desc)
  1666. }
  1667. }
  1668. },
  1669. // 计量单位输入校验
  1670. umIdBlur (tagNo) {
  1671. if (this.modalData.umId != null && this.modalData.umId !== '') {
  1672. let tempData = {
  1673. tagno: tagNo,
  1674. conditionSql: " and um_id = '" + this.modalData.umId + "'"
  1675. }
  1676. verifyData(tempData).then(({data}) => {
  1677. if (data && data.code === 0) {
  1678. if (data.baseListData.length > 0) {
  1679. this.modalData.umId = data.baseListData[0].um_id
  1680. this.modalData.umName = data.baseListData[0].um_name
  1681. } else {
  1682. this.$message.warning('该计量单位不存在!')
  1683. this.modalData.umName = ''
  1684. }
  1685. } else {
  1686. this.$message.warning(data.msg)
  1687. this.modalData.umName = ''
  1688. }
  1689. })
  1690. }
  1691. },
  1692. // 产品代码输入校验
  1693. groupIdBlur (tagNo) {
  1694. if (this.modalData.partMainGroup != null && this.modalData.partMainGroup !== '') {
  1695. let tempData = {
  1696. tagno: tagNo,
  1697. conditionSql: " and group_id = '" + this.modalData.partMainGroup + "'"
  1698. }
  1699. verifyData(tempData).then(({data}) => {
  1700. if (data && data.code === 0) {
  1701. if (data.baseListData.length > 0) {
  1702. this.modalData.partMainGroup = data.baseListData[0].group_id
  1703. this.modalData.groupName = data.baseListData[0].group_name
  1704. } else {
  1705. this.$message.warning('该物料分组不存在!')
  1706. this.modalData.groupName = ''
  1707. }
  1708. } else {
  1709. this.$message.warning(data.msg)
  1710. this.modalData.groupName = ''
  1711. }
  1712. })
  1713. }
  1714. },
  1715. // ======== 导出相关方法 ========
  1716. /**
  1717. * 导出excel
  1718. */
  1719. async createExportData () {
  1720. this.searchData.limit = -1
  1721. this.searchData.page = 1
  1722. await masterPartSearch(this.searchData).then(({data}) => {
  1723. this.resultList = data.page.list
  1724. })
  1725. return this.resultList
  1726. },
  1727. startDownload () {},
  1728. finishDownload () {},
  1729. fields () {
  1730. let json = '{'
  1731. this.columnList.forEach((item, index) => {
  1732. if (index == this.columnList.length - 1) {
  1733. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"'
  1734. } else {
  1735. json += '"' + item.columnLabel + '"' + ':' + '"' + item.columnProp + '"' + ','
  1736. }
  1737. })
  1738. json += '}'
  1739. let s = eval('(' + json + ')')
  1740. return s
  1741. },
  1742. rowStyle ({row}) {
  1743. if (this.partCurrentRow.partNo === row.partNo) {
  1744. return { 'background-color': '#E8F7F6', cursor: 'pointer' };
  1745. }
  1746. },
  1747. }
  1748. }
  1749. </script>
  1750. <style scoped lang="scss">
  1751. /deep/ .customer-tab .el-tabs__content {
  1752. padding: 0px !important;
  1753. height: 459px;
  1754. }
  1755. /deep/ .customer-tab .el-tabs__content {
  1756. height: 294px;
  1757. }
  1758. .numInput /deep/ .el-input__inner{
  1759. text-align: right;
  1760. }
  1761. /deep/ .inlineNumber input::-webkit-outer-spin-button,
  1762. /deep/ .inlineNumber input::-webkit-inner-spin-button {
  1763. -webkit-appearance: none;
  1764. }
  1765. /deep/ .inlineNumber input[type="number"]{
  1766. -moz-appearance: textfield;
  1767. padding-right: 5px !important;
  1768. }
  1769. </style>