Department.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. <style lang="scss">
  2. .staff{
  3. display: flex;
  4. justify-content: space-between;
  5. .companies{
  6. height: 75vh;
  7. overflow: auto;
  8. margin-right: 10px;
  9. overflow-x: hidden;
  10. }
  11. &>li{
  12. width: 30%;
  13. list-style: none;
  14. min-height: 70vh;
  15. background: #fff;
  16. border: 1px solid #d9d9d9;
  17. padding:20px 10px;
  18. }
  19. .custom-tree-node{
  20. width: 100%;
  21. .el-tree-node__content{
  22. height: 32px;
  23. }
  24. .label_name{
  25. font-size: 14px;
  26. }
  27. .active{
  28. color:#1989FA;
  29. }
  30. .edit{
  31. float: right;
  32. i{
  33. font-weight: bolder;
  34. font-size: 14px;
  35. }
  36. }
  37. }
  38. .staff_list{
  39. width: 68%;
  40. }
  41. }
  42. .staffs{
  43. margin-right: 10px;
  44. }
  45. </style>
  46. <template>
  47. <section>
  48. <p>公司管理 > 部门列表</p>
  49. <div class="content">
  50. <ul class="staff">
  51. <li class="companies">
  52. <el-form size="small">
  53. <el-form-item>
  54. <el-input suffix-icon="el-icon-search" v-model="name" @change="getData" placeholder="公司名称"></el-input>
  55. </el-form-item>
  56. </el-form>
  57. <el-tree
  58. :data="data"
  59. node-key="id" :props='props'
  60. :expand-on-click-node="false">
  61. <span class="custom-tree-node" slot-scope="{ node, data }" @click="change(data)" >
  62. <span v-if='id==data.id' class="label_name active">{{ node.label }}</span>
  63. <span v-else class="label_name">{{ node.label }}</span>
  64. </span>
  65. </el-tree>
  66. </li>
  67. <li class="staff_list">
  68. <el-form label-width="70px" :inline="true" size="small" label-position="left">
  69. <!-- <el-form-item label="公司名称">
  70. <el-input clearable placeholder="请输入公司名称" v-model="form.name"></el-input>
  71. </el-form-item> -->
  72. <el-form-item>
  73. <!-- <el-button @click="form.page=1,getData()" type="primary" icon="el-icon-search">搜索</el-button> -->
  74. <el-button icon="el-icon-plus" @click="dialogFormVisible=true,dpt={enterprise_id:'',staffusers:[]}" type="primary">新增部门</el-button>
  75. </el-form-item>
  76. </el-form>
  77. <el-table
  78. class="table"
  79. :data="list" height="54vh"
  80. border v-loading="loading"
  81. style="width: 100%">
  82. <el-table-column
  83. prop="enterprise_name"
  84. label="公司名称">
  85. </el-table-column>
  86. <el-table-column
  87. prop="name"
  88. label="部门">
  89. </el-table-column>
  90. <el-table-column
  91. prop="ctime"
  92. label="时间">
  93. </el-table-column>
  94. <el-table-column fixed="right"
  95. prop="zip" width="230"
  96. label="操作">
  97. <template slot-scope="scope">
  98. <el-button @click="viewStaff(scope.row.staffusers)" size="mini" type="warning">查看员工</el-button>
  99. <el-button icon="el-icon-edit" @click="edit(scope.row)" size="mini" type="warning">编辑</el-button>
  100. <el-button icon="el-icon-delete" @click="del(scope.row.id)" size="mini" type="danger">删除</el-button>
  101. </template>
  102. </el-table-column>
  103. </el-table>
  104. <Page ref="pageButton" :total='total' @pageChange='gopage'/>
  105. </li>
  106. </ul>
  107. </div>
  108. <el-dialog title="添加部门" :visible.sync="dialogFormVisible" width="500px" :close-on-click-modal='false' :close-on-press-escape='false'>
  109. <el-form :model="form" label-width="80px">
  110. <el-form-item label="部门名称">
  111. <el-input clearable placeholder="请输入部门名称" v-model="dpt.name"></el-input>
  112. </el-form-item>
  113. <el-form-item label="部门员工" >
  114. <el-tag class="staffs"
  115. :key="index"
  116. v-for="(item,index) in dpt.staffusers"
  117. closable type="info"
  118. :disable-transitions="false"
  119. @close="handleClose(index)">
  120. {{item.name}}
  121. </el-tag>
  122. &nbsp;
  123. <el-button class="button-new-tag" size="small" @click="dialogFormVisible1=true">+ 添加员工</el-button>
  124. </el-form-item>
  125. </el-form>
  126. <div slot="footer" class="dialog-footer">
  127. <el-button size="small" @click="dialogFormVisible = false">取 消</el-button>
  128. <el-button size="small" type="primary" @click="add">确 定</el-button>
  129. </div>
  130. </el-dialog>
  131. <el-dialog title="新增员工" :visible.sync="dialogFormVisible1" width="500px" :close-on-click-modal='false' :close-on-press-escape='false'>
  132. <el-form size="small" label-width="80px">
  133. <el-form-item label="姓名">
  134. <el-input clearable v-model="staff.name"></el-input>
  135. </el-form-item>
  136. <el-form-item label="账号">
  137. <el-input clearable v-model="staff.username"></el-input>
  138. </el-form-item>
  139. <el-form-item label="密码">
  140. <el-input clearable type="password" v-model="staff.password"></el-input>
  141. </el-form-item>
  142. <el-form-item label="联系电话">
  143. <el-input clearable v-model="staff.phone"></el-input>
  144. </el-form-item>
  145. <el-form-item label="账号类型">
  146. <el-select clearable v-model="staff.utype" placeholder="请选择">
  147. <el-option label="部门级" value="部门级"></el-option>
  148. <el-option label="岗位级" value="岗位级"></el-option>
  149. </el-select>
  150. </el-form-item>
  151. </el-form>
  152. <div slot="footer" class="dialog-footer">
  153. <el-button size="small" @click="dialogFormVisible1 = false">取 消</el-button>
  154. <el-button size="small" type="primary" @click="addStaff">确 定</el-button>
  155. </div>
  156. </el-dialog>
  157. <el-dialog title="员工列表" :visible.sync="dialogFormVisible2" width="500px" :close-on-click-modal='false' :close-on-press-escape='false'>
  158. <el-table
  159. class="table"
  160. :data="staffList" height="300px"
  161. border
  162. style="width: 100%">
  163. <el-table-column
  164. prop="name"
  165. label="姓名">
  166. </el-table-column>
  167. <el-table-column
  168. prop="phonr"
  169. label="电话">
  170. </el-table-column>
  171. <el-table-column
  172. prop="username"
  173. label="账号">
  174. </el-table-column>
  175. <el-table-column
  176. prop="utype"
  177. label="账号类型">
  178. </el-table-column>
  179. </el-table>
  180. <!-- <div slot="footer" class="dialog-footer">
  181. <el-button size="small" @click="dialogFormVisible1 = false">取 消</el-button>
  182. <el-button size="small" type="primary" @click="addStaff">确 定</el-button>
  183. </div> -->
  184. </el-dialog>
  185. </section>
  186. </template>
  187. <script>
  188. import Page from '../../components/Page';
  189. export default {
  190. components:{
  191. Page
  192. },
  193. data() {
  194. return {
  195. dialogFormVisible:false,
  196. dialogFormVisible1:false,
  197. dialogFormVisible2:false,
  198. data:[],
  199. form:{page:1,page_size:20},
  200. list:[],
  201. total:1,
  202. loading:false,
  203. props:{
  204. label:'name'
  205. },
  206. id:'',
  207. dpt:{enterprise_name:'',enterprise_id:'',staffusers:[]},
  208. enterprise_name:'',
  209. name:'',
  210. staff:{},
  211. staffList:[]
  212. };
  213. },
  214. methods: {
  215. gopage(size){
  216. if(size){
  217. this.form.page_size=size
  218. }
  219. this.form.page=this.$refs.pageButton.page
  220. this.getData()
  221. },
  222. change(data){
  223. this.id=data.id;
  224. this.enterprise_name=data.name;
  225. this.getDpt();
  226. },
  227. getData(){
  228. this.loading=true
  229. this.$api.getEnterpriseList({name:this.name}).then(res=>{
  230. this.data=res.data.data.list;
  231. this.id=this.data[0].id;
  232. this.enterprise_name=this.data[0].name;
  233. this.getDpt()
  234. })
  235. },
  236. getDpt(){
  237. var parm=this.form;
  238. parm.enterprise_id=this.id
  239. this.$api.getDepartmentList(parm).then(res=>{
  240. this.loading=false;
  241. this.list=res.data.data.list;
  242. this.total=res.data.data.total
  243. })
  244. },
  245. del(id){
  246. this.$confirm('确定删除吗', '提示', {
  247. type: 'warning'
  248. }).then(() => {
  249. this.$api.deleteDepartment({id:id}).then((res)=>{
  250. this.$message({
  251. message: '删除成功',
  252. type: 'success'
  253. })
  254. this.getDpt()
  255. })
  256. })
  257. },
  258. add(){
  259. let parm=this.dpt;
  260. if(!parm.name){
  261. this.$message.error('请输入部门名称');
  262. return;
  263. }
  264. if(parm.staffusers.length<1){
  265. this.$message.error('请添加员工');
  266. return;
  267. }
  268. if(parm.id){
  269. this.$api.updateDepartment(parm).then(res=>{
  270. if(res.data.code==0){
  271. this.$message({message: '修改成功!',type: 'success'});
  272. this.getDpt()
  273. this.dpt={enterprise_id:'',staffusers:[]}
  274. this.dialogFormVisible=false
  275. }else{
  276. this.$message.error(res.data.message);
  277. }
  278. })
  279. }else{
  280. parm.enterprise_id=this.id
  281. parm.enterprise_name=this.enterprise_name
  282. this.$api.saveDepartment(parm).then(res=>{
  283. if(res.data.code==0){
  284. this.$message({message: '添加成功!',type: 'success'});
  285. this.getDpt()
  286. this.dpt={enterprise_id:'',staffusers:[]}
  287. this.dialogFormVisible=false
  288. }else{
  289. this.$message.error(res.data.message);
  290. }
  291. })
  292. }
  293. },
  294. addStaff(){
  295. let parm=this.staff;
  296. parm.id=0;
  297. if(!parm.name){
  298. this.$message.error('请输入员工名称');
  299. return;
  300. }
  301. if(!parm.username){
  302. this.$message.error('请输入账号');
  303. return;
  304. }
  305. if(!parm.password){
  306. this.$message.error('请输入密码');
  307. return;
  308. }
  309. if(!parm.utype){
  310. this.$message.error('请选择账号类型');
  311. return;
  312. }
  313. this.dpt.staffusers.push(parm);
  314. this.staff={}
  315. this.dialogFormVisible1=false
  316. },
  317. viewStaff(data){
  318. this.dialogFormVisible2=true;
  319. this.staffList=data
  320. },
  321. handleClose(index){
  322. this.dpt.staffusers.splice(index,1);
  323. },
  324. edit(data){
  325. this.dialogFormVisible=true
  326. this.dpt={...data}
  327. }
  328. },
  329. created(){
  330. this.getData()
  331. }
  332. };
  333. </script>