branchSetting.vue 8.9 KB

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