Department.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  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" width="100"
  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.id)" 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-option label="岗位级" value="岗位级"></el-option>
  150. </el-select>
  151. </el-form-item>
  152. </el-form>
  153. <div slot="footer" class="dialog-footer">
  154. <el-button size="small" @click="dialogFormVisible1 = false">取 消</el-button>
  155. <el-button size="small" type="primary" @click="addStaff">确 定</el-button>
  156. </div>
  157. </el-dialog>
  158. <el-dialog title="员工列表" :visible.sync="dialogFormVisible2" :close-on-click-modal='false' :close-on-press-escape='false'>
  159. <el-table
  160. class="table"
  161. :data="staffList" height="300px"
  162. border
  163. style="width: 100%">
  164. <el-table-column
  165. prop="name"
  166. label="姓名">
  167. </el-table-column>
  168. <el-table-column
  169. prop="phone"
  170. label="电话">
  171. </el-table-column>
  172. <el-table-column
  173. prop="username"
  174. label="账号">
  175. </el-table-column>
  176. <el-table-column
  177. prop="utype"
  178. label="账号类型">
  179. </el-table-column>
  180. <el-table-column width="150"
  181. label="操作">
  182. <template slot-scope="scope">
  183. <el-button icon="el-icon-edit" @click="editStaff(scope.row)" size="mini" type="warning">编辑</el-button>
  184. <el-button icon="el-icon-delete" @click="delStaff(scope.row.id,scope.$index)" size="mini" type="danger">删除</el-button>
  185. </template>
  186. </el-table-column>
  187. </el-table>
  188. <!-- <div slot="footer" class="dialog-footer">
  189. <el-button size="small" @click="dialogFormVisible1 = false">取 消</el-button>
  190. <el-button size="small" type="primary" @click="addStaff">确 定</el-button>
  191. </div> -->
  192. </el-dialog>
  193. </section>
  194. </template>
  195. <script>
  196. import Page from '../../components/Page';
  197. export default {
  198. components:{
  199. Page
  200. },
  201. data() {
  202. return {
  203. dialogFormVisible:false,
  204. dialogFormVisible1:false,
  205. dialogFormVisible2:false,
  206. data:[],
  207. form:{page:1,page_size:20},
  208. list:[],
  209. total:1,
  210. loading:false,
  211. props:{
  212. label:'name'
  213. },
  214. id:'',
  215. dpt:{enterprise_name:'',enterprise_id:'',staffusers:[]},
  216. enterprise_name:'',
  217. name:'',
  218. staff:{},
  219. staffList:[]
  220. };
  221. },
  222. methods: {
  223. gopage(size){
  224. if(size){
  225. this.form.page_size=size
  226. }
  227. this.form.page=this.$refs.pageButton.page
  228. this.getData()
  229. },
  230. change(data){
  231. this.id=data.id;
  232. this.enterprise_name=data.name;
  233. this.getDpt();
  234. },
  235. getData(){
  236. this.loading=true
  237. this.$api.getEnterpriseList({name:this.name}).then(res=>{
  238. this.data=res.data.data.list;
  239. this.id=this.data[0].id;
  240. this.enterprise_name=this.data[0].name;
  241. this.getDpt()
  242. })
  243. },
  244. getDpt(){
  245. var parm=this.form;
  246. parm.enterprise_id=this.id
  247. this.$api.getDepartmentList(parm).then(res=>{
  248. this.loading=false;
  249. this.list=res.data.data.list;
  250. this.total=res.data.data.total
  251. })
  252. },
  253. del(id){
  254. this.$confirm('确定删除吗', '提示', {
  255. type: 'warning'
  256. }).then(() => {
  257. this.$api.deleteDepartment({id:id}).then((res)=>{
  258. this.$message({
  259. message: '删除成功',
  260. type: 'success'
  261. })
  262. this.getDpt()
  263. })
  264. })
  265. },
  266. delStaff(id,index){
  267. this.$confirm('确定删除吗', '提示', {
  268. type: 'warning'
  269. }).then(() => {
  270. this.$api.deleteStaffuser({id:id}).then((res)=>{
  271. this.$message({
  272. message: '删除成功',
  273. type: 'success'
  274. })
  275. this.staffList.splice(index,1)
  276. this.getDpt()
  277. })
  278. })
  279. },
  280. add(){
  281. let parm=this.dpt;
  282. if(!parm.name){
  283. this.$message.error('请输入部门名称');
  284. return;
  285. }
  286. if(parm.staffusers.length<1){
  287. this.$message.error('请添加员工');
  288. return;
  289. }
  290. if(parm.id){
  291. this.$api.updateDepartment(parm).then(res=>{
  292. if(res.data.code==0){
  293. this.$message({message: '修改成功!',type: 'success'});
  294. this.getDpt()
  295. this.dpt={enterprise_id:'',staffusers:[]}
  296. this.dialogFormVisible=false
  297. }else{
  298. this.$message.error(res.data.message);
  299. }
  300. })
  301. }else{
  302. parm.enterprise_id=this.id
  303. parm.enterprise_name=this.enterprise_name
  304. this.$api.saveDepartment(parm).then(res=>{
  305. if(res.data.code==0){
  306. this.$message({message: '添加成功!',type: 'success'});
  307. this.getDpt()
  308. this.dpt={enterprise_id:'',staffusers:[]}
  309. this.dialogFormVisible=false
  310. }else{
  311. this.$message.error(res.data.message);
  312. }
  313. })
  314. }
  315. },
  316. addStaff(){
  317. let parm=this.staff;
  318. if(!parm.name){
  319. this.$message.error('请输入员工名称');
  320. return;
  321. }
  322. if(!parm.username){
  323. this.$message.error('请输入账号');
  324. return;
  325. }
  326. if(!parm.password){
  327. this.$message.error('请输入密码');
  328. return;
  329. }
  330. if(!parm.utype){
  331. this.$message.error('请选择账号类型');
  332. return;
  333. }
  334. if(parm.id){
  335. this.$api.updateStaffuser(parm).then(res=>{
  336. if(res.data.code==0){
  337. // this.getDpt()
  338. this.viewStaff(parm.department_id)
  339. this.staff={}
  340. this.dialogFormVisible1=false
  341. }else{
  342. this.$message.error(res.data.message);
  343. }
  344. })
  345. }else{
  346. parm.id=0;
  347. this.dpt.staffusers.push(parm);
  348. this.staff={}
  349. this.dialogFormVisible1=false
  350. }
  351. },
  352. viewStaff(id){
  353. this.$api.getStaffuserList({department_id:id}).then(res=>{
  354. this.staffList=res.data.data.list
  355. this.dialogFormVisible2=true;
  356. })
  357. },
  358. handleClose(index){
  359. this.dpt.staffusers.splice(index,1);
  360. },
  361. edit(data){
  362. this.dialogFormVisible=true
  363. this.dpt={...data}
  364. },
  365. editStaff(data){
  366. this.dialogFormVisible1=true
  367. this.staff={...data}
  368. },
  369. },
  370. created(){
  371. this.getData()
  372. }
  373. };
  374. </script>