schoolList.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  1. <template>
  2. <div class="list_container">
  3. <div class="title_examine">
  4. <div class="pub_title">学校列表</div>
  5. <div style="margin-left: auto">
  6. <el-input v-model="checkOid" placeholder="请输入学校" size="normal" clearable @input="changeOid"
  7. style="margin-right: 10px; width: 200px"></el-input>
  8. <el-input v-model="checkOrg" placeholder="请输入组织" size="normal" clearable @input="changeOrg"
  9. style="margin-right: 10px; width: 200px"></el-input>
  10. <el-select v-model="checkArea" placeholder="选择区域" clearable filterable @change="changeArea"
  11. style="margin-right: 10px">
  12. <el-option v-for="item in regionCList" :key="item.id" :label="item.name" :value="item.name">
  13. </el-option>
  14. </el-select>
  15. <el-button type="primary" size="small" @click="add_school_dialog = true">新增学校</el-button>
  16. </div>
  17. </div>
  18. <div class="tableBox">
  19. <el-table :data="schoolData" stripe border style="width: 100%" :header-cell-style="headerCellStyle">
  20. <el-table-column show-overflow-tooltip prop="name" label="学校名称" min-width="45"></el-table-column>
  21. <el-table-column show-overflow-tooltip prop="org_name" label="组织" min-width="45">
  22. <template slot-scope="scope">
  23. {{ scope.row.org_name || "-" }}
  24. <!-- 如果 org 为空,显示 '-' -->
  25. </template>
  26. </el-table-column>
  27. <el-table-column show-overflow-tooltip prop="org_code" label="组织编码" min-width="45">
  28. <template slot-scope="scope">
  29. {{ scope.row.org_code || "-" }}
  30. <!-- 如果 org 为空,显示 '-' -->
  31. </template>
  32. </el-table-column>
  33. <el-table-column show-overflow-tooltip prop="code" label="编码" min-width="45">
  34. <template slot-scope="scope">
  35. {{ scope.row.code || "-" }}
  36. <!-- 如果 org 为空,显示 '-' -->
  37. </template>
  38. </el-table-column>
  39. <el-table-column show-overflow-tooltip prop="code" label="随机码" min-width="45">
  40. <template slot-scope="scope">
  41. {{ scope.row.code2 || "-" }}
  42. <!-- 如果 org 为空,显示 '-' -->
  43. </template>
  44. </el-table-column>
  45. <el-table-column show-overflow-tooltip prop="detail" label="描述" min-width="45">
  46. <template slot-scope="scope">
  47. {{ scope.row.detail || '-' }} <!-- 如果 org 为空,显示 '-' -->
  48. </template>
  49. </el-table-column>
  50. <el-table-column show-overflow-tooltip prop="area" label="区域" min-width="45"></el-table-column>
  51. <el-table-column show-overflow-tooltip prop="ctime" label="创建时间" min-width="45"></el-table-column>
  52. <el-table-column label="是否禁用/使用期限" min-width="45">
  53. <template #default="scope">
  54. <span v-if="scope.row.isLogin === '1' || scope.row.isLogin === 'null' || scope.row.isLogin === ''">启用</span>
  55. <span v-else-if="scope.row.isLogin === '2'">禁用</span>
  56. <span v-else>{{ scope.row.isLogin }}</span>
  57. </template>
  58. </el-table-column>
  59. <el-table-column label="操作" width="300px">
  60. <template slot-scope="scope">
  61. <div class="operate">
  62. <button @click="update(scope.row)">编辑</button>
  63. <button @click="enable(scope.row,'enable')">
  64. {{ scope.row.isLogin === '2' ? '启用' : '禁用' }}
  65. </button>
  66. <button v-if="scope.row.isLogin !== '2'"
  67. @click="open_enable_school(scope.row, 'useDate')">/&nbsp;使用期限</button>
  68. <button @click="toPage(scope.row)">批量创建</button>
  69. <button @click="permissionSetting(scope.row)"
  70. v-show="!unShowJurUser.includes(userid)">权限设置</button>
  71. <button @click="delete_school(scope.row)" style="color: red">
  72. 删除
  73. </button>
  74. </div>
  75. </template>
  76. </el-table-column>
  77. </el-table>
  78. </div>
  79. <!-- 分页组件 -->
  80. <el-pagination :current-page="currentPage" :page-size="pageSize" :total="total"
  81. @current-change="handlePageChange" layout="total,prev, pager, next, jumper">
  82. </el-pagination>
  83. <!-- 新增学校弹窗 -->
  84. <el-dialog title="新增学校" class="table" :visible.sync="add_school_dialog" :before-close="close_add_school"
  85. width="700px">
  86. <div class="el_dialog_school_content">
  87. <form class="el-form">
  88. <!-- 学校名称 -->
  89. <div class="el-form-item" style="margin-top: 15px">
  90. <label class="el-form-item__label" style="width: 100px">学校名称</label>
  91. <div class="el-form-item__content" style="margin-left: 5px">
  92. <span>
  93. <div class="add_input el-input el-input--suffix">
  94. <input v-model="sch_name" type="text" autocomplete="off" placeholder="学校名称"
  95. class="el-input__inner" />
  96. </div>
  97. </span>
  98. </div>
  99. </div>
  100. <!-- 地区 -->
  101. <div class="el-form-item">
  102. <label class="el-form-item__label" style="width: 100px">地区</label>
  103. <div class="el-form-item__content" style="margin-left: 5px">
  104. <span>
  105. <div class="add_input el-input el-input--suffix">
  106. <input v-model="region" type="text" autocomplete="off" placeholder="请输入地区"
  107. class="el-input__inner" />
  108. </div>
  109. </span>
  110. </div>
  111. </div>
  112. <!-- 学校编码 -->
  113. <div class="el-form-item">
  114. <label class="el-form-item__label" style="width: 100px">学校编码</label>
  115. <div class="el-form-item__content" style="margin-left: 5px">
  116. <span>
  117. <div class="add_input el-input el-input--suffix">
  118. <input v-model="schoolCode" type="text" autocomplete="off" placeholder="请输入编码"
  119. class="el-input__inner" />
  120. </div>
  121. </span>
  122. </div>
  123. </div>
  124. <!-- 学校随机码 -->
  125. <div class="el-form-item">
  126. <label class="el-form-item__label" style="width: 100px">随机码</label>
  127. <div class="el-form-item__content" style="margin-left: 5px">
  128. <span>
  129. <div class="add_input el-input el-input--suffix">
  130. <input v-model="schoolCode2" type="text" autocomplete="off" placeholder="请输入随机码"
  131. class="el-input__inner" />
  132. </div>
  133. </span>
  134. </div>
  135. </div>
  136. <div class="el-form-item">
  137. <label class="el-form-item__label" style="width: 100px">上级组织</label>
  138. <div class="el-form-item__content" style="margin-left: 5px">
  139. <span>
  140. <div class="add_input el-input el-input--suffix">
  141. <el-form :model="school" ref="form">
  142. <el-select v-model="school.parentOrgId" placeholder="请选择组织"
  143. class="custom-select" filterable>
  144. <el-option v-for="(org, index) in organizations" :key="index"
  145. :label="org.name" :value="org.id">
  146. {{ org.name }}
  147. </el-option>
  148. </el-select>
  149. </el-form>
  150. </div>
  151. </span>
  152. </div>
  153. </div>
  154. <!-- 描述 -->
  155. <div class="el-form-item">
  156. <label class="el-form-item__label" style="width: 100px">描述</label>
  157. <div class="el-form-item__content" style="margin-left: 5px">
  158. <span>
  159. <div class="add_input el-input el-input--suffix">
  160. <input v-model="schoolDetail" type="text" autocomplete="off" placeholder="请输入描述"
  161. class="el-input__inner" />
  162. </div>
  163. </span>
  164. </div>
  165. </div>
  166. <!-- 区域 -->
  167. <div class="el-form-item">
  168. <label class="el-form-item__label" style="width: 100px">区域</label>
  169. <div class="el-form-item__content" style="margin-left: 5px">
  170. <span>
  171. <div class="add_input el-input el-input--suffix">
  172. <el-select v-model="regionC" placeholder="请选择区域" class="custom-select" filterable>
  173. <el-option v-for="(org, index) in regionCList" :key="index" :label="org.name"
  174. :value="org.name">
  175. {{ org.name }}
  176. </el-option>
  177. </el-select>
  178. </div>
  179. </span>
  180. </div>
  181. </div>
  182. </form>
  183. </div>
  184. <!-- 按钮区域 -->
  185. <div slot="footer" class="el-dialog__footer">
  186. <el-button @click="close_add_school">取 消</el-button>
  187. <el-button type="primary" @click="ajax_add_school">确认</el-button>
  188. </div>
  189. </el-dialog>
  190. <!-- 修改学校弹窗 -->
  191. <el-dialog title="修改学校" class="table" :visible.sync="add_school_dialog2" :before-close="close_add_school2"
  192. width="700px">
  193. <div class="el_dialog_school_content">
  194. <form class="el-form">
  195. <!-- 学校名称 -->
  196. <div class="el-form-item" style="margin-top: 15px">
  197. <label class="el-form-item__label" style="width: 100px">学校名称</label>
  198. <div class="el-form-item__content" style="margin-left: 5px">
  199. <span>
  200. <div class="add_input el-input el-input--suffix">
  201. <input v-model="sch_name" type="text" autocomplete="off" placeholder="学校名称"
  202. class="el-input__inner" />
  203. </div>
  204. </span>
  205. </div>
  206. </div>
  207. <!-- 地区 -->
  208. <div class="el-form-item">
  209. <label class="el-form-item__label" style="width: 100px">地区</label>
  210. <div class="el-form-item__content" style="margin-left: 5px">
  211. <span>
  212. <div class="add_input el-input el-input--suffix">
  213. <input v-model="region" type="text" autocomplete="off" placeholder="请输入地区"
  214. class="el-input__inner" />
  215. </div>
  216. </span>
  217. </div>
  218. </div>
  219. <!-- 学校编码 -->
  220. <div class="el-form-item">
  221. <label class="el-form-item__label" style="width: 100px">学校编码</label>
  222. <div class="el-form-item__content" style="margin-left: 5px">
  223. <span>
  224. <div class="add_input el-input el-input--suffix">
  225. <input v-model="schoolCode" type="text" autocomplete="off" placeholder="请输入编码"
  226. class="el-input__inner" />
  227. </div>
  228. </span>
  229. </div>
  230. </div>
  231. <!-- 学校随机码 -->
  232. <div class="el-form-item">
  233. <label class="el-form-item__label" style="width: 100px">学校随机码</label>
  234. <div class="el-form-item__content" style="margin-left: 5px">
  235. <span>
  236. <div class="add_input el-input el-input--suffix">
  237. <input v-model.trim="schoolCode2" type="text" autocomplete="off" placeholder="请输入随机码"
  238. class="el-input__inner" />
  239. </div>
  240. </span>
  241. </div>
  242. </div>
  243. <div class="el-form-item">
  244. <label class="el-form-item__label" style="width: 100px">上级组织</label>
  245. <div class="el-form-item__content" style="margin-left: 5px">
  246. <span>
  247. <div class="add_input el-input el-input--suffix">
  248. <el-form :model="school" ref="form">
  249. <el-select v-model="school.parentOrgId" placeholder="请选择组织"
  250. class="custom-select" filterable>
  251. <el-option v-for="(org, index) in organizations" :key="index"
  252. :label="org.name" :value="org.id">
  253. {{ org.name }}
  254. </el-option>
  255. </el-select>
  256. </el-form>
  257. </div>
  258. </span>
  259. </div>
  260. </div>
  261. <!-- 描述 -->
  262. <div class="el-form-item">
  263. <label class="el-form-item__label" style="width: 100px">描述</label>
  264. <div class="el-form-item__content" style="margin-left: 5px">
  265. <span>
  266. <div class="add_input el-input el-input--suffix">
  267. <input v-model="schoolDetail" type="text" autocomplete="off" placeholder="请输入描述"
  268. class="el-input__inner" />
  269. </div>
  270. </span>
  271. </div>
  272. </div>
  273. <!-- 区域 -->
  274. <div class="el-form-item">
  275. <label class="el-form-item__label" style="width: 100px">区域</label>
  276. <div class="el-form-item__content" style="margin-left: 5px">
  277. <span>
  278. <div class="add_input el-input el-input--suffix">
  279. <el-select v-model="regionC" placeholder="请选择区域" class="custom-select" filterable>
  280. <el-option v-for="(org, index) in regionCList" :key="index" :label="org.name"
  281. :value="org.name">
  282. {{ org.name }}
  283. </el-option>
  284. </el-select>
  285. </div>
  286. </span>
  287. </div>
  288. </div>
  289. </form>
  290. </div>
  291. <!-- 按钮区域 -->
  292. <div slot="footer" class="el-dialog__footer">
  293. <el-button @click="close_add_school2">取 消</el-button>
  294. <el-button type="primary" @click="updateSchool()">确认</el-button>
  295. </div>
  296. </el-dialog>
  297. <!-- 启用弹窗 -->
  298. <el-dialog :title="enableDiaTitle" class="table" :visible.sync="enable_school_dialog" :before-close="close_enable_school"
  299. width="700px">
  300. <div class="el_dialog_org_content">
  301. <form class="el-form">
  302. <!-- 使用期限 -->
  303. <div class="el-form-item">
  304. <label class="el-form-item__label">使用期限</label>
  305. <div class="el-form-item__content">
  306. <el-date-picker v-model="useDate" format="yyyy-MM-dd" type="date" value-format="yyyy-MM-dd"
  307. placeholder="请选择使用期限" />
  308. </div>
  309. </div>
  310. </form>
  311. </div>
  312. <!-- 按钮区域 -->
  313. <div slot="footer" class="dialog-footer">
  314. <el-button @click="close_enable_school">取 消</el-button>
  315. <el-button type="primary" @click="enable_school">确认</el-button>
  316. </div>
  317. </el-dialog>
  318. <permissionSettingDialog ref="permissionSettingDialogRef" @getData="getSchool" />
  319. </div>
  320. </template>
  321. <script>
  322. import { addOp } from "@/api/user";
  323. import { API_CONFIG } from "@/common/apiConfig";
  324. import { mapGetters } from "vuex";
  325. import permissionSettingDialog from "./dialog/permissionSettingDialog";
  326. export default {
  327. name: "schoolList",
  328. components: {
  329. permissionSettingDialog,
  330. },
  331. data() {
  332. return {
  333. schoolData: [],
  334. schoolList: [],
  335. cn_school: [],
  336. checkOid: "",
  337. checkOrg: "",
  338. checkArea: "",
  339. currentPage: 1,
  340. pageSize: 10,
  341. total: 0,
  342. add_school_dialog: false,
  343. add_school_dialog2: false,
  344. enable_school_dialog: false,
  345. dialogAction: '',
  346. useDate: "",
  347. sch_name: "", //学校名称
  348. form: {
  349. name: "",
  350. account: "",
  351. organization: "",
  352. school: "",
  353. },
  354. school: {
  355. OrgId: null, // 初始化 OrgId 为 null 或适当的默认值
  356. parentOrgId: "",
  357. },
  358. region: "", //地区
  359. schoolCode: "", //学校编码
  360. schoolCode2: "", //学校编码
  361. regionC: "cn", //区域
  362. regionCList: [
  363. { id: 1, name: "hk" },
  364. { id: 2, name: "cn" },
  365. ], //区域列表
  366. organizations: [],
  367. schoolDetail: "", //学校描述
  368. schoolType: "1", //学校单选框类型
  369. loginPermission: "1", //是否允许登录
  370. nid: "", //修改学校的id
  371. unShowJurUser: ['0abcb118-9110-11eb-80ad-005056b86db5']
  372. };
  373. },
  374. methods: {
  375. // 表头的背景色
  376. headerCellStyle() {
  377. return { backgroundColor: "#f1f1f1" };
  378. },
  379. changeOrg() {
  380. this.currentPage = 1;
  381. this.getSchool();
  382. },
  383. changeOid() {
  384. this.currentPage = 1; // 重置当前页
  385. this.getSchool(); // 调用获取数据的方法
  386. },
  387. changeArea() {
  388. this.currentPage = 1;
  389. this.getSchool();
  390. },
  391. getSchool() {
  392. let params = [
  393. {
  394. functionName: "getSchoolList",
  395. sName: this.checkOid,
  396. oName: this.checkOrg,
  397. area: this.checkArea,
  398. page: this.currentPage,
  399. num: this.pageSize,
  400. },
  401. ];
  402. this.$ajax
  403. .post(API_CONFIG.baseUrl, params)
  404. .then((res) => {
  405. // console.log("返回的数据为:", res.data); // 检查返回的数据
  406. if (res.data && Array.isArray(res.data[0])) {
  407. // 使用 map() 提取所有组织名称
  408. this.schoolData = res.data[0];
  409. if (
  410. this.schoolData.length > 0 &&
  411. res.data[0][0] &&
  412. res.data[0][0].num !== undefined
  413. ) {
  414. this.total = res.data[0][0].num; // 使用 num 的值
  415. } else {
  416. this.total = 0; // 设置总数为0
  417. }
  418. } else {
  419. this.total = 0; // 如果没有数据,设置总数为0
  420. }
  421. })
  422. .catch((err) => {
  423. this.$message.error("查询失败");
  424. console.error("请求失败,错误信息:", err);
  425. });
  426. },
  427. ajax_school() {
  428. // 构建请求参数
  429. let params = [
  430. {
  431. functionName: "getAllSchool", // 调用存储过程的名称
  432. },
  433. ];
  434. this.$ajax
  435. .post(API_CONFIG.baseUrl, params)
  436. .then((res) => {
  437. // console.log("返回的数据为:", res.data); // 检查返回的数据
  438. if (res.data && Array.isArray(res.data[0])) {
  439. this.cn_school = res.data[0].map((item) => ({
  440. name: item.name,
  441. id: item.id,
  442. org: item.org,
  443. area: item.area,
  444. }));
  445. // 将 name 和 org 都存入 cn_school 数组中
  446. this.schoolList = res.data[0].map((item) => ({
  447. name: item.name,
  448. id: item.id,
  449. org: item.org,
  450. area: item.area,
  451. }));
  452. // console.log(this.schoolList);
  453. }
  454. })
  455. .catch((err) => {
  456. this.$message.error("查询失败");
  457. console.error("请求失败,错误信息:", err);
  458. });
  459. },
  460. // 页码扩展按钮
  461. handlePageChange(page) {
  462. this.currentPage = page;
  463. this.getSchool();
  464. },
  465. close_add_school() {
  466. this.add_school_dialog = false;
  467. },
  468. close_add_school2() {
  469. this.add_school_dialog2 = false;
  470. this.sch_name = ""; // 清空学校名称
  471. this.school.parentOrgId = ""; // 清空组织选择
  472. this.region = ""; // 清空地区选择
  473. this.regionC = "cn";
  474. this.schoolType = "1"; // 清空学校类型选择
  475. this.schoolCode = ""; // 清空学校编码
  476. this.schoolCode2 = ""; // 清空学校编码
  477. this.schoolDetail = ""; // 清空学校描述
  478. this.loginPermission = "1"; // 清空登录权限的选择
  479. },
  480. close_enable_school() {
  481. this.enable_school_dialog = false;
  482. this.useDate = "";
  483. },
  484. //组织查询
  485. ajax_org() {
  486. const params = [API_CONFIG.ajax_org]; // 使用配置中的接口参数
  487. this.$ajax
  488. .post(API_CONFIG.baseUrl, params)
  489. .then((res) => {
  490. // console.log("返回的数据为:", res.data); // 检查返回的数据
  491. if (res.data && Array.isArray(res.data[0])) {
  492. // 使用 map() 提取所有组织名称
  493. this.organizations = res.data[0].map((item) => ({
  494. name: item.name,
  495. id: item.id,
  496. }));
  497. }
  498. // console.log("返回的结果为:", this.organizations);
  499. })
  500. .catch((err) => {
  501. this.$message.error("查询失败");
  502. console.error("请求失败,错误信息:", err);
  503. });
  504. },
  505. ajax_add_school() {
  506. // 校验学校名称是否为空
  507. if (!this.sch_name || this.sch_name.trim() === "") {
  508. this.$message.error("学校名称不能为空!");
  509. return;
  510. }
  511. if (this.schoolCode2 && this.schoolCode2.length && this.schoolCode2.length != 4) return this.$message.error("随机码须4位数");
  512. // 构建请求参数
  513. let params = [
  514. {
  515. functionName: API_CONFIG.ajax_add_schoolN.functionName, // 调用存储过程的名称
  516. u_name: this.sch_name, // 学校名称,绑定到 orgName
  517. u_org: this.school.parentOrgId || "", // 选择的组织的 ID,绑定到 school.parentOrgId,如果没有选择则为空
  518. u_dest: this.region || "", // 地区,绑定到 region,如果为空则传空字符串
  519. u_type: this.schoolType || "", // 学校类型,绑定到 schoolType,如果没有选择则为空
  520. u_code: this.schoolCode || "", // 学校编码,绑定到 schoolCode,如果为空则传空字符串
  521. u_code2: this.schoolCode2 || "", // 学校随机码,绑定到 schoolCode,如果为空则传空字符串
  522. u_detail: this.schoolDetail || "", // 学校描述,绑定到 schoolDetail,如果为空则传空字符串
  523. u_regionC: this.regionC || "",
  524. u_isLogin: this.loginPermission === "1" ? 1 : 2, // 是否允许登录,默认传 2(不允许登录)如果没有选择
  525. uid: this.userid,
  526. },
  527. ];
  528. // 发起请求
  529. this.$ajax
  530. .post(API_CONFIG.baseUrl, params)
  531. .then(async (res) => {
  532. // console.log("👉", res.data);
  533. if (res.data && res.data[0] && res.data[0][0]) {
  534. if (res.data[0][0].name === 1) {
  535. this.$message({
  536. type: "error",
  537. message: "该学校已存在,请重新选择!",
  538. });
  539. return;
  540. } else {
  541. this.$message({
  542. type: "success",
  543. message: "添加成功!",
  544. });
  545. await addOp({
  546. uid: this.userid,
  547. cid: "",
  548. type: "user_op",
  549. content: `添加了学校 ${this.sch_name}`,
  550. });
  551. }
  552. } else {
  553. this.$message.error("插入失败,未返回有效结果");
  554. }
  555. // 刷新学校列表
  556. this.getSchool();
  557. // 关闭弹窗
  558. this.add_school_dialog = false;
  559. // 清空输入框、下拉菜单选择和单选框
  560. this.sch_name = ""; // 清空学校名称
  561. this.school.parentOrgId = ""; // 清空组织选择
  562. this.region = ""; // 清空地区选择
  563. this.schoolDetail = ""; // 清空学校描述
  564. this.regionC = "cn";
  565. this.schoolType = "1"; // 清空学校类型选择
  566. this.schoolCode = ""; // 清空学校编码
  567. this.schoolCode2 = ""; // 清空学校随机码
  568. this.loginPermission = "1"; // 清空登录权限的选择
  569. })
  570. .catch((err) => {
  571. this.$message.error("插入失败");
  572. console.error("请求失败,错误信息:", err);
  573. });
  574. },
  575. update(row) {
  576. this.nid = row.id;
  577. this.add_school_dialog2 = true;
  578. this.sch_name = row.name;
  579. this.school.parentOrgId = row.org;
  580. this.region = row.dest;
  581. this.schoolCode = row.code;
  582. this.schoolCode2 = row.code2;
  583. this.schoolDetail = row.detail;
  584. this.regionC = row.area;
  585. },
  586. updateSchool() {
  587. if (this.schoolCode2 && this.schoolCode2.length && this.schoolCode2.length != 4) return this.$message.error("随机码须4位数");
  588. let params = [
  589. {
  590. functionName: "updateSchool2N",
  591. id: this.nid,
  592. name: this.sch_name,
  593. dest: this.region,
  594. code: this.schoolCode,
  595. code2: this.schoolCode2,
  596. organ: this.school.parentOrgId,
  597. detail: this.schoolDetail,
  598. area: this.regionC,
  599. },
  600. ];
  601. this.$ajax
  602. .post(API_CONFIG.baseUrl, params)
  603. .then(async (res) => {
  604. console.log("👉", res.data);
  605. this.add_school_dialog2 = false;
  606. this.$message({
  607. message: "修改成功",
  608. type: "success",
  609. });
  610. this.getSchool();
  611. // 清空输入框、下拉菜单选择和单选框
  612. this.sch_name = ""; // 清空学校名称
  613. this.school.parentOrgId = ""; // 清空组织选择
  614. this.region = ""; // 清空地区选择
  615. this.schoolDetail = ""; // 清空学校描述
  616. this.regionC = "cn";
  617. this.schoolType = "1"; // 清空学校类型选择
  618. this.schoolCode = ""; // 清空学校编码
  619. this.schoolCode2 = ""; // 清空学校随机码
  620. this.loginPermission = "1"; // 清空登录权限的选择
  621. await addOp({
  622. uid: this.userid,
  623. cid: "",
  624. type: "user_op",
  625. content: `修改了学校 ${this.sch_name}${this.nid}`,
  626. });
  627. })
  628. .catch((err) => {
  629. this.$message.error("修改失败");
  630. console.log(err);
  631. });
  632. },
  633. formatDate() {
  634. // 使用示例
  635. const today = new Date(); // 获取当前日期
  636. const year = today.getFullYear(); // 获取年份
  637. const month = String(today.getMonth() + 1).padStart(2, '0'); // 获取月份,注意月份从0开始,所以要加1,并确保是两位数
  638. const day = String(today.getDate()).padStart(2, '0'); // 获取日期,并确保是两位数
  639. this.useDate = `${year}-${month}-${day}`; // 返回格式化后的日期字符串
  640. },
  641. enable(row,action) {
  642. if (row.isLogin === '2') {
  643. this.enable_school_dialog = true;
  644. this.nid = row.id;
  645. this.dialogAction = action;
  646. this.formatDate();
  647. }
  648. else {
  649. this.disableSchool(row);
  650. }
  651. },
  652. open_enable_school(row) {
  653. this.enable_school_dialog = true;
  654. this.nid = row.id;
  655. this.dialogAction = 'useDate';
  656. if (row.isLogin === '1' || row.isLogin === 'null' || row.isLogin === '') {
  657. this.formatDate();
  658. } else {
  659. this.useDate = row.isLogin;
  660. }
  661. },
  662. enable_school() {
  663. let params = [
  664. {
  665. functionName: "enableSchool",
  666. id: this.nid,
  667. date: this.useDate
  668. }
  669. ];
  670. this.$ajax
  671. .post(API_CONFIG.baseUrl, params)
  672. .then(async (res) => {
  673. console.log("👉", res.data);
  674. this.enable_school_dialog = false;
  675. this.useDate = "";
  676. if (this.dialogAction === 'enable') {
  677. this.$message({
  678. message: '启用成功',
  679. type: 'success'
  680. });
  681. } else if (this.dialogAction === 'useDate') {
  682. this.$message({
  683. message: '设置成功',
  684. type: 'success'
  685. });
  686. }
  687. // this.formatDate();
  688. this.getSchool();
  689. await addOp({
  690. uid: this.userid,
  691. cid: "",
  692. type: "user_op",
  693. content: `启用了学校 ${this.sch_name} ${this.nid}`,
  694. });
  695. })
  696. .catch((err) => {
  697. this.$message.error("启用失败");
  698. console.log(err);
  699. });
  700. },
  701. disableSchool(row) {
  702. let params = [
  703. {
  704. functionName: "disableSchool",
  705. id: row.id,
  706. },
  707. ];
  708. this.$confirm("确定禁用此学校记录吗?", "提示", {
  709. confirmButtonText: "确定",
  710. cancelButtonText: "取消",
  711. type: "warning",
  712. })
  713. .then(() => {
  714. this.$ajax
  715. .post(API_CONFIG.baseUrl, params)
  716. .then(async (res) => {
  717. console.log("👉", res.data);
  718. this.$message({
  719. message: '禁用成功',
  720. type: 'success'
  721. });
  722. this.getSchool();
  723. await addOp({
  724. uid: this.userid,
  725. cid: "",
  726. type: "user_op",
  727. content: `禁用了学校 ${row.name} ${row.id}`,
  728. });
  729. })
  730. })
  731. .catch((err) => {
  732. console.log(err);
  733. });
  734. },
  735. delete_school(row) {
  736. this.nid = row.id;
  737. let params = [
  738. {
  739. functionName: "deleteSchool",
  740. id: this.nid,
  741. },
  742. ];
  743. this.$confirm("确定删除此学校记录吗?", "提示", {
  744. confirmButtonText: "确定",
  745. cancelButtonText: "取消",
  746. type: "warning",
  747. })
  748. .then(() => {
  749. this.$ajax.post(API_CONFIG.baseUrl, params).then(async (res) => {
  750. console.log("👉", res.data);
  751. this.$message({
  752. message: "删除成功",
  753. type: "success",
  754. });
  755. this.getSchool();
  756. await addOp({
  757. uid: this.userid,
  758. cid: "",
  759. type: "user_op",
  760. content: `删除了学校 ${row.name}${row.id}`,
  761. });
  762. });
  763. })
  764. .catch((err) => {
  765. this.$message.error("删除失败");
  766. console.log(err);
  767. });
  768. },
  769. async getUserId(oid, org) {
  770. let params = [
  771. {
  772. functionName: "select_Suffix", // 调用存储过程的名称
  773. org: org, //组织id
  774. oid: oid, //学校id
  775. },
  776. ];
  777. try {
  778. const res = await this.$ajax.post(API_CONFIG.baseUrl, params);
  779. console.log("getSuffix", res);
  780. let data = res.data[0];
  781. let orgData = res.data[1];
  782. let ap =
  783. data.length > 0
  784. ? data[0].userid
  785. : orgData.length > 0
  786. ? orgData[0].userid
  787. : "";
  788. return ap;
  789. } catch (err) {
  790. console.error("请求失败,错误信息:", err);
  791. }
  792. },
  793. async toPage(row) {
  794. const oid = row.id;
  795. const org = row.org;
  796. let userid = await this.getUserId(oid, org);
  797. await addOp({
  798. uid: this.userid,
  799. cid: "",
  800. type: "user_op",
  801. content: `点击了批量添加 ${row.name}${row.id}`,
  802. });
  803. const url = `https://beta.pbl.cocorobo.cn/pbl-teacher-table/dist/?#/teacher?userid=${userid ? userid : this.userid
  804. }&oid=${oid}&org=${org}`;
  805. window.open(url, "_blank");
  806. },
  807. permissionSetting(data) {
  808. this.$refs.permissionSettingDialogRef.open(data, "school");
  809. },
  810. },
  811. mounted() {
  812. this.getSchool();
  813. this.ajax_org();
  814. this.ajax_school();
  815. },
  816. computed: {
  817. ...mapGetters(["userid"]),
  818. enableDiaTitle() {
  819. return this.dialogAction === 'enable' ? '启用学校' : '设置使用期限'
  820. }
  821. },
  822. };
  823. </script>
  824. <style scoped>
  825. .list_container {
  826. width: 100%;
  827. height: 100%;
  828. padding: 10px;
  829. box-sizing: border-box;
  830. overflow: auto;
  831. }
  832. /* 新增学校的内容容器 */
  833. .el_dialog_school_content {
  834. color: #606266;
  835. font-size: 14px;
  836. /* height: 300px; */
  837. }
  838. .el-form-item {
  839. margin-bottom: 22px;
  840. display: flex;
  841. align-items: center;
  842. /* border: 1px solid black; */
  843. }
  844. .el-form-item__label {
  845. font-size: 14px;
  846. color: #606266;
  847. line-height: 40px;
  848. margin-left: 20px;
  849. width: 70px;
  850. }
  851. .el-form-item__content {
  852. line-height: 40px;
  853. position: relative;
  854. font-size: 14px;
  855. }
  856. .table>>>.el-dialog__header {
  857. padding: 15px 20px;
  858. background: #454545;
  859. }
  860. .table>>>.el-dialog__title {
  861. color: #fff;
  862. }
  863. .tableBox {
  864. margin: 10px 0;
  865. }
  866. .operate {
  867. display: flex;
  868. gap: 5px;
  869. }
  870. .operate button {
  871. background: none;
  872. border: none;
  873. cursor: pointer;
  874. color: #308fff;
  875. }
  876. </style>