index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. <template>
  2. <div class="sign-body">
  3. <span class="sign-title-2"> 批量开通申请表</span>
  4. <div class="sign-content-box">
  5. <el-row :gutter="24" align="center" >
  6. <el-col :span="9">
  7. <span style="color: #909399;font-size: 1rem;">信用统一代码:</span>
  8. <el-button type="text" @click="editCompany" > {{info.companyNo}} </el-button>
  9. </el-col>
  10. <el-col :span="9">
  11. <span style="color: #909399;font-size: 1rem;">邮件地址:</span>
  12. <el-button type="text" @click="editCompany" >{{info.email}}</el-button>
  13. </el-col>
  14. <el-col :span="6">
  15. <el-button type="primary" class="el-icon-plus" @click="addNewUser">
  16. 添加用户
  17. </el-button>
  18. </el-col>
  19. </el-row>
  20. <el-table v-loading="listLoading" :data="list.slice( page*size-size, page*size)" border fit highlight-current-row>
  21. <el-table-column label="姓名" align="center" prop="nickname" />
  22. <el-table-column label="手机号" align="center" prop="phone" />
  23. <el-table-column label="最高学历" align="center" prop="education" />
  24. <el-table-column label="岗位" align="center" prop="courseName" />
  25. <el-table-column label="年度" align="center" prop="nd" />
  26. <el-table-column label="证书编号" align="center" prop="rzCode" />
  27. <el-table-column label="操作" fixed="right" align="center" width="120">
  28. <template slot-scope="{row}">
  29. <el-button @click="editRow( row )" type="text" size="small">修改</el-button>
  30. <el-button @click="deleteRow( row )" type="text" size="small" style="color: brown;">删除</el-button>
  31. </template>
  32. </el-table-column>
  33. </el-table>
  34. </el-table>
  35. <el-pagination @current-change="handleCurrentChange" :current-page="page" :page-size="size"
  36. layout="total, prev,pager, next" :total="list.length">
  37. </el-pagination>
  38. <el-dialog title="修改企业信息" center :visible.sync="updateCompanyDialog" width="500px">
  39. <el-form :model="info" :rules="rules2" label-width="120px" ref="updateCompanyDialog" >
  40. <el-form-item label="信用统一代码" prop="companyNo" >
  41. <el-input v-model="info.companyNo" type="text" style="width: 250px;" />
  42. </el-form-item>
  43. <el-form-item label="邮件地址" prop="email" >
  44. <el-input v-model="info.email" type="text" style="width: 250px;" />
  45. </el-form-item>
  46. </el-form>
  47. <div class="dialog-footer" slot="footer">
  48. <el-button @click="updateCompanyDialog = false">取 消</el-button>
  49. <el-button @click="doEditCompany()" type="primary">确 定</el-button>
  50. </div>
  51. </el-dialog>
  52. </div>
  53. <el-dialog title="选择证书" center :visible.sync="selectRzCodeDialog" width="80%">
  54. <el-table v-loading="listLoading" :data="recodeList" border fit highlight-current-row>
  55. <el-table-column label="证书编号" align="center" prop="certificateNum" />
  56. <el-table-column label="岗位类型" align="center" prop="certificateType" />
  57. <el-table-column label="岗位名称" align="center" prop="positionName" />
  58. <el-table-column label="发证机关" align="center" prop="certificateOrgan" />
  59. <el-table-column label="证书状态" align="center" prop="certificateStatus" />
  60. <el-table-column label="有效期" fixed="right" align="center" >
  61. <template slot-scope="{row}">
  62. <span>{{row.startTime}}-{{row.endTime}}</span>
  63. </template>
  64. </el-table-column>
  65. <el-table-column label="操作" fixed="right" align="center">
  66. <template slot-scope="{row}">
  67. <el-button @click="selectRzCode( row )" type="text" size="small">选择</el-button>
  68. </template>
  69. </el-table-column>
  70. </el-table>
  71. </el-table>
  72. </el-dialog>
  73. <el-dialog title="添加用户" center :visible.sync="addUserDialog" width="520px" :close-on-click-modal="false">
  74. <el-form :model="form" :rules="rules" label-width="120px" ref="addUserDialog" >
  75. <el-form-item label="用户名字" prop="nickname">
  76. <el-input v-model="form.nickname" type="text" style="width: 300px;" name="nickname" autocomplete="on" />
  77. </el-form-item>
  78. <el-form-item label="身份证号" prop="cardId" >
  79. <el-input v-model="form.cardId" type="text" style="width: 300px;" name="cardId" autocomplete="on"/>
  80. </el-form-item>
  81. <el-form-item label="证书编号" prop="rzCode" >
  82. <el-input v-model="form.rzCode" type="text" style="width: 230px;" />
  83. <el-button style="width: 70px;" type="primary" @click="reloadRzCode" :disabled="form.cardId.length!=18 || !form.nickname" >查询</el-button>
  84. </el-form-item>
  85. <el-form-item label="最高学历" prop="education" >
  86. <el-select v-model="form.education" style="width: 300px;" >
  87. <el-option v-for="item in educationList" :value="item" :label="item" :key="item"/>
  88. </el-select>
  89. </el-form-item>
  90. <el-form-item label="手机号码" prop="phone" >
  91. <el-input v-model="form.phone" type="text" style="width: 300px;" name="phone" autocomplete="on" />
  92. </el-form-item>
  93. <el-form-item label="选择岗位" prop="courseId">
  94. <el-select v-model="form.courseId" style="width: 300px;" >
  95. <el-option :value="0" label="选择课程" />
  96. <el-option v-for="item in courseList" :value="item.courseId" :label="item.courseName+'|'+item.nd" :key="item.id"/>
  97. </el-select>
  98. </el-form-item>
  99. </el-form>
  100. <div class="dialog-footer" slot="footer">
  101. <el-button @click="closeAddUserDialog()">取 消</el-button>
  102. <el-button @click="doAddUser()" type="primary">确 定</el-button>
  103. </div>
  104. </el-dialog>
  105. </div>
  106. </div>
  107. </template>
  108. <script>
  109. import {
  110. httpServer
  111. } from "@/components/httpServer/httpServer.js";
  112. import { MessageBox } from "element-ui";
  113. const defaultForm = {
  114. cardId:'',
  115. nickname:'',
  116. email:'',
  117. phone:'',
  118. courseId: 0,
  119. education:'',
  120. rzCode: ''
  121. };
  122. export default {
  123. data() {
  124. return {
  125. param: {
  126. taskId: 0,
  127. secret: ''
  128. },
  129. info:{
  130. company:'',
  131. email:'',
  132. companyNo:''
  133. },
  134. educationList: window.baseConfig.educationList,
  135. listLoading: false,
  136. addUserDialog: false,
  137. updateCompanyDialog: false,
  138. page: 1,
  139. size: 10,
  140. list: [],
  141. courseList: [],
  142. selectRzCodeDialog: false,
  143. recodeList:[],
  144. form: Object.assign({}, defaultForm),
  145. rules: {
  146. nickname: [{required: true, message: "请输入名字", trigger: "blur", min: 2 }],
  147. education: [{ required: true, message: "请选择学历", trigger: "blur"}],
  148. cardId: [
  149. { required: true, message: '请输入身份证号码', trigger: 'blur' },
  150. {
  151. validator: (rule, value, callback) => {
  152. if (!value) {
  153. return callback(new Error('请输入身份证号码'));
  154. }
  155. const cleanValue = value.replace(/[\s()]/g, '').toUpperCase();
  156. const mainlandReg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/;
  157. const hkReg = /^(?:C(?:\d{8}|[A-HJ-NP-Z]\d{7})|[HM](?:\d{10}|\d{8}))$/;
  158. if (mainlandReg.test(cleanValue) || hkReg.test(cleanValue)) {
  159. callback();
  160. } else {
  161. callback(new Error('请输入正确的大陆身份证(18位)或香港身份证(如 A1234567)'));
  162. }
  163. },
  164. trigger: 'blur'
  165. }
  166. ],
  167. phone: [ { required: true, message: "请输入手机号", trigger: "blur", min: 11, max:11 }],
  168. courseId: [ { required: true, message: "请选择岗位", trigger: "blur" }]
  169. },
  170. rules2: {
  171. companyNo: [{required: true, message: "请输入信用统一代码", trigger: "blur", min: 2 }],
  172. email: [{ required: true, message: "请输入邮箱地址", trigger: "blur", min: 6 }],
  173. }
  174. }
  175. },
  176. methods: {
  177. gotoDetail() {
  178. let param = this.param;
  179. httpServer("User.GetOpenCourseList", param).then(res => {
  180. if (res.code != 200) return;
  181. this.info = res.data.info||{}
  182. this.list = res.data.list || []
  183. this.courseList = res.data.courseList||[]
  184. })
  185. },
  186. reloadRzCode(){
  187. let {nickname,cardId} = this.form;
  188. if( !nickname || cardId.length <15 || cardId.length> 18){
  189. this.$message({message:'请输入大陆身份证(15-18位)'})
  190. return
  191. }
  192. httpServer("User.ReLoadRzCode", {nickname,cardId}).then( res=>{
  193. if( res.code != 200) return;
  194. this.recodeList = res.data;
  195. this.selectRzCodeDialog = true;
  196. })
  197. },
  198. closeAddUserDialog(){
  199. this.addUserDialog = false;
  200. this.$refs["ddUserDialog"] && this.$refs["ddUserDialog"].reseFields();
  201. },
  202. selectRzCode(row){
  203. this.form.rzCode = row.certificateNum||''
  204. this.selectRzCodeDialog = false;
  205. },
  206. editCompany(){
  207. this.updateCompanyDialog = true
  208. },
  209. doAddUser(){
  210. let cardId = this.form.cardId;
  211. this.$refs["addUserDialog"].validate((valid) => {
  212. if (!valid) return;
  213. let param = Object.assign({}, this.form, this.param);
  214. httpServer("User.AddOpenCourseInfo", param).then( res=>{
  215. if (res.code != 200) return;
  216. this.addUserDialog = false;
  217. this.$message.successMsg("申请完成", 3)
  218. this.gotoDetail();
  219. })
  220. })
  221. },
  222. doEditCompany(){
  223. this.$refs["updateCompanyDialog"].validate((valid) => {
  224. if (!valid) return;
  225. let param = Object.assign({}, this.info, this.param);
  226. httpServer("User.UpdateOpenCourseTask", param).then( res=>{
  227. if (res.code != 200) return;
  228. this.updateCompanyDialog = false;
  229. this.$message.successMsg("更新成功", 2)
  230. })
  231. })
  232. },
  233. doDeleteUser(row, cb){
  234. let param = Object.assign({}, {id:row.id}, this.param);
  235. httpServer("User.DelOpenCourseInfo", param).then( res=>{
  236. if (res.code != 200) return;
  237. this.$message.successMsg("删除完成", 2)
  238. cb&&cb();
  239. this.gotoDetail();
  240. })
  241. },
  242. editRow(row){
  243. this.form = Object.assign(this.form, row);
  244. this.addUserDialog = true
  245. },
  246. deleteRow(row){
  247. let that = this
  248. MessageBox({
  249. title: "删除提醒",
  250. message: "删除动作不可恢复,请确认是否删除",
  251. showCancelButton: true,
  252. confirmButtonText: "确定",
  253. cancelButtonText: "取消",
  254. beforeClose: (action, instance, done) => {
  255. if (action === "confirm") {
  256. instance.confirmButtonLoading = true;
  257. instance.confirmButtonText = '提交中...';
  258. that.doDeleteUser(row, done);
  259. done();
  260. instance.confirmButtonLoading = false;
  261. that.addUserDialog = false;
  262. } else{
  263. done();
  264. }
  265. }
  266. })
  267. },
  268. addNewUser(){
  269. this.form = Object.assign(this.form, defaultForm);
  270. if(!this.info.email){
  271. this.$message.successMsg("请先补充企业邮箱地址", 3)
  272. return;
  273. }
  274. this.addUserDialog = true
  275. },
  276. handleCurrentChange: function(page) {
  277. this.page = page
  278. }
  279. },
  280. created() {
  281. this.param.taskId = +this.$route.query.id || '';
  282. this.param.secret = this.$route.query.secret || '';
  283. if (this.param.taskId && this.param.secret) {
  284. this.gotoDetail();
  285. }
  286. }
  287. }
  288. </script>
  289. <style>
  290. @import url("./index.css");
  291. </style>