banzhengXinxi.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. <template>
  2. <view class="jz-content-box">
  3. <view :class="isZijiazheng=='true'?'mask-view':''">
  4. <view class="content-body-box">
  5. <view v-if="status =='add'" class="bzsm-tip-box form-top-margin">
  6. <view class="title-btn-box">
  7. <view class="phone-line-title">说明</view>
  8. <view @click="resetFun" class="reset-btn">重置</view>
  9. </view>
  10. <view class="tip-content-box">1.如果不需要办理证书,可直接点击保存按钮。</view>
  11. <view class="tip-content-box">2.点击重置按钮,只重置办证信息,其他信息不改变。</view>
  12. </view>
  13. <!-- 报证机构(picker 实现下拉选择) -->
  14. <view class="form-label-select form-top-margin">
  15. <view class="phone-form-label"><text class="form-label-require">*</text>报证机构</view>
  16. <picker :disabled="(status =='edit'&&localStatus=='')" mode="selector" :range="jigouNames"
  17. @change="jigouChange" class="select-picker-box">
  18. <view class="form-radio-select"
  19. :class="{'form-radio-disabled': (status =='edit'&&localStatus=='')}">
  20. <view>{{ formData.baozhengJigouName || '请选择报证机构' }}</view>
  21. <icon></icon>
  22. </view>
  23. </picker>
  24. </view>
  25. <!-- 职业名称(picker 实现下拉选择) -->
  26. <view class="form-label-select">
  27. <view class="phone-form-label"><text class="form-label-require">*</text>职业名称</view>
  28. <picker mode="selector" :disabled="isJgFlag" :style="isJgFlag?'color:#999':''" :range="zhiyeNames"
  29. range-key="name" @change="zhiyeChange" class="select-picker-box">
  30. <view class="form-radio-select">
  31. <view>{{ formData.zhiyeName || '请选择职业名称' }}</view>
  32. <icon></icon>
  33. </view>
  34. </picker>
  35. </view>
  36. <!-- 职业等级(picker 实现下拉选择) -->
  37. <view class="form-label-select">
  38. <view class="phone-form-label"><text class="form-label-require">*</text>职业等级</view>
  39. <picker mode="selector" :disabled="isZyFlag" :style="isZyFlag?'color:#999':''" :range="zhiyeLevels"
  40. @change="levelChange" class="select-picker-box">
  41. <view class="form-radio-select">
  42. <view>{{ formData.zhiyeLevelName || '请选择等级' }}</view>
  43. <icon></icon>
  44. </view>
  45. </picker>
  46. </view>
  47. <view v-if="formData.banzhengInfoFlag" class="form-label-select">
  48. <view class="phone-form-label"><text class="form-label-require">*</text>参训时间</view>
  49. <uni-datetime-picker class="form-radio-picker" v-model="formData.canxunshijian" type="date"
  50. @change="canxunShijianChange">
  51. <view class="form-radio-select">
  52. <view>{{formData.canxunshijian}}</view>
  53. <icon></icon>
  54. </view>
  55. </uni-datetime-picker>
  56. </view>
  57. <view v-if="formData.banzhengInfoFlag" class="form-label-input">
  58. <view class="phone-form-label"><text class="form-label-require">*</text>实操成绩</view>
  59. <input v-model="formData.shicaochengji" placeholder="请填写实操成绩" />
  60. </view>
  61. <view v-if="formData.banzhengInfoFlag" class="form-label-input">
  62. <view class="phone-form-label"><text class="form-label-require">*</text>总课时</view>
  63. <input v-model="formData.zongkeshi" placeholder="请填写总课时" />
  64. </view>
  65. <view v-if="formData.needFlag" class="form-label-select">
  66. <view class="phone-form-label"><text class="form-label-require"></text>需要考试</view>
  67. <radio-group @change="kaoshiChange">
  68. <label class="radio-label">
  69. <radio :value="'true'" :checked="formData.needKaoshi == 'true'" color="#3fd2a1"
  70. style="transform:scale(0.65)" />
  71. <text>是</text>
  72. </label>
  73. <label class="radio-label">
  74. <radio :value="'false'" :checked="formData.needKaoshi == 'false'" color="#3fd2a1"
  75. style="transform:scale(0.65)" />
  76. <text>否</text>
  77. </label>
  78. </radio-group>
  79. </view>
  80. <view v-if="isZijiazheng !='true'" class="page-btn-box">
  81. <button type="default" v-if="piliang !=1&&isZijiazheng !='true'" @click="goBack"
  82. class="phone-white-btn">返回</button>
  83. <button type="default" v-if="piliang ==1&&isZijiazheng !='true'" @click="piliangBaocun"
  84. class="phone-green-btn">保存</button>
  85. <button type="default" v-if="piliang !=1&&isZijiazheng !='true'" @click="addSaveForm"
  86. class="phone-green-btn">添加</button>
  87. </view>
  88. <view v-if="piliangArray.length>0" v-for="(item,index) in piliangArray" :key="index"
  89. class="bzsm-tip-box form-top-margin">
  90. <view class="title-btn-box">
  91. <view class="phone-line-title">{{item.jgName}}</view>
  92. <view class="reset-btn" @click="piliangDelete(item,index)">删除</view>
  93. </view>
  94. <view class="tip-content-box">{{item.zyName}} {{item.zyLevelName}}</view>
  95. <!-- <view class="tip-content-box">职业名称:{{item.zyName}}</view>
  96. <view class="tip-content-box">职业等级:{{item.zyLevelName}}</view> -->
  97. </view>
  98. </view>
  99. <view v-if="isZijiazheng !='true'" class="page-btn-box content-footer-box">
  100. <button type="default" v-if="piliang ==1&&isZijiazheng !='true'" @click="goBack"
  101. class="phone-white-btn">返回</button>
  102. <button type="default" v-if="piliang ==1&&isZijiazheng !='true'" @click="addSaveFormPiliang"
  103. class="phone-green-btn">添加</button>
  104. </view>
  105. </view>
  106. </view>
  107. </template>
  108. <script>
  109. import {
  110. getBaozhengJigou,
  111. getJiazhengLevel,
  112. getJiazhengZhiye,
  113. getJiazhengBanzhengCheckKc
  114. } from "@/api/jiazheng.js"
  115. import dayjs from "dayjs";
  116. export default {
  117. data() {
  118. return {
  119. formData: {
  120. baozhengJigouId: '',
  121. baozhengJigouName: '',
  122. baozhengJigouType: '',
  123. banzhengInfoFlag: false,
  124. zhiyeName: '',
  125. zhiyeId: '',
  126. zhiyeLevelName: '',
  127. zhiyeLevelId: '',
  128. canxunshijian: '',
  129. shicaochengji: '',
  130. zongkeshi: '',
  131. needKecheng: 'false', // 默认选中"是"
  132. needKaoshi: 'false', // 默认选中"是"
  133. kcDisabled: false,
  134. needFlag: false,
  135. id: '',
  136. createTime: ''
  137. },
  138. baozhengJigouOpt: [
  139. ],
  140. zhiyelevelsOpt: [],
  141. zhiyeNameOpt: [
  142. ],
  143. localStatus: '',
  144. currentIndex: '',
  145. isJgFlag: true,
  146. isZyFlag: true,
  147. piliang: '',
  148. piliangArray: []
  149. };
  150. },
  151. props: {
  152. status: {
  153. type: String,
  154. },
  155. isZijiazheng: {
  156. type: String,
  157. }
  158. },
  159. computed: {
  160. jigouNames() {
  161. return this.baozhengJigouOpt.map(item => item.name);
  162. },
  163. zhiyeNames() {
  164. return this.zhiyeNameOpt.map(item => item.name);
  165. },
  166. zhiyeLevels() {
  167. return this.zhiyelevelsOpt.map(item => item.name);
  168. },
  169. },
  170. created() {
  171. this.getJigou()
  172. this.localStatus = this.status
  173. },
  174. methods: {
  175. piliangDelete(item, index) {
  176. this.piliangArray.splice(index, 1);
  177. },
  178. isPiliang(data) {
  179. this.piliang = data
  180. },
  181. goBack() {
  182. this.isJgFlag = true
  183. this.isZyFlag = true
  184. this.piliangArray = []
  185. this.$emit('goBack');
  186. },
  187. editinfo(data, index) {
  188. console.log('123123', data);
  189. this.$nextTick(() => {
  190. if (!data) {
  191. return false
  192. }
  193. console.log('datssssa', data);
  194. this.currentIndex = index
  195. this.formData.baozhengJigouName = data.jgName;
  196. this.formData.baozhengJigouId = data.jgId;
  197. this.formData.id = data.id;
  198. this.formData.baozhengJigouType = data.jgType;
  199. this.formData.banzhengInfoFlag = data.jgType == 1;
  200. this.formData.zhiyeName = data.zyName;
  201. this.formData.zhiyeId = data.zyId;
  202. this.formData.zhiyeLevelName = data.zyLevelName;
  203. this.formData.zhiyeLevelId = data.zyLevel;
  204. if (this.formData.baozhengJigouId) {
  205. this.isJgFlag = false
  206. getJiazhengZhiye({
  207. id: this.formData.baozhengJigouId
  208. }).then(res => {
  209. console.log('res', res);
  210. this.zhiyeNameOpt = res.data
  211. })
  212. }
  213. if (this.formData.baozhengJigouId && this.formData.zhiyeId) {
  214. this.isZyFlag = false
  215. let req = {
  216. jgId: this.formData.baozhengJigouId,
  217. zyId: this.formData.zhiyeId,
  218. }
  219. getJiazhengLevel(req).then(res => {
  220. console.log('res', res);
  221. this.zhiyelevelsOpt = res.data
  222. })
  223. }
  224. this.formData.canxunshijian = data.canxunshijian;
  225. this.formData.zongkeshi = data.zongkeshi;
  226. this.formData.shicaochengji = data.shicaochengji;
  227. this.formData.needKecheng = data.needKecheng ? data.needKecheng.toString() : 'false';
  228. this.formData.needKaoshi = data.needKaoshi ? data.needKaoshi.toString() : 'false';
  229. if (this.formData.banzhengInfoFlag) {
  230. this.formData.needFlag = false
  231. } else {
  232. this.formData.needFlag = true
  233. }
  234. })
  235. },
  236. getJigou() {
  237. getBaozhengJigou({}).then(res => {
  238. console.log('res', res);
  239. this.baozhengJigouOpt = res.data
  240. })
  241. },
  242. getZhiye() {
  243. this.zhiyeNameOpt = []
  244. this.formData.zhiyeName = ''
  245. this.formData.zhiyeId = ''
  246. getJiazhengZhiye({
  247. id: this.formData.baozhengJigouId
  248. }).then(res => {
  249. console.log('res', res);
  250. this.zhiyeNameOpt = res.data
  251. })
  252. },
  253. getZhiyeLevel() {
  254. this.zhiyelevelsOpt = []
  255. this.formData.zhiyeLevelName = ''
  256. this.formData.zhiyeLevelId = ''
  257. let req = {
  258. jgId: this.formData.baozhengJigouId,
  259. zyId: this.formData.zhiyeId,
  260. }
  261. getJiazhengLevel(req).then(res => {
  262. console.log('res', res);
  263. this.zhiyelevelsOpt = res.data
  264. })
  265. },
  266. resetData() {
  267. this.formData.zhiyeName = ''
  268. this.formData.zhiyeId = ''
  269. this.formData.zhiyeLevelName = ''
  270. this.formData.zhiyeLevelId = ''
  271. this.formData.canxunshijian = ''
  272. this.formData.shicaochengji = ''
  273. this.formData.zongkeshi = ''
  274. this.isJgFlag = true
  275. this.isZyFlag = true
  276. },
  277. resetFun() {
  278. this.formData.zhiyeName = ''
  279. this.formData.zhiyeId = ''
  280. this.formData.zhiyeLevelName = ''
  281. this.formData.zhiyeLevelId = ''
  282. this.formData.canxunshijian = ''
  283. this.formData.shicaochengji = ''
  284. this.formData.zongkeshi = ''
  285. this.formData.baozhengJigouName = ''
  286. this.formData.baozhengJigouId = ''
  287. this.formData.baozhengJigouName = ''
  288. this.formData.needKecheng = 'false'
  289. this.formData.needKaoshi = 'false'
  290. this.formData.needFlag = false
  291. this.formData.kcDisabled = false
  292. this.formData.banzhengInfoFlag = false
  293. this.isJgFlag = true
  294. this.isZyFlag = true
  295. },
  296. // 报证机构选择
  297. jigouChange(e) {
  298. this.formData.baozhengJigouName = this.baozhengJigouOpt[e.detail.value].name;
  299. this.formData.baozhengJigouId = this.baozhengJigouOpt[e.detail.value].jgId;
  300. this.formData.baozhengJigouType = this.baozhengJigouOpt[e.detail.value].jgType;
  301. this.formData.banzhengInfoFlag = this.baozhengJigouOpt[e.detail.value].jgType == 1;
  302. // 每一次都重置
  303. this.resetData()
  304. console.log('this.formData.banzhengInfoFlag', this.formData.banzhengInfoFlag);
  305. if (this.formData.banzhengInfoFlag) {
  306. this.formData.needFlag = false
  307. this.formData.needKaoshi = 'false'
  308. this.formData.needKecheng = 'false'
  309. } else {
  310. this.formData.needFlag = true
  311. this.formData.needKaoshi = 'true'
  312. this.formData.needKecheng = 'false'
  313. }
  314. if (this.formData.baozhengJigouId) {
  315. this.isJgFlag = false //开启
  316. this.getZhiye()
  317. }
  318. },
  319. // 职业等级选择
  320. levelChange(e) {
  321. this.formData.zhiyeLevelId = this.zhiyelevelsOpt[e.detail.value].id;
  322. this.formData.zhiyeLevelName = this.zhiyelevelsOpt[e.detail.value].name;
  323. },
  324. checkKc() {
  325. let req = {
  326. zyId: this.formData.zhiyeId,
  327. zyLevel: this.formData.zhiyeLevelId
  328. }
  329. getJiazhengBanzhengCheckKc(req).then(res => {
  330. console.log('res', res);
  331. if (res.data.pass.toString() == 'true') {
  332. this.formData.kcDisabled = false
  333. this.formData.needKecheng = 'true'
  334. } else {
  335. uni.showToast({
  336. title: res.data.msg,
  337. icon: 'none'
  338. });
  339. this.formData.needKecheng = 'false'
  340. this.formData.kcDisabled = true
  341. }
  342. // this.zhiyelevelsOpt = res.data
  343. })
  344. },
  345. // 职业名称选择
  346. zhiyeChange(e) {
  347. this.formData.zhiyeName = this.zhiyeNameOpt[e.detail.value].name;
  348. this.formData.zhiyeId = this.zhiyeNameOpt[e.detail.value].id;
  349. if (this.formData.baozhengJigouId && this.formData.zhiyeId) {
  350. this.isZyFlag = false
  351. this.getZhiyeLevel()
  352. }
  353. },
  354. canxunShijianChange(e) {
  355. console.log('e', e);
  356. this.formData.canxunshijian = e
  357. },
  358. // 需要课程选择
  359. kechengChange(e) {
  360. this.formData.needKecheng = e.detail.value.toString();
  361. console.log('this.formData.needKecheng', this.formData.needKecheng);
  362. if (this.formData.needKecheng == 'true') {
  363. if (this.formData.zhiyeId && this.formData.zhiyeLevelId) {
  364. this.checkKc()
  365. } else {
  366. uni.showToast({
  367. title: '请选择职业以及职业等级',
  368. icon: 'none'
  369. });
  370. setTimeout(() => {
  371. this.formData.needKecheng = 'false'
  372. }, 1000)
  373. return false
  374. }
  375. }
  376. },
  377. // 需要考试选择
  378. kaoshiChange(e) {
  379. this.formData.needKaoshi = e.detail.value.toString();
  380. },
  381. currentMove(data) {
  382. console.log('data', data);
  383. // currentMove 编辑状态下的新增
  384. this.localStatus = data
  385. console.log('localStatus', this.localStatus);
  386. },
  387. piliangBaocun() {
  388. let req = {
  389. canxunshijian: this.formData.canxunshijian,
  390. jgId: this.formData.baozhengJigouId,
  391. needKaoshi: this.formData.needKaoshi,
  392. needKecheng: this.formData.needKecheng,
  393. shicaochengji: this.formData.shicaochengji,
  394. zongkeshi: this.formData.zongkeshi,
  395. zyId: this.formData.zhiyeId,
  396. zyLevel: this.formData.zhiyeLevelId,
  397. jgType: this.formData.baozhengJigouType,
  398. jgName: this.formData.baozhengJigouName,
  399. zyName: this.formData.zhiyeName,
  400. zyLevelName: this.formData.zhiyeLevelName,
  401. id: this.formData.id,
  402. createTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
  403. }
  404. if (this.status == 'add' || this.localStatus == 'editadd' || this.localStatus == 'addEdit') {
  405. req.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss")
  406. }
  407. if (req.jgId == '' || req.zyId == '' || req.zyLevel == '') {
  408. uni.showToast({
  409. title: '请选择保证机构,职业名称,职业等级',
  410. icon: 'none'
  411. });
  412. return false
  413. }
  414. if (this.formData.baozhengJigouType == 1 && (this.formData.shicaochengji == '' || this.formData
  415. .zongkeshi ==
  416. '' || this.formData.canxunshijian == '')) {
  417. uni.showToast({
  418. title: '请填写参训时间,实操成绩,总课时',
  419. icon: 'none'
  420. });
  421. return false
  422. }
  423. // 检查重复数据 - 新增的重复检查逻辑
  424. const isDuplicate = this.piliangArray.some(item =>
  425. item.jgId === req.jgId &&
  426. item.zyId === req.zyId &&
  427. item.zyLevel === req.zyLevel
  428. );
  429. if (isDuplicate) {
  430. uni.showToast({
  431. title: '该机构、职业和等级已存在,无法重复添加',
  432. icon: 'none'
  433. });
  434. return false;
  435. }
  436. //console.log('req', req);
  437. this.piliangArray.push(req)
  438. console.log('this.piliangArray', this.piliangArray);
  439. },
  440. // 提交表单
  441. addSaveFormPiliang() {
  442. let req = {
  443. canxunshijian: this.formData.canxunshijian,
  444. jgId: this.formData.baozhengJigouId,
  445. needKaoshi: this.formData.needKaoshi,
  446. needKecheng: this.formData.needKecheng,
  447. shicaochengji: this.formData.shicaochengji,
  448. zongkeshi: this.formData.zongkeshi,
  449. zyId: this.formData.zhiyeId,
  450. zyLevel: this.formData.zhiyeLevelId,
  451. jgType: this.formData.baozhengJigouType,
  452. jgName: this.formData.baozhengJigouName,
  453. zyName: this.formData.zhiyeName,
  454. zyLevelName: this.formData.zhiyeLevelName,
  455. id: this.formData.id,
  456. createTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
  457. }
  458. if (this.status == 'add' || this.localStatus == 'editadd' || this.localStatus == 'addEdit') {
  459. req.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss")
  460. }
  461. if (req.jgId == '' || req.zyId == '' || req.zyLevel == '') {
  462. uni.showToast({
  463. title: '请选择保证机构,职业名称,职业等级',
  464. icon: 'none'
  465. });
  466. return false
  467. }
  468. if (this.formData.baozhengJigouType == 1 && (this.formData.shicaochengji == '' || this.formData
  469. .zongkeshi ==
  470. '' || this.formData.canxunshijian == '')) {
  471. uni.showToast({
  472. title: '请填写参训时间,实操成绩,总课时',
  473. icon: 'none'
  474. });
  475. return false
  476. }
  477. console.log('this.status', this.status);
  478. console.log('this.localStatus', this.localStatus);
  479. if (this.localStatus == 'editAdd') {
  480. if (this.piliangArray.length == 0) {
  481. this.$emit('editSavePiliang', req);
  482. } else {
  483. console.log('this.piliangArray', this.piliangArray);
  484. this.$emit('editSavePiliang', this.piliangArray)
  485. }
  486. } else if (this.status == 'add') {
  487. if (this.piliangArray.length == 0) {
  488. this.$emit('addSavePiliang', req);
  489. } else {
  490. console.log('this.piliangArray', this.piliangArray);
  491. this.$emit('addSavePiliang', this.piliangArray)
  492. }
  493. }
  494. },
  495. // 提交表单
  496. addSaveForm() {
  497. //debugger
  498. console.log('statusstatusstatus', this.status);
  499. let req = {
  500. canxunshijian: this.formData.canxunshijian,
  501. jgId: this.formData.baozhengJigouId,
  502. needKaoshi: this.formData.needKaoshi,
  503. needKecheng: this.formData.needKecheng,
  504. shicaochengji: this.formData.shicaochengji,
  505. zongkeshi: this.formData.zongkeshi,
  506. zyId: this.formData.zhiyeId,
  507. zyLevel: this.formData.zhiyeLevelId,
  508. jgType: this.formData.baozhengJigouType,
  509. jgName: this.formData.baozhengJigouName,
  510. zyName: this.formData.zhiyeName,
  511. zyLevelName: this.formData.zhiyeLevelName,
  512. id: this.formData.id,
  513. createTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
  514. }
  515. console.log('req', req);
  516. if (this.status == 'add' || this.localStatus == 'editadd' || this.localStatus == 'addEdit') {
  517. req.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss")
  518. }
  519. if (req.jgId == '' || req.zyId == '' || req.zyLevel == '') {
  520. uni.showToast({
  521. title: '请选择保证机构,职业名称,职业等级',
  522. icon: 'none'
  523. });
  524. return false
  525. }
  526. if (this.formData.baozhengJigouType == 1 && (this.formData.shicaochengji == '' || this.formData
  527. .zongkeshi ==
  528. '' || this.formData.canxunshijian == '')) {
  529. uni.showToast({
  530. title: '请填写参训时间,实操成绩,总课时',
  531. icon: 'none'
  532. });
  533. return false
  534. }
  535. console.log('req123123123', req);
  536. if (req.jgId && req.zyId && req.zyLevel) {
  537. if (this.localStatus == 'addEdit') {
  538. this.$emit('addEdit', req, 'addEdit', this.currentIndex);
  539. } else if (this.status == 'add') {
  540. this.$emit('addSave', req);
  541. } else if (this.localStatus == 'editAdd') {
  542. this.$emit('editSave', req, 'editAdd');
  543. } else {
  544. this.$emit('editSave', req, 'edit', this.currentIndex);
  545. }
  546. } else if (req.jgId == '' && req.zyId == '' && req.zyLevel == '') {
  547. if (this.status == 'add') {
  548. this.$emit('addSave', '');
  549. } else if (this.localStatus == 'editAdd') {
  550. //this.$emit('editSave', '');
  551. // uni.showToast({
  552. // title: '请选择保证机构,职业名称,职业等级',
  553. // icon: 'none'
  554. // });
  555. // return false
  556. } else {
  557. }
  558. } else {
  559. uni.showToast({
  560. title: '请选择保证机构,职业名称,职业等级',
  561. icon: 'none'
  562. });
  563. return false
  564. }
  565. }
  566. }
  567. };
  568. </script>