Department.vue 13 KB

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