Grid.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  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. .grid_item {
  41. height: 60vh;
  42. border: 1px solid #ccc;
  43. text-align: center;
  44. .el-input--mini {
  45. width: 90%;
  46. margin-top: 10px;
  47. }
  48. .el-button--primary {
  49. width: 90%;
  50. margin-top: 20px;
  51. }
  52. }
  53. }
  54. }
  55. .staffs {
  56. margin-right: 10px;
  57. }
  58. // 企业端
  59. .qy_content{
  60. background:#151932;
  61. width:100%;
  62. height:85vh;
  63. margin-top:10px;
  64. .grid-item{
  65. padding:20px;
  66. color: #fff;
  67. }
  68. .intro{
  69. height: 85vh;
  70. overflow-y: scroll;
  71. line-height: 25px;
  72. }
  73. }
  74. </style>
  75. <template>
  76. <section>
  77. <p>公司管理 > 网格化管理</p>
  78. <!-- 管理员端 -->
  79. <div v-if="utype == 0">
  80. <div class="content">
  81. <ul class="staff">
  82. <li class="companies">
  83. <el-form size="small">
  84. <el-form-item>
  85. <el-input
  86. suffix-icon="el-icon-search"
  87. v-model="name"
  88. @change="getData"
  89. placeholder="公司名称"
  90. ></el-input>
  91. </el-form-item>
  92. </el-form>
  93. <el-tree
  94. :data="data"
  95. node-key="id"
  96. :props="props"
  97. :expand-on-click-node="false"
  98. >
  99. <span
  100. class="custom-tree-node"
  101. slot-scope="{ node, data }"
  102. @click="change(data)"
  103. >
  104. <span v-if="id == data.id" class="label_name active">{{
  105. node.label
  106. }}</span>
  107. <span v-else class="label_name">{{ node.label }}</span>
  108. </span>
  109. </el-tree>
  110. </li>
  111. <li class="staff_list">
  112. <el-form
  113. label-width="70px"
  114. :inline="true"
  115. size="small"
  116. label-position="left"
  117. >
  118. <el-form-item>
  119. <el-button
  120. icon="el-icon-plus"
  121. @click="(dialogFormVisible1 = true), (staff = {})"
  122. type="primary"
  123. size="mini"
  124. >安全生产网格化管理简介</el-button
  125. >
  126. </el-form-item>
  127. </el-form>
  128. <div>
  129. <el-row :gutter="20">
  130. <el-col :span="4">
  131. <div class="grid_item" v-for="item in gridList" :key="item">
  132. <div>
  133. <el-input
  134. v-model="item.name"
  135. placeholder="请输入"
  136. size="mini"
  137. >
  138. <el-button
  139. slot="append"
  140. icon="el-icon-edit"
  141. size="mini"
  142. @click="dialogFormVisible1 = true"
  143. ></el-button>
  144. </el-input>
  145. </div>
  146. <el-button type="primary" size="mini">添加</el-button>
  147. </div>
  148. </el-col>
  149. <el-col :span="4">
  150. <div class="grid_item">1111</div>
  151. </el-col>
  152. <el-col :span="4">
  153. <div class="grid_item">1111</div>
  154. </el-col>
  155. <el-col :span="4">
  156. <div class="grid_item">1111</div>
  157. </el-col>
  158. <el-col :span="4">
  159. <div class="grid_item">1111</div>
  160. </el-col>
  161. </el-row>
  162. </div>
  163. </li>
  164. </ul>
  165. </div>
  166. <el-dialog
  167. title="编辑"
  168. :visible.sync="dialogFormVisible1"
  169. width="800px"
  170. :close-on-click-modal="false"
  171. :close-on-press-escape="false"
  172. >
  173. <el-form size="small" label-width="120px">
  174. <el-row :gutter="10">
  175. <el-col :span="8">
  176. <el-form-item label="类型">
  177. <el-select clearable v-model="form1.utype" placeholder="请选择">
  178. <el-option label="部门级" value="部门级"></el-option>
  179. <el-option label="岗位级" value="岗位级"></el-option>
  180. </el-select>
  181. </el-form-item>
  182. </el-col>
  183. <el-col :span="8">
  184. <el-form-item label="负责人姓名">
  185. <el-input
  186. v-model="form1.charge_person_name"
  187. placeholder=""
  188. ></el-input>
  189. </el-form-item>
  190. </el-col>
  191. <el-col :span="8">
  192. <el-form-item label="负责人电话">
  193. <el-input
  194. v-model="form1.charge_person_phone"
  195. placeholder=""
  196. ></el-input>
  197. </el-form-item>
  198. </el-col>
  199. <el-col :span="8">
  200. <el-form-item label="负责人照片">
  201. <div class="upload_div">
  202. <i
  203. v-if="form.safecolor_img"
  204. @click="form.safecolor_img = ''"
  205. class="el-icon-delete"
  206. ></i>
  207. <i class="el-icon-upload"></i>
  208. <img
  209. v-if="form.safecolor_img"
  210. width="100%"
  211. height="100%"
  212. :src="form.safecolor_img"
  213. alt=""
  214. />
  215. <input
  216. accept="image/png,image/jpg"
  217. @change="upload('safecolor_img')"
  218. id="safecolor_img"
  219. type="file"
  220. />
  221. </div>
  222. </el-form-item>
  223. </el-col>
  224. <el-col :span="8">
  225. <el-form-item label="安全证书">
  226. <div class="upload_div">
  227. <i
  228. v-if="form.safecolor_img"
  229. @click="form.safecolor_img = ''"
  230. class="el-icon-delete"
  231. ></i>
  232. <i class="el-icon-upload"></i>
  233. <img
  234. v-if="form.safecolor_img"
  235. width="100%"
  236. height="100%"
  237. :src="form.safecolor_img"
  238. alt=""
  239. />
  240. <input
  241. accept="image/png,image/jpg"
  242. @change="upload('safecolor_img')"
  243. id="safecolor_img"
  244. type="file"
  245. />
  246. </div>
  247. </el-form-item>
  248. </el-col>
  249. </el-row>
  250. <el-form-item label="责任清单">
  251. <el-input
  252. type="textarea"
  253. v-model="form1.duty_list"
  254. placeholder=""
  255. rows="10"
  256. ></el-input>
  257. </el-form-item>
  258. <el-form-item label="履职清单">
  259. <el-input
  260. type="textarea"
  261. v-model="form1.job_list"
  262. placeholder=""
  263. rows="10"
  264. ></el-input>
  265. </el-form-item>
  266. </el-form>
  267. <div slot="footer" class="dialog-footer">
  268. <el-button size="small" @click="dialogFormVisible1 = false"
  269. >取 消</el-button
  270. >
  271. <el-button size="small" type="primary" @click="addStaff"
  272. >确 定</el-button
  273. >
  274. </div>
  275. </el-dialog>
  276. </div>
  277. <!-- 企业端 -->
  278. <div class="qy_content">
  279. <el-row :gutter="10">
  280. <el-col :span="12">
  281. <div class="grid-item intro">
  282. <h3 align="center">巴中市恩阳区子耀商贸有限公司</h3>
  283. <h4 align="center">安全生产网格化管理建设过程简介</h4>
  284. <div id="w-e-textarea-1" data-slate-editor="" data-slate-node="value" suppresscontenteditablewarning="" role="textarea" spellcheck="true" autocorrect="true" autocapitalize="true" contenteditable="true">
  285. <pre id="w-e-element-27" data-slate-node="element"><code id="w-e-element-28" data-slate-node="element"><span id="w-e-text-29" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">公司自成立以来,认真贯彻执行《安全生产法》、《关于印发四川省安全风险分级管控工作指南》的通知》(川办〔2017〕25号)、企业安全文化建设评价准则 AQT9005-2008等文件要求,一直秉承着“人民至上、生命至上”的安全生产方针,把安全生产当做头等大事来抓,在市、区政府和应急管理局领导的关心关照下,不断提高安全生产管理水平,从未发生过安全生产事故。公司在安全生产方面主要做了以下几个方面的工作:
  286. 一、安全生产行业规范管理</span></span></span></code></pre><p id="w-e-element-13" data-slate-node="element"><span id="w-e-text-14" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">公司按照行业安全生产规范要求,落实了安全生产主体责任,建立了全员安全生产责任制(安全生产清单制管理),通过全员全过程参与,全面管控经营活动各环节的安全生产工作,实现了安全管理系统化、岗位操作行为规范化等。</span></span></span></p><p id="w-e-element-15" data-slate-node="element"><span id="w-e-text-16" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">二、安全文化建设</span></span></span></p><p id="w-e-element-17" data-slate-node="element"><span id="w-e-text-18" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">公司通过安全文化建设,形成了富有公司特色的安全文化理念;通过开展安全文化进部门、进班组、进岗位创新安全文化建设模式;树立安全文化建设典型,使全员的安全知识、安全意识、安全能力、安全素质得到普遍提高;创建本质安全型部门、班组、员工;通过学习和借鉴各行业先进的安全管理思想和安全文化理论,结合公司安全管理实际,通过提炼总结,逐步形成安全文化的价值体系,做到内涵丰富、系统完善、个性鲜明,逐步形成上下齐心、知行合一的安全文化,推动企业安全、健康、和谐发展。</span></span></span></p><p id="w-e-element-19" data-slate-node="element"><span id="w-e-text-20" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">三、风险管控和隐患排查双重预防机制建设</span></span></span></p><p id="w-e-element-21" data-slate-node="element"><span id="w-e-text-22" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">公司以安全风险辨识和分级管控为基础,以隐患排查和治理为手段,把风险控制在隐患前面,并通过隐患排查,及时找出风险控制过程可能出现的缺失、缺陷、漏洞及风险控制失效环节,把隐患消灭在事故发生之前。通过安全风险管控和隐患排查双重预防机制建设,还建立健全了安全风险分级管控和隐患排查治理工作制度和规范,完善了技术工程支撑、智能化管控、第三方专业化服务的保障措施,实现企业安全风险自辨自控、隐患自查自治,全面提升了公司安全生产整体预控能力,防止重特大事故的发生。</span></span></span></p><p id="w-e-element-23" data-slate-node="element"><span id="w-e-text-24" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">为进一步落实公司的安全生产责任,构建长效的安全生产机制,形成公司各负其责、上下联动、齐抓共管的安全生产工作良好局面,在原有的规范管理基础上,进一步实行公司内部的安全生产网格化管理,更进一步明确网格单元内各责任人和责任区域在工作中的安全职责,做到定人、定岗、定责,确保安全管理工作无遗漏、全覆盖,达到安全隐患排查工作“横向到边、纵向到底”,安全隐患整治责任明确、落实到位的目的。</span></span></span></p><p id="w-e-element-25" data-slate-node="element"><span id="w-e-text-26" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true">安全生产网格化管理责任图</span></span></span></p><p id="w-e-element-3" data-slate-node="element" style="text-align: center;"><span id="w-e-text-4" data-slate-node="text"><span data-slate-leaf="true"><span data-slate-string="true" style="font-size: 10.5pt; font-family: Calibri, &quot;sans-serif&quot;;">
  287. 巴中市恩阳区子耀商贸有限公司
  288. 安全生产网格化管理建设过程简介
  289. 公司自成立以来,认真贯彻执行《安全生产法》、《关于印发四川省安全风险分级管控工作指南》的通知》(川办〔2017〕25号)、企业安全文化建设评价准则 AQT9005-2008等文件要求,一直秉承着“人民至上、生命至上”的安全生产方针,把安全生产当做头等大事来抓,在市、区政府和应急管理局领导的关心关照下,不断提高安全生产管理水平,从未发生过安全生产事故。公司在安全生产方面主要做了以下几个方面的工作:
  290. 一、安全生产行业规范管理
  291. 公司按照行业安全生产规范要求,落实了安全生产主体责任,建立了全员安全生产责任制(安全生产清单制管理),通过全员全过程参与,全面管控经营活动各环节的安全生产工作,实现了安全管理系统化、岗位操作行为规范化等。
  292. 二、安全文化建设
  293. 公司通过安全文化建设,形成了富有公司特色的安全文化理念;通过开展安全文化进部门、进班组、进岗位创新安全文化建设模式;树立安全文化建设典型,使全员的安全知识、安全意识、安全能力、安全素质得到普遍提高;创建本质安全型部门、班组、员工;通过学习和借鉴各行业先进的安全管理思想和安全文化理论,结合公司安全管理实际,通过提炼总结,逐步形成安全文化的价值体系,做到内涵丰富、系统完善、个性鲜明,逐步形成上下齐心、知行合一的安全文化,推动企业安全、健康、和谐发展。
  294. 三、风险管控和隐患排查双重预防机制建设
  295. 公司以安全风险辨识和分级管控为基础,以隐患排查和治理为手段,把风险控制在隐患前面,并通过隐患排查,及时找出风险控制过程可能出现的缺失、缺陷、漏洞及风险控制失效环节,把隐患消灭在事故发生之前。通过安全风险管控和隐患排查双重预防机制建设,还建立健全了安全风险分级管控和隐患排查治理工作制度和规范,完善了技术工程支撑、智能化管控、第三方专业化服务的保障措施,实现企业安全风险自辨自控、隐患自查自治,全面提升了公司安全生产整体预控能力,防止重特大事故的发生。
  296. 为进一步落实公司的安全生产责任,构建长效的安全生产机制,形成公司各负其责、上下联动、齐抓共管的安全生产工作良好局面,在原有的规范管理基础上,进一步实行公司内部的安全生产网格化管理,更进一步明确网格单元内各责任人和责任区域在工作中的安全职责,做到定人、定岗、定责,确保安全管理工作无遗漏、全覆盖,达到安全隐患排查工作“横向到边、纵向到底”,安全隐患整治责任明确、落实到位的目的。
  297. 安全生产网格化管理责任图
  298. </span></span></span></p></div>
  299. </div>
  300. </el-col>
  301. <el-col :span="12">
  302. <div class="grid-item grid_chart">
  303. <h3 align="center">安全生产网格化管理责任图</h3>
  304. <!-- <img src="../../images/grid.png" alt="" style="margin-top:50px;text-align:center;margin-left:50px;"> -->
  305. <vue2-org-tree :data="treeData" :horizontal="true"/>
  306. </div>
  307. </el-col>
  308. </el-row>
  309. </div>
  310. </section>
  311. </template>
  312. <script>
  313. import Page from "../../components/Page";
  314. export default {
  315. components: {
  316. Page,
  317. },
  318. data() {
  319. return {
  320. dialogFormVisible: false,
  321. dialogFormVisible1: false,
  322. dialogFormVisible2: false,
  323. data: [],
  324. form: { page: 1, page_size: 20 },
  325. list: [],
  326. total: 1,
  327. loading: false,
  328. props: {
  329. label: "name",
  330. },
  331. id: "",
  332. dpt: { enterprise_name: "", enterprise_id: "", staffusers: [] },
  333. enterprise_name: "",
  334. name: "",
  335. staff: {},
  336. dptList: [],
  337. form1: {},
  338. gridList: [
  339. {
  340. name: "公司负责人",
  341. id: 1,
  342. children: [
  343. {
  344. name: "安全科",
  345. id: 2,
  346. children: [
  347. {
  348. name: "仓库运行班",
  349. id: 3,
  350. children: [
  351. {
  352. name: "储存员",
  353. id: 4,
  354. children: [],
  355. },
  356. ],
  357. },
  358. ],
  359. },
  360. ],
  361. },
  362. ],
  363. utype: 2,
  364. treeData: {
  365. id: 0,
  366. label: "XXX科技有限公司",
  367. children: [
  368. {
  369. id: 2,
  370. label: "产品研发部",
  371. children: [
  372. {
  373. id: 5,
  374. label: "研发-前端"
  375. },
  376. {
  377. id: 6,
  378. label: "研发-后端"
  379. },
  380. {
  381. id: 9,
  382. label: "UI设计"
  383. },
  384. {
  385. id: 10,
  386. label: "产品经理"
  387. }
  388. ]
  389. },
  390. {
  391. id: 3,
  392. label: "销售部",
  393. children: [
  394. {
  395. id: 7,
  396. label: "销售一部"
  397. },
  398. {
  399. id: 8,
  400. label: "销售二部"
  401. }
  402. ]
  403. },
  404. {
  405. id: 4,
  406. label: "财务部"
  407. },
  408. {
  409. id: 9,
  410. label: "HR人事"
  411. }
  412. ]
  413. }
  414. };
  415. },
  416. methods: {
  417. gopage(size) {
  418. if (size) {
  419. this.form.page_size = size;
  420. }
  421. this.form.page = this.$refs.pageButton.page;
  422. this.getData();
  423. },
  424. change(data) {
  425. this.id = data.id;
  426. this.enterprise_name = data.name;
  427. this.getDpt();
  428. this.$api.getDepartmentList({ enterprise_id: data.id }).then((res) => {
  429. this.dptList = res.data.data.list;
  430. });
  431. },
  432. getData() {
  433. this.loading = true;
  434. this.$api.getEnterpriseList({ name: this.name }).then((res) => {
  435. this.data = res.data.data.list;
  436. // this.id=this.data[0].id;
  437. // this.enterprise_name=this.data[0].name;
  438. this.change(this.data[0]);
  439. });
  440. },
  441. //获取员工列表
  442. getDpt() {
  443. var parm = this.form;
  444. parm.enterprise_id = this.id;
  445. this.$api.getStaffuserList(parm).then((res) => {
  446. this.loading = false;
  447. this.list = res.data.data.list;
  448. this.total = res.data.data.total;
  449. });
  450. },
  451. del(id) {
  452. this.$confirm("确定删除吗", "提示", {
  453. type: "warning",
  454. }).then(() => {
  455. this.$api.deleteStaffuser({ id: id }).then((res) => {
  456. this.$message({
  457. message: "删除成功",
  458. type: "success",
  459. });
  460. this.getDpt();
  461. });
  462. });
  463. },
  464. addStaff() {
  465. let parm = this.staff;
  466. if (!parm.name) {
  467. this.$message.error("请输入员工名称");
  468. return;
  469. }
  470. if (!parm.username) {
  471. this.$message.error("请输入账号");
  472. return;
  473. }
  474. if (!parm.password) {
  475. this.$message.error("请输入密码");
  476. return;
  477. }
  478. if (!parm.utype) {
  479. this.$message.error("请选择账号类型");
  480. return;
  481. }
  482. if (parm.utype != "公司级" && !parm.department_id) {
  483. this.$message.error("请选择部门");
  484. return;
  485. }
  486. if (parm.id) {
  487. this.$api.updateStaffuser(parm).then((res) => {
  488. if (res.data.code == 0) {
  489. this.getDpt();
  490. this.staff = {};
  491. this.$message({
  492. message: "修改成功",
  493. type: "success",
  494. });
  495. this.dialogFormVisible1 = false;
  496. } else {
  497. this.$message.error(res.data.message);
  498. }
  499. });
  500. } else {
  501. parm.id = 0;
  502. parm.enterprise_id = this.id;
  503. this.$api.saveStaffuser(parm).then((res) => {
  504. if (res.data.code == 0) {
  505. this.getDpt();
  506. this.staff = {};
  507. this.$message({
  508. message: "新增成功",
  509. type: "success",
  510. });
  511. this.dialogFormVisible1 = false;
  512. } else {
  513. this.$message.error(res.data.message);
  514. }
  515. });
  516. }
  517. },
  518. handleClose(index) {
  519. this.dpt.staffusers.splice(index, 1);
  520. },
  521. edit(data) {
  522. this.dialogFormVisible1 = true;
  523. this.staff = { ...data };
  524. },
  525. },
  526. created() {
  527. this.getData();
  528. },
  529. };
  530. </script>