branchSetting.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <div class='m-container'>
  3. <h2>
  4. <div class="squrt"></div>分部设置
  5. </h2>
  6. <div class="m-core">
  7. <div @click="onBranchOperation('create')"
  8. v-permission="'organization/add'"
  9. class='newBand'>添加</div>
  10. <!-- 列表 -->
  11. <div class="tableWrap">
  12. <el-table :data='tableList'
  13. :header-cell-style="{background:'#EDEEF0',color:'#444'}">
  14. <el-table-column align='center'
  15. prop="name"
  16. label="分部名称">
  17. </el-table-column>
  18. <el-table-column align='center'
  19. prop="areaName"
  20. label="城市">
  21. </el-table-column>
  22. <el-table-column align='center'
  23. prop="address"
  24. label="分部地址">
  25. </el-table-column>
  26. <el-table-column align='center'
  27. label="成立时间">
  28. <template slot-scope="scope">
  29. {{ scope.row.registerDate | formatTimer }}
  30. </template>
  31. </el-table-column>
  32. <el-table-column align='center'
  33. label="操作">
  34. <template slot-scope="scope">
  35. <el-button @click="onBranchOperation('update', scope.row)"
  36. v-permission="'organization/update'"
  37. type="text">修改</el-button>
  38. </template>
  39. </el-table-column>
  40. </el-table>
  41. <pagination :total="pageInfo.total"
  42. :page.sync="pageInfo.page"
  43. :limit.sync="pageInfo.limit"
  44. :page-sizes="pageInfo.page_size"
  45. @pagination="getList" />
  46. </div>
  47. </div>
  48. <el-dialog :title="formTitle[formActionTitle]"
  49. :visible.sync="branchStatus"
  50. @close="onFormClose('ruleForm')"
  51. width="500px">
  52. <el-form :model="form"
  53. :rules="rules"
  54. ref="ruleForm">
  55. <el-form-item label="分部名称"
  56. prop="name"
  57. :label-width="formLabelWidth">
  58. <el-input v-model="form.name"
  59. autocomplete="off"></el-input>
  60. </el-form-item>
  61. <el-form-item label="城市"
  62. required
  63. :label-width="formLabelWidth">
  64. <el-col :span="12">
  65. <el-form-item prop="province">
  66. <el-select v-model="form.province"
  67. @change="onChangeProvince">
  68. <el-option v-for="item in provinceList"
  69. :key="item.value"
  70. :label="item.label"
  71. :value="item.value"></el-option>
  72. </el-select>
  73. </el-form-item>
  74. </el-col>
  75. <el-col :span="12">
  76. <el-form-item prop="city">
  77. <el-select v-model="form.city">
  78. <el-option v-for="item in cityList"
  79. :key="item.value"
  80. :label="item.label"
  81. :value="item.value"></el-option>
  82. </el-select>
  83. </el-form-item>
  84. </el-col>
  85. </el-form-item>
  86. <el-form-item label="分部地址"
  87. prop="address"
  88. :label-width="formLabelWidth">
  89. <el-input v-model="form.address"
  90. autocomplete="off"></el-input>
  91. </el-form-item>
  92. <el-form-item label="成立时间"
  93. prop="registerDate"
  94. :label-width="formLabelWidth">
  95. <el-date-picker v-model="form.registerDate"
  96. type="date"
  97. value-format="yyyy-MM-dd"
  98. placeholder="选择日期"></el-date-picker>
  99. </el-form-item>
  100. </el-form>
  101. <span slot="footer"
  102. class="dialog-footer">
  103. <el-button @click="branchStatus = false">取 消</el-button>
  104. <el-button @click="onBranchSubmit('ruleForm')"
  105. type="primary">确 定</el-button>
  106. </span>
  107. </el-dialog>
  108. </div>
  109. </template>
  110. <script>
  111. import pagination from '@/components/Pagination/index'
  112. import { branchQueryPage, areaQueryChild, branchAdd, branchUpdate, getParentArea } from '@/api/specialSetting'
  113. import store from '@/store'
  114. export default {
  115. components: { pagination },
  116. data () {
  117. return {
  118. tableList: [],
  119. pageInfo: {
  120. // 分页规则
  121. limit: 10, // 限制显示条数
  122. page: 1, // 当前页
  123. total: 0, // 总条数
  124. page_size: [10, 20, 40, 50] // 选择限制显示条数
  125. },
  126. organId: null,
  127. formActionTitle: 'create',
  128. formTitle: {
  129. create: '添加分部',
  130. update: '修改分部'
  131. },
  132. formLabelWidth: '100px',
  133. branchStatus: false,
  134. provinceList: [], // 省列表
  135. cityList: [], // 市列表
  136. form: {
  137. name: null,
  138. province: null,
  139. city: null,
  140. address: null,
  141. registerDate: null
  142. },
  143. rules: {
  144. name: [{ required: true, message: '请输入分部名称', trigger: 'blur' }],
  145. province: [{ required: true, message: '请选择省', trigger: 'change' }],
  146. city: [{ required: true, message: '请选择市', trigger: 'change' }],
  147. address: [{ required: true, message: '请输入分部地址', trigger: 'blur' }],
  148. registerDate: [{ required: true, message: '请选择成立时间', trigger: 'change' }]
  149. }
  150. }
  151. },
  152. mounted () {
  153. this.getList()
  154. this.getAreaList()
  155. },
  156. methods: {
  157. onBranchSubmit (formName) {
  158. this.$refs[formName].validate(valid => {
  159. if (!valid) return
  160. this.form.areaId = this.form.city
  161. if (this.formActionTitle == 'create') {
  162. if (this.form.id) { // 判断有没有Id,如果有则删除
  163. delete this.form.id
  164. }
  165. branchAdd(this.form).then(res => {
  166. this.messageTips('添加', res)
  167. })
  168. } else if (this.formActionTitle == 'update') {
  169. branchUpdate(this.form).then(res => {
  170. this.messageTips('修改', res)
  171. })
  172. }
  173. })
  174. },
  175. messageTips (title, res) {
  176. if (res.code == 200) {
  177. this.$message.success(title + '成功')
  178. this.branchStatus = false
  179. this.getList()
  180. } else {
  181. this.$message.error(res.msg)
  182. }
  183. },
  184. getList () {
  185. branchQueryPage({
  186. rows: this.pageInfo.limit,
  187. page: this.pageInfo.page
  188. }).then(res => {
  189. if (res.code == 200 && res.data) {
  190. this.tableList = res.data.rows
  191. this.pageInfo.total = res.data.total
  192. }
  193. })
  194. },
  195. onFormClose (formName) { // 关闭弹窗重置验证
  196. this.$refs[formName].resetFields()
  197. },
  198. getAreaList (parentId, callback) {
  199. parentId = parentId ? parentId : 0
  200. areaQueryChild({ parentId: parentId }).then(res => {
  201. if (res.code == 200 && res.data) {
  202. let tempData = []
  203. res.data.forEach(item => {
  204. tempData.push({
  205. label: item.name,
  206. value: item.id
  207. })
  208. })
  209. if (parentId) {
  210. this.cityList = tempData
  211. } else {
  212. this.provinceList = tempData
  213. }
  214. if (callback && typeof callback == 'function') {
  215. callback()
  216. }
  217. }
  218. })
  219. },
  220. onChangeProvince (val) {
  221. this.form.city = null
  222. this.getAreaList(val)
  223. },
  224. onBranchOperation (type, row) { // 修改分部信息
  225. this.formActionTitle = type
  226. this.branchStatus = true
  227. if (type == 'update') {
  228. getParentArea({ id: row.areaId }).then(res => {
  229. if (res.code == 200 && res.data) {
  230. this.getAreaList(res.data.id, () => {
  231. this.form = {
  232. id: row.id,
  233. name: row.name,
  234. province: res.data.id,
  235. city: row.areaId,
  236. address: row.address,
  237. registerDate: row.registerDate
  238. }
  239. })
  240. }
  241. })
  242. }
  243. }
  244. }
  245. }
  246. </script>
  247. <style lang="scss" scoped>
  248. /deep/.el-button--primary {
  249. background: #14928a;
  250. border-color: #14928a;
  251. color: #fff;
  252. &:hover,
  253. &:active,
  254. &:focus {
  255. background: #14928a;
  256. border-color: #14928a;
  257. color: #fff;
  258. }
  259. }
  260. /deep/.el-date-editor.el-input {
  261. width: 100% !important;
  262. }
  263. /deep/.el-select {
  264. width: 98% !important;
  265. }
  266. </style>