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.

379 lines
11 KiB

6 days ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top" :model="searchData">
  4. <el-form-item label="Buyer编码">
  5. <el-input v-model="searchData.buyerCode" clearable style="width: 160px" placeholder="请输入编码" />
  6. </el-form-item>
  7. <el-form-item label="Buyer名称">
  8. <el-input v-model="searchData.buyerName" clearable style="width: 220px" placeholder="请输入名称" />
  9. </el-form-item>
  10. <el-form-item label="启用">
  11. <el-select v-model="searchData.active" clearable style="width: 120px">
  12. <el-option label="Y" value="Y" />
  13. <el-option label="N" value="N" />
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label=" ">
  17. <el-button type="primary" @click="getDataList()">查询</el-button>
  18. <el-button type="primary" @click="addModal()">新增</el-button>
  19. <el-button type="primary" @click="exportExcel()">导出</el-button>
  20. </el-form-item>
  21. </el-form>
  22. <el-table
  23. :height="height"
  24. :data="dataList"
  25. border
  26. v-loading="dataListLoading"
  27. style="width: 100%;">
  28. <el-table-column
  29. v-for="(item,index) in columnList"
  30. :key="index"
  31. :sortable="item.columnSortable"
  32. :prop="item.columnProp"
  33. :header-align="item.headerAlign"
  34. :show-overflow-tooltip="item.showOverflowTooltip"
  35. :align="item.align"
  36. :fixed="item.fixed === '' ? false : item.fixed"
  37. :min-width="item.columnWidth"
  38. :label="item.columnLabel" />
  39. <el-table-column
  40. fixed="right"
  41. header-align="center"
  42. align="center"
  43. width="120"
  44. label="操作">
  45. <template slot-scope="scope">
  46. <el-link style="cursor: pointer" @click="updateModal(scope.row)">编辑 |</el-link>
  47. <el-link style="cursor: pointer" @click="deleteHandle(scope.row)">删除</el-link>
  48. </template>
  49. </el-table-column>
  50. </el-table>
  51. <el-pagination
  52. @size-change="sizeChangeHandle"
  53. @current-change="currentChangeHandle"
  54. :current-page="pageIndex"
  55. :page-sizes="[20, 50, 100, 200, 500]"
  56. :page-size="pageSize"
  57. :total="totalPage"
  58. layout="total, sizes, prev, pager, next, jumper" />
  59. <el-dialog title="Buyer维护" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="580px">
  60. <el-form
  61. ref="modalForm"
  62. label-position="top"
  63. :model="modalData"
  64. :rules="rules"
  65. style="margin-left: 7px; margin-right: 7px;">
  66. <el-row :gutter="24">
  67. <el-col :span="12">
  68. <el-form-item label="编码" prop="buyerCode">
  69. <el-input v-model.trim="modalData.buyerCode" :disabled="modalDisableFlag" />
  70. </el-form-item>
  71. </el-col>
  72. <el-col :span="12">
  73. <el-form-item label="启用" prop="active">
  74. <el-select v-model="modalData.active" style="width: 100%">
  75. <el-option label="Y" value="Y" />
  76. <el-option label="N" value="N" />
  77. </el-select>
  78. </el-form-item>
  79. </el-col>
  80. </el-row>
  81. <el-row :gutter="24">
  82. <el-col :span="24">
  83. <el-form-item label="名称" prop="buyerName">
  84. <el-input v-model.trim="modalData.buyerName" maxlength="300" show-word-limit />
  85. </el-form-item>
  86. </el-col>
  87. </el-row>
  88. <el-row :gutter="24">
  89. <el-col :span="24">
  90. <el-form-item label="备注" prop="remark">
  91. <el-input v-model.trim="modalData.remark" type="textarea" maxlength="255" show-word-limit :rows="3" />
  92. </el-form-item>
  93. </el-col>
  94. </el-row>
  95. </el-form>
  96. <el-footer style="height:25px;margin-top: 60px;text-align:center">
  97. <el-button type="primary" @click="saveData()">保存</el-button>
  98. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  99. </el-footer>
  100. </el-dialog>
  101. </div>
  102. </template>
  103. <script>
  104. import {
  105. searchPoBuyerPage,
  106. createPoBuyer,
  107. updatePoBuyer,
  108. deletePoBuyer
  109. } from '@/api/order/poBuyer.js'
  110. import excel from '@/utils/excel-util.js'
  111. export default {
  112. name: 'poBuyer',
  113. data () {
  114. return {
  115. exportName: 'Buyer维护_' + this.dayjs().format('YYYYMMDDHHmmss'),
  116. height: 200,
  117. dataList: [],
  118. dataListLoading: false,
  119. pageIndex: 1,
  120. pageSize: 20,
  121. totalPage: 0,
  122. searchData: {
  123. site: this.$store.state.user.site,
  124. buyerCode: '',
  125. buyerName: '',
  126. active: '',
  127. page: 1,
  128. limit: 10
  129. },
  130. modalFlag: false,
  131. modalDisableFlag: false,
  132. modalData: {
  133. site: this.$store.state.user.site,
  134. buyerCode: '',
  135. buyerName: '',
  136. active: 'Y',
  137. remark: '',
  138. flag: '1'
  139. },
  140. columnList: [
  141. // {
  142. // columnProp: 'site',
  143. // headerAlign: 'center',
  144. // align: 'center',
  145. // columnLabel: 'Site',
  146. // columnHidden: false,
  147. // columnSortable: false,
  148. // fixed: '',
  149. // columnWidth: 100,
  150. // showOverflowTooltip: true
  151. // },
  152. {
  153. columnProp: 'buyerCode',
  154. headerAlign: 'center',
  155. align: 'center',
  156. columnLabel: '编码',
  157. columnHidden: false,
  158. columnSortable: false,
  159. fixed: '',
  160. columnWidth: 160,
  161. showOverflowTooltip: true
  162. },
  163. {
  164. columnProp: 'buyerName',
  165. headerAlign: 'center',
  166. align: 'left',
  167. columnLabel: '名称',
  168. columnHidden: false,
  169. columnSortable: false,
  170. fixed: '',
  171. columnWidth: 260,
  172. showOverflowTooltip: true
  173. },
  174. {
  175. columnProp: 'active',
  176. headerAlign: 'center',
  177. align: 'center',
  178. columnLabel: '启用',
  179. columnHidden: false,
  180. columnSortable: false,
  181. fixed: '',
  182. columnWidth: 90,
  183. showOverflowTooltip: true
  184. },
  185. {
  186. columnProp: 'remark',
  187. headerAlign: 'center',
  188. align: 'left',
  189. columnLabel: '备注',
  190. columnHidden: false,
  191. columnSortable: false,
  192. fixed: '',
  193. columnWidth: 260,
  194. showOverflowTooltip: true
  195. }
  196. ],
  197. rules: {
  198. buyerCode: [
  199. { required: true, message: '请输入编码', trigger: 'blur' },
  200. { max: 50, message: '编码长度不能超过50', trigger: 'blur' }
  201. ],
  202. buyerName: [
  203. { required: true, message: '请输入名称', trigger: 'blur' },
  204. { max: 300, message: '名称长度不能超过300', trigger: 'blur' }
  205. ],
  206. active: [
  207. { required: true, message: '请选择启用状态', trigger: 'change' }
  208. ],
  209. remark: [
  210. { max: 255, message: '备注长度不能超过255', trigger: 'blur' }
  211. ]
  212. }
  213. }
  214. },
  215. mounted () {
  216. this.$nextTick(() => {
  217. this.height = window.innerHeight - 180
  218. })
  219. },
  220. created () {
  221. this.getDataList()
  222. },
  223. methods: {
  224. getDataList () {
  225. this.dataListLoading = true
  226. const params = {
  227. ...this.searchData,
  228. site: this.$store.state.user.site,
  229. page: this.pageIndex,
  230. limit: this.pageSize
  231. }
  232. searchPoBuyerPage(params).then(({ data }) => {
  233. if (data && data.code === 0) {
  234. const pageData = data.page
  235. this.dataList = pageData && pageData.list ? pageData.list : []
  236. this.pageIndex = pageData && pageData.currPage ? pageData.currPage : 1
  237. this.pageSize = pageData && pageData.pageSize ? pageData.pageSize : this.pageSize
  238. this.totalPage = pageData && pageData.totalCount ? pageData.totalCount : 0
  239. } else {
  240. this.$message.error((data && data.msg) || '获取数据失败')
  241. }
  242. }).catch(err => {
  243. this.$message.error((err && err.message) || '获取数据失败')
  244. }).finally(() => {
  245. this.dataListLoading = false
  246. })
  247. },
  248. sizeChangeHandle (val) {
  249. this.pageSize = val
  250. this.pageIndex = 1
  251. this.getDataList()
  252. },
  253. currentChangeHandle (val) {
  254. this.pageIndex = val
  255. this.getDataList()
  256. },
  257. addModal () {
  258. this.modalDisableFlag = false
  259. this.modalData = {
  260. site: this.$store.state.user.site,
  261. buyerCode: '',
  262. buyerName: '',
  263. active: 'Y',
  264. remark: '',
  265. flag: '1'
  266. }
  267. this.modalFlag = true
  268. this.$nextTick(() => {
  269. if (this.$refs.modalForm) {
  270. this.$refs.modalForm.clearValidate()
  271. }
  272. })
  273. },
  274. updateModal (row) {
  275. this.modalDisableFlag = true
  276. this.modalData = {
  277. site: row.site,
  278. buyerCode: row.buyerCode,
  279. buyerName: row.buyerName,
  280. active: row.active,
  281. remark: row.remark || '',
  282. flag: '2'
  283. }
  284. this.modalFlag = true
  285. this.$nextTick(() => {
  286. if (this.$refs.modalForm) {
  287. this.$refs.modalForm.clearValidate()
  288. }
  289. })
  290. },
  291. saveData () {
  292. this.$refs.modalForm.validate(valid => {
  293. if (!valid) return
  294. const payload = {
  295. ...this.modalData,
  296. site: this.$store.state.user.site
  297. }
  298. const api = payload.flag === '1' ? createPoBuyer : updatePoBuyer
  299. api(payload).then(({ data }) => {
  300. if (data && data.code === 0) {
  301. this.$message.success('操作成功')
  302. this.modalFlag = false
  303. this.getDataList()
  304. } else {
  305. this.$message.error((data && data.msg) || '操作失败')
  306. }
  307. }).catch(err => {
  308. this.$message.error((err && err.message) || '操作失败')
  309. })
  310. })
  311. },
  312. deleteHandle (row) {
  313. this.$confirm(`确定删除Buyer【${row.buyerCode}】吗?`, '提示', {
  314. confirmButtonText: '确定',
  315. cancelButtonText: '取消',
  316. type: 'warning'
  317. }).then(() => {
  318. deletePoBuyer({
  319. site: row.site || this.$store.state.user.site,
  320. buyerCode: row.buyerCode
  321. }).then(({ data }) => {
  322. if (data && data.code === 0) {
  323. this.$message.success('删除成功')
  324. this.getDataList()
  325. } else {
  326. this.$message.error((data && data.msg) || '删除失败')
  327. }
  328. }).catch(err => {
  329. this.$message.error((err && err.message) || '删除失败')
  330. })
  331. }).catch(() => {})
  332. },
  333. exportExcel () {
  334. const params = {
  335. ...this.searchData,
  336. site: this.$store.state.user.site
  337. }
  338. excel.exportTable({
  339. url: '/poBuyer/list',
  340. columnMapping: this.columnList,
  341. mergeSetting: [],
  342. params,
  343. fileName: this.exportName + '.xlsx',
  344. rowFetcher: res => {
  345. if (res && res.data && res.data.code === 0) {
  346. return { rows: res.data.rows || [] }
  347. }
  348. return { rows: [] }
  349. },
  350. columnFormatter: [],
  351. dropColumns: []
  352. })
  353. }
  354. }
  355. }
  356. </script>
  357. <style scoped>
  358. .mod-config {
  359. padding: 0;
  360. }
  361. .el-table /deep/ .cell {
  362. height: auto;
  363. line-height: 1.5;
  364. }
  365. </style>