dialog.addletter.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. <template>
  2. <div class="edu-training-edit">
  3. <DialogCom
  4. :title="title"
  5. @close="onHide"
  6. :visible.sync="isShow"
  7. width="1000px"
  8. >
  9. <div class="page-body">
  10. <el-form
  11. ref="form"
  12. :model="formData"
  13. :rules="formDataRules"
  14. label-width="120px"
  15. >
  16. <el-row>
  17. <el-col :span="12">
  18. <el-form-item prop="reasons" label="出入事由">
  19. <el-input
  20. v-model="formData.reasons"
  21. placeholder="请输入出入事由"
  22. maxlength="100"
  23. />
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="12">
  27. <el-form-item label="接待机构" prop="receptionOrgIds">
  28. <org-tree-select v-model="formData.receptionOrgIds" ref="orgTreeSelect">
  29. </org-tree-select>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="12">
  33. <el-form-item label="介绍信编号" prop="letterNo">
  34. <el-input
  35. v-model="formData.letterNo"
  36. placeholder="请输入介绍信编号"
  37. maxlength="10"
  38. />
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="12">
  42. <el-form-item prop="range" label="介绍信有效期">
  43. <!-- <DataRangePicker
  44. v-model="formData.range"
  45. key="daterange"
  46. type="daterange"
  47. /> -->
  48. <el-date-picker
  49. v-model="formData.range"
  50. type="daterange"
  51. :picker-options="startDatepickerOptions"
  52. range-separator="至"
  53. start-placeholder="有效期开始日期"
  54. end-placeholder="有效期结束日期">
  55. </el-date-picker>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="12">
  59. <el-form-item label="上传介绍信" prop="letterFile">
  60. <K-file-upload
  61. ref="upload"
  62. :limit=2
  63. :defaultValue="formFileListDefualtValue"
  64. v-model="formData.letterFile"
  65. />
  66. </el-form-item>
  67. </el-col>
  68. <el-col :span="12">
  69. <el-form-item label="备注" prop="description">
  70. <el-input
  71. v-model="formData.description"
  72. placeholder="请输入备注"
  73. maxlength="100"
  74. />
  75. </el-form-item>
  76. </el-col>
  77. </el-row>
  78. <el-row :gutter="10" class="mb8">
  79. <el-col :span="1.5">
  80. <el-button
  81. type="primary"
  82. plain
  83. icon="el-icon-plus"
  84. size="mini"
  85. @click="handleAddUser"
  86. >新增人员</el-button
  87. >
  88. </el-col>
  89. </el-row>
  90. <el-table :data="formData.userInfos" max-height="500" style="margin-bottom: 10px;">
  91. <el-table-column label="人员姓名" width="100" align="center" prop="userName" />
  92. <el-table-column label="单位" width="100" align="center" prop="companyName" />
  93. <el-table-column label="证件号码" width="200" align="center" prop="idCard">
  94. </el-table-column>
  95. <el-table-column label="证件照" align="center" prop="imgFile">
  96. <template slot-scope="scope">
  97. <ImageListPreview v-model="scope.row.imgFile"></ImageListPreview>
  98. </template>
  99. </el-table-column>
  100. <el-table-column
  101. label="操作"
  102. align="center" width="150"
  103. class-name="small-padding fixed-width"
  104. >
  105. <template slot-scope="scope">
  106. <el-button size="mini" type="text" @click="editUser(scope.row)"
  107. >编辑</el-button
  108. >
  109. <el-button size="mini" type="text" @click="remove(scope.row)"
  110. >移除</el-button
  111. >
  112. </template>
  113. </el-table-column>
  114. </el-table>
  115. </el-form>
  116. </div>
  117. <DialogCom
  118. title="添加出入人员"
  119. :visible.sync="open"
  120. width="600px"
  121. append-to-body
  122. @close="onHideUser"
  123. >
  124. <el-form
  125. ref="formUser"
  126. :model="userInfo"
  127. :rules="userInfoRules"
  128. label-width="120px"
  129. >
  130. <el-form-item label="人员姓名" prop="userName">
  131. <el-input v-model="userInfo.userName" maxlength="10" placeholder="请输入姓名" />
  132. </el-form-item>
  133. <el-form-item label="单位" prop="companyName">
  134. <el-input v-model="userInfo.companyName" maxlength="10" placeholder="请输入单位" />
  135. </el-form-item>
  136. <el-form-item label="证件号码" prop="idCard">
  137. <el-input v-model="userInfo.idCard" maxlength="20" placeholder="请输入证件号码" />
  138. </el-form-item>
  139. <el-form-item prop="imgFile" label="上传证件照">
  140. <!-- <ImageListPreview v-model="userInfo.imgFile"></ImageListPreview> -->
  141. <imgUpload ref="uploadimage" type="more" :value="userInfo.imgFile" :limit=2
  142. @input="imageListChanged"></imgUpload>
  143. </el-form-item>
  144. </el-form>
  145. <div slot="footer" class="dialog-footer">
  146. <el-button type="primary" @click="submitUser">确 定</el-button>
  147. <el-button @click="onHideUser">取 消</el-button>
  148. </div>
  149. </DialogCom>
  150. <div slot="footer" class="dialog-footer">
  151. <el-button type="primary" @click="submitForm">确 定</el-button>
  152. <el-button @click="onHide">取 消</el-button>
  153. </div>
  154. </DialogCom>
  155. </div>
  156. </template>
  157. <script>
  158. import { mapState, mapMutations } from "vuex";
  159. import {
  160. listLetter,
  161. getLetter,
  162. delLetter,
  163. addLetter,
  164. updateLetter,
  165. } from "@/api/core/letter";
  166. import OrgTreeSelect from "@/components/orgTreeSelect";
  167. import KFileUpload from "@/components/K-FileUpload/index.vue";
  168. import dayjs from "dayjs";
  169. import imgUpload from "@/components/ImageUpload";
  170. import DataRangePicker from "@/components/dateTime/daterange.picker.vue";
  171. export default {
  172. components: { OrgTreeSelect, KFileUpload, imgUpload,DataRangePicker },
  173. data() {
  174. const params = this.$route.params;
  175. return {
  176. id: params ? params.id : null,
  177. isShow: false,
  178. title: "录入介绍信",
  179. formData: this.reset(),
  180. formDataRules: {
  181. reasons: [{ required: true, message: "请输入出入事由" }],
  182. letterNo: [{ required: true, message: "请输入介绍信编号" }],
  183. receptionOrgIds: [{ required: true, message: "请选择接待机构" }],
  184. range: [{ required: true, message: "请选择介绍信有效期" }],
  185. userInfos: [{ required: true, message: "请添加出入人员" }],
  186. letterFile:[{ required: true, message: "请上传介绍信" }],
  187. },
  188. userInfoRules: {
  189. userName: [{ required: true, message: "请输入姓名" }],
  190. companyName: [{ required: true, message: "请输入单位" }],
  191. idCard: [{ required: true, message: "请输入证件号码" }],
  192. imgFile: [{ required: true, message: "请上传证件照" }],
  193. },
  194. startDatepickerOptions: {
  195. disabledDate: this.endDisabledDate,
  196. },
  197. // endDatepickerOptions: {
  198. // disabledDate: this.endDisabledDate,
  199. // },
  200. formFileListDefualtValue: [],
  201. open: false,
  202. userInfo: this.resetUserInfo(),
  203. imageList: [],
  204. };
  205. },
  206. dicts: ["letter_status"],
  207. props: {},
  208. watch: {},
  209. created() {},
  210. computed: {
  211. ...mapState(["loginUser", "org"]),
  212. },
  213. methods: {
  214. ...mapMutations([]),
  215. reset(other = {}) {
  216. return {
  217. reasons: null,
  218. letterNo:null,
  219. receptionOrgIds: [],
  220. range:[],
  221. description: null,
  222. letterFile: [],
  223. userInfos: [],
  224. type:1,
  225. status:0,
  226. ...other,
  227. };
  228. },
  229. resetUserInfo() {
  230. return {
  231. userName: null,
  232. companyName: null,
  233. idCard: null,
  234. imgFile: null,
  235. };
  236. },
  237. async show(id, other = {}) {
  238. if (id) {
  239. this.title = "修改介绍信";
  240. this.isShow = true;
  241. getLetter(id).then((response) => {
  242. let tempRange=[];
  243. tempRange.push(dayjs(response.data.startTime));
  244. tempRange.push(new Date(response.data.endTime));
  245. response.data.range=tempRange;
  246. this.formData = response.data;
  247. this.formFileListDefualtValue=this.formData.letterFile;
  248. });
  249. }
  250. else
  251. {
  252. this.isShow = true;
  253. this.title = "录入介绍信";
  254. this.formData = this.reset();
  255. }
  256. },
  257. handleAddUser() {
  258. this.open = true;
  259. },
  260. imageListChanged(list) {
  261. this.userInfo.imgFile = list;
  262. },
  263. endDisabledDate(time) {
  264. //小于开始日期禁止选择
  265. let startDate = new Date();
  266. startDate.setTime(startDate.getTime() - 3600 * 1000 * 24);
  267. if (this.formData.trainingStartDateTime) {
  268. startDate = new Date(
  269. dayjs(this.formData.trainingStartDateTime).format("YYYY-MM-DD")
  270. );
  271. startDate.setTime(startDate.getTime() - 3600 * 1000 * 24);
  272. }
  273. return time.getTime() < new Date(startDate).getTime();
  274. },
  275. startDateChanged(time) {
  276. if (
  277. dayjs(this.formData.startTime).isAfter(dayjs(this.formData.endTime))
  278. ) {
  279. this.formData.endTime = this.formData.startTime;
  280. }
  281. },
  282. endDateChanged(time) {
  283. if (
  284. dayjs(this.formData.startTime).isAfter(dayjs(this.formData.endTime))
  285. ) {
  286. this.formData.startTime = this.formData.endTime;
  287. }
  288. },
  289. onHide() {
  290. this.isShow = false;
  291. this.formData = this.reset();
  292. this.$refs["upload"].clearFiles();
  293. },
  294. onHideUser() {
  295. this.open = false;
  296. this.imageList = [];
  297. this.userInfo = this.resetUserInfo();
  298. },
  299. submitUser() {
  300. this.$refs["formUser"].validate((valid) => {
  301. if (valid) {
  302. this.open = false;
  303. console.log("================", this.userInfo);
  304. let userIndex = this.formData.userInfos.findIndex(x=>x.idCard==this.userInfo.idCard);
  305. if(userIndex>-1)
  306. {
  307. this.formData.userInfos.splice(userIndex, 1);
  308. }
  309. this.formData.userInfos.push(this.userInfo);
  310. this.userInfo = this.resetUserInfo();
  311. this.imageList = [];
  312. }
  313. });
  314. },
  315. submitForm() {
  316. this.$refs["form"].validate((valid) => {
  317. if (valid) {
  318. if (this.formData.userInfos.length <= 0) {
  319. this.$message.error("请添加人员");
  320. return;
  321. }
  322. console.log("================", this.formData);
  323. if (this.formData.id != null) {
  324. updateLetter(this.formData).then((response) => {
  325. this.$modal.msgSuccess("修改成功");
  326. this.isShow = false;
  327. this.formData = this.reset();
  328. this.$emit("success", this.formData);
  329. });
  330. } else {
  331. addLetter(this.formData).then((response) => {
  332. this.$modal.msgSuccess("新增成功");
  333. this.isShow = false;
  334. this.formData = this.reset();
  335. this.$emit("success", this.formData);
  336. });
  337. }
  338. }
  339. });
  340. },
  341. editUser(row) {
  342. this.open = true;
  343. this.userInfo = row;
  344. },
  345. remove(row) {
  346. console.log("================", row);
  347. this.formData.userInfos.splice(this.formData.userInfos.indexOf(row), 1);
  348. },
  349. },
  350. mounted() {},
  351. };
  352. </script>