school.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. <template>
  2. <section class="content">
  3. <div
  4. class="box-body"
  5. v-loading.fullscreen="loading"
  6. element-loading-text="请稍后..."
  7. >
  8. <!-- 表单 -->
  9. <el-form :inline="true" :model="formSearch">
  10. <el-form-item label="学校名称">
  11. <el-input placeholder="请输入学校名称" v-model="formSearch.name" />
  12. </el-form-item>
  13. <el-form-item label="学校代码">
  14. <el-input placeholder="请输入学校代码" v-model="formSearch.code" />
  15. </el-form-item>
  16. <el-form-item label="学校域名">
  17. <el-input
  18. placeholder="请输入学校域名"
  19. v-model="formSearch.domainName"
  20. />
  21. </el-form-item>
  22. <el-form-item>
  23. <el-button
  24. size="small"
  25. type="primary"
  26. icon="el-icon-search"
  27. @click="handleSearchBtn"
  28. >查询</el-button
  29. >
  30. <el-button
  31. size="small"
  32. icon="el-icon-refresh"
  33. @click="resetSearchForm"
  34. >重置</el-button
  35. >
  36. <el-button
  37. size="small"
  38. type="primary"
  39. icon="el-icon-plus"
  40. @click="insert"
  41. >新增</el-button
  42. >
  43. </el-form-item>
  44. </el-form>
  45. <div class="block-seperator"></div>
  46. <span>操作:</span>
  47. <el-button
  48. size="small"
  49. type="success"
  50. :disabled="noBatchSelected"
  51. @click="enableOrg"
  52. icon="el-icon-check"
  53. >启用</el-button
  54. >
  55. <el-button
  56. size="small"
  57. type="danger"
  58. :disabled="noBatchSelected"
  59. @click="disableOrg"
  60. icon="el-icon-close"
  61. >禁用</el-button
  62. >
  63. <div style="width: 100%;margin-bottom: 10px;"></div>
  64. <!-- 添加或修改学校弹出框 -->
  65. <el-dialog
  66. title="学校信息"
  67. width="500px"
  68. :visible.sync="schoolDialog"
  69. @close="dialogBeforeClose"
  70. >
  71. <el-form
  72. :inline="true"
  73. inline-message
  74. :model="schoolForm"
  75. ref="schoolForm"
  76. :rules="rules"
  77. label-position="right"
  78. label-width="90px"
  79. class="editSchoolForm"
  80. >
  81. <el-row>
  82. <el-form-item label="学校代码" label-width="120px" prop="code">
  83. <el-input
  84. class="pull_length"
  85. v-model="schoolForm.code"
  86. auto-complete="off"
  87. placeholder="学校域名"
  88. :disabled="null != schoolForm.id"
  89. />
  90. </el-form-item>
  91. </el-row>
  92. <el-row>
  93. <el-form-item label="学校名称" label-width="120px" prop="name">
  94. <el-input
  95. class="pull_length"
  96. v-model="schoolForm.name"
  97. auto-complete="off"
  98. placeholder="学校名称"
  99. />
  100. </el-form-item>
  101. </el-row>
  102. <el-row>
  103. <el-form-item
  104. label="学校域名"
  105. label-width="120px"
  106. prop="domainName"
  107. >
  108. <el-input
  109. class="pull_length"
  110. v-model="schoolForm.domainName"
  111. auto-complete="off"
  112. placeholder="学校域名"
  113. />
  114. </el-form-item>
  115. </el-row>
  116. <el-row>
  117. <el-form-item label="负责人" label-width="120px" prop="contacts">
  118. <el-input
  119. class="pull_length"
  120. v-model="schoolForm.contacts"
  121. auto-complete="off"
  122. placeholder="负责人"
  123. />
  124. </el-form-item>
  125. </el-row>
  126. <el-row>
  127. <el-form-item label="联系方式" label-width="120px" prop="telephone">
  128. <el-input
  129. class="pull_length"
  130. v-model="schoolForm.telephone"
  131. auto-complete="off"
  132. placeholder="联系方式"
  133. />
  134. </el-form-item>
  135. </el-row>
  136. <el-row>
  137. <el-form-item label="状态" label-width="120px" prop="enable">
  138. <el-radio-group class="pull_right_sm" v-model="schoolForm.enable">
  139. <el-radio label="true">启用</el-radio>
  140. <el-radio label="false">禁用</el-radio>
  141. </el-radio-group>
  142. </el-form-item>
  143. </el-row>
  144. <el-row class="d-flex justify-content-center">
  145. <el-button type="primary" @click="submitForm">保 存</el-button>
  146. <el-button @click="schoolDialog = false">取 消</el-button>
  147. </el-row>
  148. </el-form>
  149. </el-dialog>
  150. <!-- 页面列表 -->
  151. <el-table
  152. :data="tableData"
  153. border
  154. resizable
  155. stripe
  156. @selection-change="selectChange"
  157. >
  158. <el-table-column type="selection" width="40" />
  159. <el-table-column prop="id" label="ID" width="60" />
  160. <el-table-column label="学校名称">
  161. <template slot-scope="scope">
  162. <el-popover trigger="hover" placement="left">
  163. <div style="font-size: 18px;font-family: 新宋体">
  164. <tr>
  165. <td style="color: green">学校名称</td>
  166. <td style="color:purple;padding-left: 20px;">
  167. {{ scope.row.name }}
  168. </td>
  169. </tr>
  170. <tr>
  171. <td style="color: green">学校代码</td>
  172. <td style="color:purple;padding-left: 20px;">
  173. {{ scope.row.code }}
  174. </td>
  175. </tr>
  176. <tr>
  177. <td style="color: green">负责人</td>
  178. <td style="color:purple;padding-left: 20px;">
  179. {{ scope.row.contacts }}
  180. </td>
  181. </tr>
  182. <tr>
  183. <td style="color: green">联系方式</td>
  184. <td style="color:purple;padding-left: 20px;">
  185. {{ scope.row.telephone }}
  186. </td>
  187. </tr>
  188. </div>
  189. <div slot="reference" class="name-wrapper">
  190. <span>{{ scope.row.name }}</span>
  191. </div>
  192. </el-popover>
  193. </template>
  194. </el-table-column>
  195. <el-table-column prop="code" width="190" label="学校代码" />
  196. <el-table-column prop="domainName" width="190" label="学校域名" />
  197. <el-table-column
  198. sortable
  199. prop="updateTime"
  200. width="170"
  201. label="更新时间"
  202. />
  203. <el-table-column width="50" label="状态">
  204. <span slot-scope="scope">
  205. <span v-if="scope.row.enable">
  206. <el-tooltip
  207. class="item"
  208. effect="dark"
  209. content="启用"
  210. placement="left"
  211. >
  212. <i class="el-icon-success" style="color:green;"></i>
  213. </el-tooltip>
  214. </span>
  215. <span v-else>
  216. <el-tooltip
  217. class="item"
  218. effect="dark"
  219. content="禁用"
  220. placement="left"
  221. >
  222. <i class="el-icon-error" style="color:red;"></i>
  223. </el-tooltip>
  224. </span>
  225. </span>
  226. </el-table-column>
  227. <el-table-column :context="_self" width="210" prop label="操作">
  228. <div slot-scope="scope">
  229. <el-button
  230. size="mini"
  231. type="primary"
  232. plain
  233. @click="edit(scope.row)"
  234. >
  235. <i class="el-icon-edit"></i> 编辑
  236. </el-button>
  237. </div>
  238. </el-table-column>
  239. </el-table>
  240. <div class="page pull-right">
  241. <el-pagination
  242. @current-change="handleCurrentChange"
  243. :current-page="currentPage"
  244. :page-size="pageSize"
  245. :page-sizes="[10, 20, 50, 100, 200, 300]"
  246. @size-change="handleSizeChange"
  247. layout="total, sizes, prev, pager, next, jumper"
  248. :total="total"
  249. />
  250. </div>
  251. </div>
  252. </section>
  253. </template>
  254. <script>
  255. import { CORE_API } from "@/constants/constants.js";
  256. import { mapState } from "vuex";
  257. export default {
  258. name: "School",
  259. data() {
  260. return {
  261. formSearch: {
  262. code: "",
  263. name: "",
  264. domainName: ""
  265. },
  266. schoolForm: {
  267. id: null,
  268. name: "",
  269. code: "",
  270. domainName: "",
  271. contacts: "",
  272. telephone: "",
  273. enable: "true",
  274. remark: ""
  275. },
  276. schoolDialog: false,
  277. logoDialog: false,
  278. curSchool: {
  279. name: null,
  280. code: null
  281. },
  282. uploadAction: "",
  283. uploadHeaders: {},
  284. uploadData: {},
  285. fileList: [],
  286. selectedOrgIds: [],
  287. loading: true,
  288. tableData: [],
  289. currentPage: 1,
  290. pageSize: 10,
  291. total: 10,
  292. imp: "",
  293. rules: {
  294. code: [{ required: true, message: "请输入学校代码", trigger: "blur" }],
  295. domainName: [
  296. { required: true, message: "请输入学校域名", trigger: "blur" }
  297. ],
  298. name: [{ required: true, message: "请输入学校名称", trigger: "blur" }],
  299. contacts: [
  300. { required: true, message: "请输入负责人", trigger: "blur" }
  301. ],
  302. telephone: [
  303. { required: true, message: "请输入联系方式", trigger: "blur" }
  304. ],
  305. enable: [{ required: true, message: "请选择状态", trigger: "change" }]
  306. }
  307. };
  308. },
  309. computed: {
  310. ...mapState({ user: state => state.user }),
  311. noBatchSelected() {
  312. return this.selectedOrgIds.length === 0;
  313. },
  314. orgIds() {
  315. var orgIds = "";
  316. for (let orgId of this.selectedOrgIds) {
  317. if (!orgIds) {
  318. orgIds += orgId;
  319. } else {
  320. orgIds += "," + orgId;
  321. }
  322. }
  323. return orgIds;
  324. }
  325. },
  326. methods: {
  327. resetSearchForm() {
  328. this.formSearch.code = "";
  329. this.formSearch.name = "";
  330. this.formSearch.domainName = "";
  331. },
  332. dialogBeforeClose() {
  333. this.$refs.schoolForm.clearValidate();
  334. },
  335. handleSizeChange(val) {
  336. this.pageSize = val;
  337. this.currentPage = 1;
  338. this.searchForm();
  339. },
  340. getTag(status) {
  341. if (status == true) {
  342. return "success";
  343. } else if (status == false) {
  344. return "danger";
  345. }
  346. return status;
  347. },
  348. handleCurrentChange(val) {
  349. this.currentPage = val;
  350. this.searchForm();
  351. },
  352. handleSearchBtn() {
  353. this.currentPage = 1;
  354. this.searchForm();
  355. },
  356. //查询
  357. searchForm() {
  358. let searchLock = true;
  359. setTimeout(() => {
  360. if (searchLock) {
  361. this.loading = true;
  362. }
  363. }, 500);
  364. var param = new URLSearchParams(this.formSearch);
  365. var url =
  366. CORE_API +
  367. "/org/rootOrgPage/" +
  368. (this.currentPage - 1) +
  369. "/" +
  370. this.pageSize +
  371. "?" +
  372. param;
  373. this.$httpWithMsg
  374. .get(url)
  375. .then(response => {
  376. this.tableData = response.data.list;
  377. this.total = response.data.total;
  378. this.loading = false;
  379. })
  380. .finally(() => {
  381. searchLock = false;
  382. this.loading = false;
  383. });
  384. },
  385. //启用
  386. enableOrg() {
  387. if (this.selectedOrgIds.length === 0) {
  388. this.$notify({
  389. type: "warning",
  390. message: "请选择要启用的机构"
  391. });
  392. } else {
  393. this.$confirm("是否启用这些机构?", "提示", {
  394. confirmButtonText: "确定",
  395. cancelButtonText: "取消",
  396. type: "warning"
  397. }).then(() => {
  398. var url = CORE_API + "/org/enable/" + this.orgIds;
  399. this.$httpWithMsg.put(url).then(() => {
  400. this.$notify({
  401. type: "success",
  402. message: "启用成功!"
  403. });
  404. this.searchForm();
  405. });
  406. });
  407. }
  408. },
  409. disableOrg() {
  410. if (this.selectedOrgIds.length === 0) {
  411. this.$notify({
  412. type: "warning",
  413. message: "请选择要禁用的机构"
  414. });
  415. } else {
  416. this.$confirm("是否禁用这些机构?", "提示", {
  417. confirmButtonText: "确定",
  418. cancelButtonText: "取消",
  419. type: "warning"
  420. }).then(() => {
  421. var url = CORE_API + "/org/disable/" + this.orgIds;
  422. this.$$httpWithMsg.put(url, {}).then(() => {
  423. this.$notify({
  424. type: "success",
  425. message: "禁用成功!"
  426. });
  427. this.searchForm();
  428. });
  429. });
  430. }
  431. },
  432. selectChange(row) {
  433. this.selectedOrgIds = [];
  434. row.forEach(element => {
  435. this.selectedOrgIds.push(element.id);
  436. });
  437. console.log(this.selectedOrgIds);
  438. },
  439. //重置
  440. resetForm() {
  441. this.$refs.schoolForm.resetFields();
  442. },
  443. //提交
  444. submitForm() {
  445. this.$refs.schoolForm.validate(valid => {
  446. if (valid) {
  447. if (null != this.schoolForm.id) {
  448. //修改
  449. url = CORE_API + "/org/updateRootOrg";
  450. this.$httpWithMsg.put(url, this.schoolForm).then(() => {
  451. this.$notify({
  452. type: "success",
  453. message: "修改成功!"
  454. });
  455. this.searchForm();
  456. this.schoolDialog = false;
  457. });
  458. } else {
  459. //新增
  460. var url = CORE_API + "/org/addRootOrg";
  461. this.$httpWithMsg.post(url, this.schoolForm).then(() => {
  462. this.$notify({
  463. type: "success",
  464. message: "新增成功!"
  465. });
  466. this.searchForm();
  467. this.schoolDialog = false;
  468. });
  469. }
  470. } else {
  471. console.log("error submit!");
  472. return false;
  473. }
  474. });
  475. },
  476. //新增
  477. insert() {
  478. this.schoolForm.id = null;
  479. this.schoolForm.name = "";
  480. this.schoolForm.code = "";
  481. this.schoolForm.domainName = "";
  482. this.schoolForm.telephone = "";
  483. this.schoolForm.contacts = "";
  484. this.schoolForm.enable = "true";
  485. this.schoolDialog = true;
  486. },
  487. //修改
  488. edit(row) {
  489. this.schoolForm.id = row.id;
  490. this.schoolForm.name = row.name;
  491. this.schoolForm.code = row.code;
  492. this.schoolForm.domainName = row.domainName;
  493. this.schoolForm.telephone = row.telephone;
  494. this.schoolForm.contacts = row.contacts;
  495. this.schoolForm.enable = row.enable ? "true" : "false";
  496. this.schoolDialog = true;
  497. }
  498. },
  499. //初始化查询
  500. created() {
  501. this.searchForm();
  502. this.uploadHeaders = {
  503. key: this.user.key,
  504. token: this.user.token
  505. };
  506. }
  507. };
  508. </script>
  509. <style scoped>
  510. .page {
  511. margin-top: 10px;
  512. }
  513. .el-upload {
  514. width: 80px;
  515. }
  516. .editSchoolForm .pull_length {
  517. width: 200px;
  518. }
  519. </style>