index.vue 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128
  1. <template>
  2. <div class="app-container">
  3. <div v-if="isPercentage" class="percentage" style="width: 210px;height: 90px;background: #fff;position: fixed;bottom: 0;left: 0;z-index: 9999999999999;">
  4. <h4 style="padding-left: 10px;line-height: 0;">导出进度:</h4>
  5. <el-progress style="padding-left: 10px;" :text-inside="true" :stroke-width="26" :percentage="percentage" />
  6. </div>
  7. <div class="filter-container">
  8. <!-- 搜索条件 -->
  9. <el-input v-model="getdataListParm.parammaps.providerName" placeholder="供应商名" style="width: 140px;" class="filter-item" />
  10. <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="form_search">搜索</el-button>
  11. <el-button v-if="isProductAdd" class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="form_add">新增</el-button>
  12. <el-button class="filter-item" style="margin-left: 10px;" type="success" icon="el-icon-edit" @click="handleDownload">导出</el-button>
  13. </div>
  14. <el-table
  15. :key="tableKey"
  16. v-loading="listLoading"
  17. element-loading-text="给我一点时间"
  18. :data="list"
  19. border
  20. fit
  21. highlight-current-row
  22. style="width: 100%;"
  23. :row-style="rowStyle"
  24. :cell-style="cellStyle"
  25. class="elTable"
  26. @sort-change="tableSort"
  27. >
  28. <el-table-column label="序号" align="center" type="index" width="50px">
  29. <template slot-scope="scope">
  30. <span>{{ scope.$index + (pageNum-1) * pageSize + 1 }}</span>
  31. </template>
  32. </el-table-column>
  33. <el-table-column label="供应商" min-width="110px" align="center">
  34. <template slot-scope="scope">
  35. <span>{{ scope.row.providerName }}</span>
  36. </template>
  37. </el-table-column>
  38. <!-- <el-table-column label="供应商简称" align="center" width="150">
  39. <template slot-scope="scope">
  40. <span>{{ scope.row.providerIntro }}</span>
  41. </template>
  42. </el-table-column>
  43. <el-table-column label="供应商编码" width="150px" align="center">
  44. <template slot-scope="scope">
  45. <span>{{ scope.row.providerNumber }}</span>
  46. </template>
  47. </el-table-column> -->
  48. <el-table-column label="联系人" width="150px" align="center">
  49. <template slot-scope="scope">
  50. <span>{{ scope.row.linkman }}</span>
  51. </template>
  52. </el-table-column>
  53. <el-table-column label="联系方式" min-width="110px" align="center">
  54. <template slot-scope="scope">
  55. <span>{{ scope.row.telphone }}</span>
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="资产数" sortable prop="eqs" min-width="100px" header-align="center" align="center">
  59. <template slot-scope="scope">
  60. <span>{{ scope.row.eqs }}</span>
  61. </template>
  62. </el-table-column>
  63. <el-table-column label="备件数" sortable prop="bcs" min-width="100px" header-align="center" align="center">
  64. <template slot-scope="scope">
  65. <span>{{ scope.row.bcs }}</span>
  66. </template>
  67. </el-table-column>
  68. <el-table-column label="合同数" sortable prop="pps" min-width="100px" header-align="center" align="center">
  69. <template slot-scope="scope">
  70. <span>{{ scope.row.pps }}</span>
  71. </template>
  72. </el-table-column>
  73. <el-table-column label="设备类型数" sortable prop="eps" min-width="100px" header-align="center" align="center">
  74. <template slot-scope="scope">
  75. <span>{{ scope.row.eps }}</span>
  76. </template>
  77. </el-table-column>
  78. <el-table-column v-if="isProductUpdate" label="启用" min-width="80px" header-align="center" align="center">
  79. <template slot-scope="scope">
  80. <el-switch v-model="scope.row.enable" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0" @change="handleEnableChange(scope.$index, scope.row)" />
  81. </template>
  82. </el-table-column>
  83. <el-table-column v-if="isProductUpdate" label="是否线上采购" min-width="80px" header-align="center" align="center">
  84. <template slot-scope="scope">
  85. <el-switch v-model="scope.row.flexPrice" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0" @change="handleFlexPriceChange(scope.$index, scope.row)" />
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="操作" align="center" width="400px" class-name="small-padding fixed-width" fixed="right">
  89. <template slot-scope="{row}">
  90. <el-button type="success" size="mini" @click="handleeqMenu(row)">设备</el-button>
  91. <el-button type="success" size="mini" @click="handlePartMenu(row)">备件</el-button>
  92. <el-button type="success" size="mini" @click="handlewarehouseMenu(row)">库位</el-button>
  93. <el-button v-if="isProductUpdate" type="success" size="mini" @click="form_edit(row)">编辑</el-button>
  94. <el-button v-if="isProductDelete && row.bcs === 0 && row.eqs === 0 && row.pps === 0 && row.eps === 0" size="mini" type="danger" @click="form_delete(row)">删除 </el-button>
  95. </template>
  96. </el-table-column>
  97. </el-table>
  98. <!-- 分页 -->
  99. <pagination v-show="total>0" :total="total" :page.sync="getdataListParm.offset" :limit.sync="getdataListParm.pagecount" @pagination="getList" />
  100. <!-- 弹出层新增or修改 -->
  101. <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" :close-on-click-modal="false" width="80%">
  102. <div class="content-add">
  103. <el-form
  104. ref="temp"
  105. :rules="rules"
  106. :model="temp"
  107. label-position="right"
  108. label-width="100px"
  109. style="width: 90%; margin-left:50px;"
  110. >
  111. <el-row>
  112. <el-col :span="12">
  113. <el-form-item label="供应商简称" prop="providerName">
  114. <el-input ref="providerName" v-model="temp.providerName" />
  115. </el-form-item>
  116. </el-col>
  117. </el-row>
  118. <el-row>
  119. <el-col :span="12">
  120. <el-form-item label="供应商名" prop="providerIntro">
  121. <el-input ref="providerIntro" v-model="temp.providerIntro" />
  122. </el-form-item>
  123. </el-col>
  124. <el-col :span="8">
  125. <el-form-item label="供应商编号" prop="providerNumber">
  126. <el-input ref="providerNumber" v-model="temp.providerNumber" />
  127. </el-form-item>
  128. </el-col>
  129. </el-row>
  130. <el-row>
  131. <el-col :span="12">
  132. <el-form-item label="营业执照" prop="businessLicense">
  133. <el-input ref="businessLicense" v-model="temp.businessLicense" />
  134. </el-form-item>
  135. </el-col>
  136. <el-col :span="8">
  137. <el-form-item label="组织机构代码" prop="organizationCode">
  138. <el-input ref="organizationCode" v-model="temp.organizationCode" />
  139. </el-form-item>
  140. </el-col>
  141. </el-row>
  142. <el-row>
  143. <el-col :span="12">
  144. <el-form-item label="税务登记证" prop="IRSregister">
  145. <el-input ref="IRSregister" v-model="temp.IRSregister" />
  146. </el-form-item>
  147. </el-col>
  148. <el-col :span="12">
  149. <el-form-item label="开户许可证" prop="openLicence">
  150. <el-input ref="openLicence" v-model="temp.openLicence" />
  151. </el-form-item>
  152. </el-col>
  153. </el-row>
  154. <el-row>
  155. <el-col :span="12">
  156. <el-form-item label="联系人" prop="linkman">
  157. <el-input ref="linkman" v-model="temp.linkman" />
  158. </el-form-item>
  159. </el-col>
  160. <el-col :span="12">
  161. <el-form-item label="联系电话" prop="telphone">
  162. <el-input ref="telphone" v-model="temp.telphone" />
  163. </el-form-item>
  164. </el-col>
  165. </el-row>
  166. <el-row>
  167. <el-col :span="12">
  168. <el-form-item label="邮箱" prop="email">
  169. <el-input ref="email" v-model="temp.email" />
  170. </el-form-item>
  171. </el-col>
  172. </el-row>
  173. </el-form>
  174. <div slot="footer" class="dialog-footer">
  175. <el-button type="primary" @click="dialogStatus==='create'?add_dialog_save():edit_dialog_save()">确认</el-button>
  176. <el-button @click="dialogFormVisible = false">关闭</el-button>
  177. </div>
  178. </div>
  179. </el-dialog>
  180. <el-dialog :title="textMap['stock']" :visible.sync="dialogstockVisible" :close-on-click-modal="false">
  181. <el-form :rules="rules" label-position="left" label-width="150px" style="width: 800px; margin-left:50px;">
  182. <el-form-item label="可提供的备件类别" prop="stockname">
  183. <tree-select
  184. :disabled="disabled"
  185. :height="280"
  186. :width="400"
  187. size="small"
  188. multiple
  189. :data="sparePartparentstock"
  190. :default-props="sparePartdefaultProps"
  191. collapse-tags
  192. :node-key="nodeKey"
  193. :checked-keys="sparePartDefaultCheckedKeys"
  194. @popoverHide="sparePartpopoverHide"
  195. />
  196. </el-form-item>
  197. </el-form>
  198. <div slot="footer" class="dialog-footer">
  199. <el-button type="primary" @click="updatestock()"> 确认 </el-button>
  200. <el-button @click="dialogstockVisible = false"> 关闭 </el-button>
  201. </div>
  202. </el-dialog>
  203. <!-- 库位 -->
  204. <el-dialog :title="textMap['location']" :visible.sync="dialogwarehouseVisible" :close-on-click-modal="false">
  205. <div class="content-warehoseCode">
  206. <el-form :rules="rules" label-position="right" label-width="100px" style="width: 800px; margin-left:50px;">
  207. <!-- <el-form-item label="可提供的库位" prop="stockname">
  208. <tree-select
  209. :disabled="disabled"
  210. :height="280"
  211. :width="400"
  212. size="small"
  213. multiple
  214. :data="parentstock"
  215. :default-props="defaultProps"
  216. collapse-tags
  217. :node-key="nodeKey"
  218. :checked-keys="defaultCheckedKeys"
  219. @popoverHide="popoverHide"
  220. />
  221. </el-form-item> -->
  222. <el-row>
  223. <el-col :span="16">
  224. <el-form-item label="库位:" prop="warehoseCode">
  225. <el-autocomplete v-model="warehoseTemp.warehoseCode" value-key="name" class="inline-input" :fetch-suggestions="querySearchWarehoseCode" placeholder="请输入库位" style="width:100%" @select="handleSelectWarehoseCode">
  226. <template slot-scope="{ item }">
  227. <b>库位编号:</b><span class="name">{{ item.warehoseCode }}</span>
  228. </template>
  229. </el-autocomplete>
  230. </el-form-item>
  231. </el-col>
  232. <el-col :span="7" style="margin-left:20px">
  233. <el-button style="display: inline-block;" class="filter-item" type="info" icon="el-icon-tickets" @click="handleDownloadTemp"> 模板 </el-button>
  234. <el-upload style="display: inline-block;" :headers="headers" :data="uploadData" :action="uploadExcelUrl" :show-file-list="false" :before-upload="beforeImportExcel" :on-success="handleImportExcelSuccess">
  235. <el-button class="filter-item" type="warning" icon="el-icon-download">导入</el-button>
  236. </el-upload>
  237. </el-col>
  238. </el-row>
  239. </el-form>
  240. <el-table
  241. :key="tableKey"
  242. v-loading="listLoading"
  243. element-loading-text="给我一点时间"
  244. :data="listAdd"
  245. border
  246. fit
  247. highlight-current-row
  248. style="width: 100%;margin-bottom:30px"
  249. :row-style="rowStyle"
  250. :cell-style="cellStyle"
  251. class="elTable"
  252. >
  253. <!-- table表格 -->
  254. <el-table-column type="index" label="序号" align="center" width="50px" />
  255. <el-table-column label="库位编号" min-width="90px" prop="warehoseCode" align="center">
  256. <template slot-scope="scope">
  257. <span>{{ scope.row.warehoseCode }}</span>
  258. </template>
  259. </el-table-column>
  260. <el-table-column label="备注" min-width="80px" align="center">
  261. <template slot-scope="scope">
  262. <span>{{ scope.row.remark }}</span><br>
  263. </template>
  264. </el-table-column>
  265. <el-table-column label="操作" align="center" width="100" class-name="small-padding fixed-width">
  266. <template slot-scope="{row}">
  267. <a class="del" @click="handleWarehoseDelete(row)">删除</a>
  268. </template>
  269. </el-table-column>
  270. </el-table>
  271. <pagination v-show="totalWarehouprovider>0" :total="totalWarehouprovider" :page.sync="getWarehouListParm.offset" :limit.sync="getWarehouListParm.pagecount" @pagination="getWarehouproviderlist" />
  272. </div>
  273. <div slot="footer" class="dialog-footer">
  274. <!-- <el-button type="primary" @click="updatewarehouse()"> 确认111 </el-button> -->
  275. <el-button @click="dialogwarehouseVisible = false"> 关闭 </el-button>
  276. </div>
  277. </el-dialog>
  278. <el-dialog :title="textMap['eq']" :visible.sync="dialogeqVisible" :close-on-click-modal="false">
  279. <el-form :rules="rules" label-position="left" label-width="150px" style="width: 800px; margin-left:50px;">
  280. <el-form-item label="可提供的设备类别" prop="eqname">
  281. <tree-select
  282. :disabled="disabled"
  283. :height="280"
  284. :width="400"
  285. size="small"
  286. multiple
  287. :data="parenteq"
  288. :default-props="eq_defaultProps"
  289. collapse-tags
  290. :node-key="eq_nodeKey"
  291. :checked-keys="eq_defaultCheckedKeys"
  292. @popoverHide="eq_popoverHide"
  293. />
  294. </el-form-item>
  295. </el-form>
  296. <div slot="footer" class="dialog-footer">
  297. <el-button type="primary" @click="updateeq()"> 确认 </el-button>
  298. <el-button @click="dialogeqVisible = false"> 关闭 </el-button>
  299. </div>
  300. </el-dialog>
  301. </div>
  302. </template>
  303. <script>
  304. // 引入
  305. import TreeSelect from '@/components/TreeSelect'
  306. import { GetDataByName, GetDataByNames, PostDataByName, ExecDataByConfig, checkButtons, UpdateDataRelation, transData, failproccess, formatJson, GetAccount } from '@/api/common'
  307. import waves from '@/directive/waves' // waves directive
  308. import { parseTime, sortChange } from '@/utils/index.js'
  309. // eslint-disable-next-line no-unused-vars
  310. import { validateEMail } from '@/utils/validate.js'
  311. import Pagination from '@/components/Pagination' // secondary package based on el-pagination
  312. import { MessageBox } from 'element-ui'
  313. import Cookies from 'js-cookie'
  314. import { getToken } from '@/utils/auth'
  315. export default {
  316. name: 'Product',
  317. components: { Pagination, TreeSelect },
  318. directives: { waves },
  319. data() {
  320. return {
  321. disabled: false,
  322. tableKey: 0,
  323. list: null,
  324. total: 0,
  325. listLoading: true,
  326. requestParam: {
  327. name: 'createRole',
  328. offset: 0,
  329. pagecount: 0,
  330. parammaps: {}
  331. },
  332. // 1-2:table&搜索传参
  333. getdataListParm: {
  334. name: 'getProviderList',
  335. page: 1,
  336. offset: 1,
  337. pagecount: 10,
  338. returntype: 'Map',
  339. parammaps: {
  340. providerName: ''
  341. }
  342. },
  343. // 2-3:下拉框请求后数据加入[]
  344. findAllProvider: [],
  345. findAllAssetType: [],
  346. findAllPasture: [],
  347. findAllDepart: [],
  348. findAllEmploye: [],
  349. getDictByName: [],
  350. // 2-1.请求下拉框接口
  351. requestParams: [
  352. // { name: 'findAllProvider', offset: 0, pagecount: 0, params: [] },
  353. // { name: 'findAllAssetType', offset: 0, pagecount: 0, params: [] },
  354. // { name: 'findAllPasture', offset: 0, pagecount: 0, params: [] }
  355. // { name: 'findAllDepart', offset: 0, pagecount: 0, params: [] },
  356. // { name: 'findAllEmploye', offset: 0, pagecount: 0, params: [] },
  357. // { name: 'getDictByName', offset: 0, pagecount: 0, params: ['资产状态'] }
  358. ],
  359. temp: {},
  360. // 备件
  361. sparePartparentstock: [],
  362. getParmSparePart: {
  363. name: 'getpart_classList'
  364. },
  365. sparePartdefaultProps: {
  366. children: 'children',
  367. label: 'partClassName'
  368. },
  369. sparePartDefaultCheckedKeys: [],
  370. sparePartDataform: {
  371. id: '',
  372. name: '',
  373. selectSparePart: [],
  374. sort: '',
  375. enable: ''
  376. },
  377. sparePartUpdateDataRelationParam: {
  378. name: '',
  379. dataname: '',
  380. datavalue: '',
  381. valuename: '',
  382. values: ''
  383. },
  384. // 备件
  385. // 库位选择开始
  386. getStockParm: {
  387. name: 'getWarehousimple',
  388. page: 1,
  389. offset: 1,
  390. pagecount: 10,
  391. parammaps: {
  392. pastureId: Cookies.get('pastureid')
  393. }
  394. },
  395. warehoseTemp: {},
  396. listAdd: [],
  397. selectWarehose: [],
  398. postWarehosePramas: {},
  399. getWarehouListParm: {
  400. name: 'getWarehouproviderlist',
  401. page: 1,
  402. offset: 1,
  403. pagecount: 10,
  404. returntype: 'Map',
  405. parammaps: {}
  406. },
  407. totalWarehouprovider: 0,
  408. parentstock: [],
  409. nodeKey: 'id',
  410. defaultCheckedKeys: [],
  411. defaultProps: {
  412. children: 'children',
  413. label: 'warehoseCode'
  414. },
  415. dialogstockVisible: false,
  416. dialogwarehouseVisible: false,
  417. selectedstock: '',
  418. dataform: {
  419. id: '',
  420. name: '',
  421. selectedstock: [],
  422. sort: '',
  423. enable: ''
  424. },
  425. UpdateDataRelationParam: {
  426. name: '',
  427. dataname: '',
  428. datavalue: '',
  429. valuename: '',
  430. values: ''
  431. },
  432. // 库位选择结束
  433. // 设备选择开始
  434. getEQParm: { name: 'geteqclasslist' },
  435. parenteq: [],
  436. eq_nodeKey: 'id',
  437. eq_defaultCheckedKeys: [],
  438. eq_defaultProps: {
  439. children: 'children',
  440. label: 'typeName'
  441. },
  442. dialogeqVisible: false,
  443. selectedeq: '',
  444. eq_dataform: {
  445. id: '',
  446. name: '',
  447. selectedeq: [],
  448. sort: '',
  449. enable: ''
  450. },
  451. // 设备选择结束
  452. dialogFormVisible: false,
  453. dialogStatus: '',
  454. textMap: {
  455. update: '编辑',
  456. create: '新增',
  457. stock: '绑定备件',
  458. location: '绑定库位',
  459. eq: '授权设备'
  460. },
  461. dialogPvVisible: false,
  462. // 校验规则
  463. rules: {
  464. assetNumber: [{ required: true, message: '必填', trigger: 'blur' }],
  465. equipmentName: [{ required: true, message: '必填', trigger: 'blur' }],
  466. providerName: [{ required: true, message: '必填', trigger: 'blur' }],
  467. providerNumber: [{ required: true, message: '必填', trigger: 'blur' }]
  468. },
  469. rowStyle: { maxHeight: 50 + 'px', height: 45 + 'px' },
  470. cellStyle: { padding: 0 + 'px' },
  471. buttons: [],
  472. isProductDelete: [],
  473. isProductUpdate: [],
  474. isProductAdd: [],
  475. isPercentage: false,
  476. percentage: 1
  477. }
  478. },
  479. computed: {
  480. // 设置请求头
  481. headers() {
  482. return {
  483. // 设置token
  484. // eslint-disable-next-line no-undef
  485. token: getToken()
  486. }
  487. },
  488. uploadData() {
  489. return {
  490. name: 'insertwarehouseprovider',
  491. importParams: '牧场,库位,供应商',
  492. sheetname: 'SheetJS'
  493. }
  494. },
  495. // 设置上传地址
  496. uploadExcelUrl() {
  497. // process.env.VUE_APP_BASE_API是服务器的路径,也是axios的基本路径
  498. return process.env.VUE_APP_BASE_API + 'authdata/ImportExcel'
  499. }
  500. },
  501. created() {
  502. const that = this
  503. GetDataByName({ 'name': 'getUserPCButtons', 'parammaps': { 'jwt_username': Cookies.get('name') }}).then(response => {
  504. that.buttons = response.data.list
  505. that.getButtons()
  506. })
  507. // this.getDownList()
  508. this.getList()
  509. this.getStockList()
  510. this.geteqList()
  511. this.getTypeList()
  512. },
  513. methods: {
  514. tableSort(column) {
  515. sortChange(column, this.list)
  516. },
  517. getButtons() {
  518. // 新增
  519. const ProductAdd = 'basic:product:add'
  520. const isProductAdd = checkButtons(this.$store.state.user.buttons, ProductAdd)
  521. this.isProductAdd = isProductAdd
  522. // 删除
  523. const ProductDelete = 'basic:product:delete'
  524. const isProductDelete = checkButtons(this.$store.state.user.buttons, ProductDelete)
  525. this.isProductDelete = isProductDelete
  526. // 编辑
  527. const ProductUpdate = 'basic:product:update'
  528. const isProductUpdate = checkButtons(this.$store.state.user.buttons, ProductUpdate)
  529. this.isProductUpdate = isProductUpdate
  530. },
  531. getTypeList() {
  532. GetDataByName(this.getParmSparePart).then(response => {
  533. if (response.data.list !== null) {
  534. this.sparePartparentstock = transData(response.data.list, 'id', 'pid', 'children')
  535. }
  536. })
  537. },
  538. sparePartpopoverHide(checkedIds, checkedData) {
  539. console.log('选中值', checkedIds, checkedData)
  540. this.sparePartDataform.selectSparePart = checkedIds
  541. this.sparePartUpdateDataRelationParam.values = checkedIds
  542. // eslint-disable-next-line no-unreachable
  543. },
  544. // 供应商模糊查询
  545. providerSearch(queryString, cb) {
  546. var returnList = this.findAllProvider
  547. var results = queryString
  548. ? returnList.filter(this.createFilter(queryString))
  549. : returnList
  550. // 调用 callback 返回建议列表的数据
  551. cb(results)
  552. },
  553. createFilter(queryString) {
  554. return returnValue => {
  555. return (
  556. returnValue.name.toLowerCase().indexOf(queryString.toLowerCase()) >= 0
  557. )
  558. }
  559. },
  560. handleSelect(item) {
  561. console.log(item)
  562. },
  563. // 1-1: table&搜索
  564. getList() {
  565. this.listLoading = true
  566. GetDataByName(this.getdataListParm).then(response => {
  567. this.list = response.data.list
  568. this.pageNum = response.data.pageNum
  569. this.pageSize = response.data.pageSize
  570. if (response.data.total) {
  571. this.total = response.data.total
  572. }
  573. // Just to simulate the time of the request
  574. setTimeout(() => {
  575. this.listLoading = false
  576. }, 100)
  577. })
  578. },
  579. // 2-2:下拉框
  580. getDownList() {
  581. GetDataByNames(this.requestParams).then(response => {
  582. // this.findAllProvider = response.data.findAllProvider.list
  583. // this.findAllAssetType = response.data.findAllAssetType.list
  584. // this.findAllPasture = response.data.findAllPasture.list
  585. // this.findAllDepart = response.data.findAllDepart.list
  586. // this.findAllEmploye = response.data.findAllEmploye.list
  587. // this.getDictByName = response.data.getDictByName.list
  588. })
  589. },
  590. form_search() {
  591. this.listLoading = true
  592. this.getdataListParm.offset = 1
  593. this.getList()
  594. },
  595. handleModifyStatus(row, status) {
  596. this.$message({
  597. message: '操作成功',
  598. type: 'success'
  599. })
  600. row.status = status
  601. },
  602. form_reset() {
  603. this.temp = {
  604. // 格式化日期
  605. inputDatetime: parseTime(new Date(), '{y}-{m}-{d}')
  606. }
  607. },
  608. form_add() {
  609. this.form_reset()
  610. this.dialogStatus = 'create'
  611. this.dialogFormVisible = true
  612. // this.temp.pastureId = this.$store.state.user.pastureid
  613. this.$nextTick(() => {
  614. this.$refs['temp'].clearValidate()
  615. })
  616. },
  617. add_dialog_save() {
  618. this.$refs['temp'].validate(valid => {
  619. if (valid) {
  620. this.requestParam.name = 'insertProvider'
  621. if (this.temp.pastureId === undefined || this.temp.pastureId === '') {
  622. this.temp.pastureId = '-1'
  623. }
  624. this.requestParam.parammaps = this.temp
  625. // console.log('牧场主键:'+this.temp.pastureId)
  626. PostDataByName(this.requestParam).then(response => {
  627. if (response.msg !== 'fail') {
  628. this.getList()
  629. this.dialogFormVisible = false
  630. this.$notify({
  631. title: '成功',
  632. message: '修改成功',
  633. type: 'success',
  634. duration: 2000
  635. })
  636. } else {
  637. failproccess(response, this.$notify)
  638. }
  639. })
  640. }
  641. })
  642. },
  643. // 设备开始
  644. eq_popoverHide(checkedIds, checkedData) {
  645. this.eq_dataform.selectedeq = checkedIds
  646. this.selectedeq = checkedIds
  647. this.UpdateDataRelationParam.values = checkedIds
  648. },
  649. geteqList() {
  650. GetDataByName(this.getEQParm).then(response => {
  651. if (response.data.list !== null) {
  652. this.parenteq = transData(response.data.list, 'id', 'pid', 'children')
  653. }
  654. })
  655. },
  656. handleeqMenu(row) {
  657. this.dialogeqVisible = true
  658. this.requestParam.name = 'getEQByProvider'
  659. this.requestParam.parammaps = { providerId: row.id }
  660. this.requestParam.pagecount = 0
  661. this.requestParam.returntype = 'list'
  662. this.dialogMenuVisible = true
  663. GetDataByName(this.requestParam).then(response => {
  664. this.selectedeq = response.data.lists.eqClassId
  665. this.eq_defaultCheckedKeys = this.selectedeq
  666. this.UpdateDataRelationParam.values = this.eq_defaultCheckedKeys
  667. })
  668. },
  669. updateeq() {
  670. this.UpdateDataRelationParam.name = 'eqclass_provider'
  671. this.UpdateDataRelationParam.dataname = 'providerId'
  672. this.UpdateDataRelationParam.datavalue = this.requestParam.parammaps.providerId
  673. this.UpdateDataRelationParam.valuename = 'eqClassId'
  674. this.UpdateDataRelationParam.values = this.selectedeq
  675. UpdateDataRelation(this.UpdateDataRelationParam).then(response => {
  676. if (response.msg !== 'fail') {
  677. this.getList()
  678. this.dialogeqVisible = false
  679. this.$notify({
  680. title: '成功',
  681. message: '修改成功',
  682. type: 'success',
  683. duration: 2000
  684. })
  685. } else {
  686. failproccess(response, this.$notify)
  687. }
  688. })
  689. },
  690. // 设备选择结束
  691. // 库位开始
  692. popoverHide(checkedIds, checkedData) {
  693. this.dataform.selectedstock = checkedIds
  694. this.selectedstock = checkedIds
  695. this.UpdateDataRelationParam.values = checkedIds
  696. },
  697. getStockList() {
  698. GetDataByName(this.getStockParm).then(response => {
  699. if (response.data.list !== null) {
  700. this.parentstock = transData(response.data.list, 'id', 'pid', 'children')
  701. }
  702. })
  703. },
  704. handlePartMenu(row) {
  705. this.requestParam.name = 'getPartByProvider'
  706. this.requestParam.parammaps = { providerId: row.id }
  707. this.requestParam.pagecount = 0
  708. this.requestParam.returntype = 'list'
  709. GetDataByName(this.requestParam).then(response => {
  710. this.selectedstock = response.data.lists.partClassId
  711. this.defaultCheckedKeys = this.selectedstock
  712. this.UpdateDataRelationParam.values = this.defaultCheckedKeys
  713. })
  714. this.dialogstockVisible = true
  715. this.dialogMenuVisible = true
  716. },
  717. handlewarehouseMenu(row) {
  718. // this.requestParam.name = 'getPartByProvider'
  719. // this.requestParam.parammaps = { providerId: row.id }
  720. // this.requestParam.pagecount = 0
  721. // this.requestParam.returntype = 'list'
  722. // GetDataByName(this.requestParam).then(response => {
  723. // this.selectedstock = response.data.lists.partClassId
  724. // this.defaultCheckedKeys = this.selectedstock
  725. // this.UpdateDataRelationParam.values = this.defaultCheckedKeys
  726. // })
  727. this.warehoseTemp = Object.assign({}, row)
  728. this.dialogwarehouseVisible = true
  729. this.dialogMenuVisible = true
  730. this.selectWarehose = []
  731. this.getWarehouproviderlist()
  732. },
  733. getWarehouproviderlist() {
  734. this.getWarehouListParm.parammaps.id = this.warehoseTemp.id
  735. this.getWarehouListParm.parammaps.pastureId = this.$store.state.user.pastureid
  736. GetDataByName(this.getWarehouListParm).then(response => {
  737. this.listAdd = response.data.list
  738. this.pageNum = response.data.pageNum
  739. this.pageSize = response.data.pageSize
  740. if (response.data.total) {
  741. this.totalWarehouprovider = response.data.total
  742. }
  743. })
  744. },
  745. querySearchWarehoseCode(queryString, cb) {
  746. console.log('库位模糊查询输入值', queryString)
  747. this.getStockParm.parammaps['warehoseCode'] = queryString
  748. GetDataByName(this.getStockParm).then(response => {
  749. console.log('备件名称模糊查询搜索data', response.data.list)
  750. cb(response.data.list)
  751. })
  752. },
  753. handleSelectWarehoseCode(item) {
  754. console.log('库位模糊查询选中值', item)
  755. if (this.listAdd != null) {
  756. // eslint-disable-next-line no-redeclare
  757. if (this.listAdd.find(obj => obj.warehouseId === item.warehouseId)) {
  758. this.$message({
  759. type: 'warning',
  760. message: '此库位已存在,请重新选择库位'
  761. })
  762. } else {
  763. this.UpdateDataRelationParam.name = 'insertWarehouprovider'
  764. this.UpdateDataRelationParam.parammaps = {}
  765. this.UpdateDataRelationParam.parammaps.id = this.warehoseTemp.id
  766. this.UpdateDataRelationParam.parammaps.warehouseId = item.warehouseId
  767. GetDataByName(this.UpdateDataRelationParam).then(response => {
  768. if (response.msg !== 'fail') {
  769. this.$notify({
  770. title: '成功',
  771. message: '修改成功',
  772. type: 'success',
  773. duration: 2000
  774. })
  775. this.listAdd.unshift(item)
  776. this.getWarehouproviderlist()
  777. } else {
  778. failproccess(response, this.$notify)
  779. }
  780. })
  781. }
  782. } else {
  783. this.listAdd = []
  784. this.UpdateDataRelationParam.name = 'insertWarehouprovider'
  785. this.UpdateDataRelationParam.parammaps = {}
  786. this.UpdateDataRelationParam.parammaps.id = this.warehoseTemp.id
  787. this.UpdateDataRelationParam.parammaps.warehouseId = item.warehouseId
  788. GetDataByName(this.UpdateDataRelationParam).then(response => {
  789. if (response.msg !== 'fail') {
  790. this.$notify({
  791. title: '成功',
  792. message: '修改成功',
  793. type: 'success',
  794. duration: 2000
  795. })
  796. this.listAdd.unshift(item)
  797. this.getWarehouproviderlist()
  798. } else {
  799. failproccess(response, this.$notify)
  800. }
  801. })
  802. }
  803. this.$forceUpdate()
  804. },
  805. beforeImportExcel(file) {
  806. const isLt2M = file.size / 1024 / 1024 < 10
  807. if (!isLt2M) {
  808. this.$message.error('上传文件大小不能超过 10MB!')
  809. }
  810. return isLt2M
  811. },
  812. handleImportExcelSuccess(res, file) {
  813. if (res.msg === 'ok') {
  814. this.$message({ title: '成功', message: '导入成功:' + res.data.success + '条!', type: 'success', duration: 2000 })
  815. if (res.data.err_count > 0) {
  816. this.$notify({
  817. title: '失败',
  818. message: '导入失败:' + res.data.err_count + '条!',
  819. type: 'danger',
  820. duration: 2000
  821. })
  822. import('@/vendor/Export2Excel').then(excel => {
  823. const list1 = res.data.result
  824. const tHeader = [
  825. '牧场', '供应商', '库位', 'error_msg'
  826. ]
  827. const filterVal = [
  828. '牧场', '供应商', '库位', 'error_msg'
  829. ]
  830. const data1 = this.formatJson(filterVal, list1)
  831. excel.export_json_to_excel({
  832. header: tHeader,
  833. data: data1,
  834. filename: '供应商库位报错信息',
  835. autoWidth: true,
  836. bookType: 'xlsx'
  837. })
  838. })
  839. }
  840. this.getWarehouproviderlist()
  841. } else {
  842. this.$notify({
  843. title: '失败',
  844. message: '上传失败',
  845. type: 'danger',
  846. duration: 2000
  847. })
  848. }
  849. },
  850. handleDownloadTemp() {
  851. this.requestParam.name = 'stockLaidDownTemp'
  852. GetDataByName(this.requestParam).then(response => {
  853. this.$nextTick(() => {
  854. import('@/vendor/Export2Excel').then(excel => {
  855. const list1 = response.data.list
  856. const tHeader = [
  857. '牧场', '供应商', '库位'
  858. ]
  859. const filterVal = [
  860. '牧场', '供应商', '库位'
  861. ]
  862. const data1 = this.formatJson(filterVal, list1)
  863. excel.export_json_to_excel({
  864. header: tHeader,
  865. data: data1,
  866. filename: '供应商库位模板',
  867. autoWidth: true,
  868. bookType: 'xlsx'
  869. })
  870. })
  871. })
  872. })
  873. },
  874. formatJson(filterVal, jsonData) {
  875. return jsonData.map(v =>
  876. filterVal.map(j => {
  877. if (j === 'timestamp') {
  878. return parseTime(v[j])
  879. } else {
  880. return v[j]
  881. }
  882. })
  883. )
  884. },
  885. handleWarehoseDelete(row) {
  886. console.log(row)
  887. console.log(this.listMaintenance)
  888. MessageBox.confirm('确认是否删除当前信息?', {
  889. confirmButtonText: '确认',
  890. cancelButtonText: '取消',
  891. type: 'warning'
  892. }).then(() => {
  893. this.postWarehosePramas.name = 'deleteWarehouprovider'
  894. this.postWarehosePramas.parammaps = {}
  895. this.postWarehosePramas.parammaps.id = row.id
  896. PostDataByName(this.postWarehosePramas).then(response => {
  897. console.log('保存发送参数', this.postDataPramas)
  898. if (response.msg === 'fail') {
  899. this.$notify({
  900. title: '保存失败',
  901. message: response.data,
  902. type: 'warning',
  903. duration: 2000
  904. })
  905. } else {
  906. this.getWarehouproviderlist()
  907. this.$notify({
  908. title: '',
  909. message: '保存成功',
  910. type: 'success',
  911. duration: 2000
  912. })
  913. }
  914. })
  915. })
  916. },
  917. updatestock() {
  918. this.UpdateDataRelationParam.name = 'partClass_provider'
  919. this.UpdateDataRelationParam.dataname = 'providerId'
  920. this.UpdateDataRelationParam.datavalue = this.requestParam.parammaps.providerId
  921. this.UpdateDataRelationParam.valuename = 'partClassId'
  922. this.UpdateDataRelationParam.values = this.selectedstock
  923. UpdateDataRelation(this.UpdateDataRelationParam).then(response => {
  924. if (response.msg !== 'fail') {
  925. this.getList()
  926. this.dialogstockVisible = false
  927. this.$notify({
  928. title: '成功',
  929. message: '修改成功',
  930. type: 'success',
  931. duration: 2000
  932. })
  933. } else {
  934. failproccess(response, this.$notify)
  935. }
  936. })
  937. },
  938. // updatewarehouse() {
  939. // console.log(this.selectWarehose)
  940. // for (var i = 0; i < this.listAdd.length; i++) {
  941. // this.selectWarehose.push(this.listAdd[i].warehouseId)
  942. // }
  943. // this.UpdateDataRelationParam.name = 'warehouse_provider'
  944. // this.UpdateDataRelationParam.dataname = 'providerId'
  945. // this.UpdateDataRelationParam.datavalue = this.warehoseTemp.id
  946. // this.UpdateDataRelationParam.valuename = 'warehouseId'
  947. // this.UpdateDataRelationParam.values = this.selectWarehose
  948. // UpdateDataRelation(this.UpdateDataRelationParam).then(response => {
  949. // if (response.msg !== 'fail') {
  950. // this.$notify({
  951. // title: '成功',
  952. // message: '修改成功',
  953. // type: 'success',
  954. // duration: 2000
  955. // })
  956. // this.dialogwarehouseVisible = false
  957. // this.getList()
  958. // } else {
  959. // failproccess(response, this.$notify)
  960. // }
  961. // })
  962. // },
  963. // 备件选择结束
  964. form_edit(row) {
  965. this.temp = Object.assign({}, row) // copy obj
  966. this.dialogStatus = 'update'
  967. this.dialogFormVisible = true
  968. this.$nextTick(() => {
  969. this.$refs['temp'].clearValidate()
  970. })
  971. },
  972. edit_dialog_save() {
  973. this.$refs['temp'].validate(valid => {
  974. if (valid) {
  975. this.requestParam.name = 'updateProvider'
  976. this.requestParam.parammaps = this.temp
  977. PostDataByName(this.requestParam).then(response => {
  978. console.log(response)
  979. if (response.msg === 'fail') {
  980. this.$notify({
  981. title: '失败',
  982. message: '保存失败-' + response.data,
  983. type: 'warning',
  984. duration: 2000
  985. })
  986. } else {
  987. this.getList()
  988. this.dialogFormVisible = false
  989. this.$notify({
  990. title: '成功',
  991. message: '修改成功',
  992. type: 'success',
  993. duration: 2000
  994. })
  995. }
  996. })
  997. }
  998. })
  999. },
  1000. // 导出
  1001. handleDownload() {
  1002. this.$alert('供应商正在导出中,请勿刷新或离开本页面,若导出时间过长,建议缩小导出数据范围重新导出', {})
  1003. this.isPercentage = true
  1004. this.percentage = 1
  1005. var timer = setInterval(() => {
  1006. this.percentage += 5
  1007. if (this.percentage > 95) {
  1008. this.percentage = 99
  1009. clearInterval(timer)
  1010. }
  1011. this.percentage = this.percentage
  1012. }, 1000)
  1013. this.requestParam.name = 'getProviderList'
  1014. GetAccount(this.requestParam).then(response => {
  1015. this.$nextTick(() => {
  1016. import('@/vendor/Export2Excel').then(excel => {
  1017. const list1 = response.data.list
  1018. if (response.data.list !== '') {
  1019. this.percentage = 99
  1020. setTimeout(() => {
  1021. this.isPercentage = false
  1022. }, 2000)
  1023. }
  1024. const tHeader = [
  1025. '供应商名称', '供应商编码', '供应商简称', '联系人', '联系方式',
  1026. '营业执照', '组织机构代码', '税务登记证', '开户许可证', '邮箱'
  1027. ]
  1028. const filterVal = [
  1029. 'providerName', 'providerNumber', 'providerIntro', 'linkman', 'telphone',
  1030. 'businessLicense', 'organizationCode', 'IRSregister', 'openLicence', 'email'
  1031. ]
  1032. const data1 = formatJson(filterVal, list1)
  1033. excel.export_json_to_excel({
  1034. header: tHeader,
  1035. data: data1,
  1036. filename: '供应商',
  1037. autoWidth: true,
  1038. bookType: 'xlsx'
  1039. })
  1040. })
  1041. })
  1042. })
  1043. },
  1044. form_delete(row) {
  1045. MessageBox.confirm('设备名称:' + row.providerName, '确认删除?', {
  1046. confirmButtonText: '确认',
  1047. cancelButtonText: '取消',
  1048. type: 'warning'
  1049. })
  1050. .then(() => {
  1051. this.requestParam.name = 'deleteProvider'
  1052. this.requestParam.parammaps = {}
  1053. this.requestParam.parammaps['id'] = row.id
  1054. PostDataByName(this.requestParam).then(() => {
  1055. this.getList()
  1056. this.dialogFormVisible = false
  1057. this.$notify({
  1058. title: '成功',
  1059. message: '删除成功',
  1060. type: 'success',
  1061. duration: 2000
  1062. })
  1063. })
  1064. })
  1065. .catch(() => {
  1066. this.$message({
  1067. type: 'info',
  1068. message: '已取消删除'
  1069. })
  1070. })
  1071. },
  1072. handleEnableChange(index, row) { // 启用按钮更新状态
  1073. this.requestParam.name = 'updateProviderEnable' // 接口名称
  1074. this.requestParam.parammaps = {}
  1075. this.requestParam.parammaps.enable = row.enable // 传递参数
  1076. this.requestParam.parammaps.id = row.id
  1077. PostDataByName(this.requestParam).then(response => { // 响应信息处理
  1078. if (response.msg !== 'fail') {
  1079. this.$notify({ title: '成功', message: '修改成功', type: 'success', duration: 2000 })
  1080. this.getList()
  1081. } else {
  1082. failproccess(response, this.$notify)
  1083. }
  1084. })
  1085. },
  1086. handleFlexPriceChange(index, row) { // 是否线上采购
  1087. this.requestParam = {}
  1088. this.requestParam.common = { 'returnmap': '0' }
  1089. this.requestParam.data = []
  1090. this.requestParam.data[0] = { 'name': 'updateProviderflexPrice', 'type': 'e', 'parammaps': {
  1091. flexPrice: row.flexPrice,
  1092. id: row.id
  1093. }}
  1094. this.requestParam.data[1] = { 'name': 'insertBrandV2', 'type': 'e', 'parammaps': {
  1095. brandName: row.providerName
  1096. }}
  1097. ExecDataByConfig(this.requestParam).then(response => {
  1098. if (response.msg == 'fail') {
  1099. this.$notify({ title: '保存失败', message: response.data, type: 'warning', duration: 2000 })
  1100. } else {
  1101. this.getList()
  1102. this.$notify({ title: '', message: '保存成功', type: 'success', duration: 2000 })
  1103. }
  1104. })
  1105. }
  1106. }
  1107. }
  1108. </script>