mainBodyTemplate.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908
  1. <template>
  2. <div class="main-body-template">
  3. <h2 class="title">发文通知稿纸</h2>
  4. <el-form :model="form" :rules="rules" ref="form" label-width="0">
  5. <table class="table-container" border="1" cellpadding="0" cellspacing="0">
  6. <!-- 第一行:发文名称 + 发文字号/申请编码 -->
  7. <tr>
  8. <td class="label required">发文名称</td>
  9. <td colspan="2">
  10. <el-form-item prop="documentName">
  11. <el-input v-model="form.documentName" :disabled="disabled" placeholder="请输入" />
  12. </el-form-item>
  13. </td>
  14. <td class="label required">发文字号</td>
  15. <td colspan="2">
  16. <el-form-item prop="documentNumber">
  17. <el-input v-model="form.documentNumber" :disabled="menu == 'template' || disabled" placeholder="自动填充">
  18. <!-- <template slot="append">
  19. <el-button :disabled="disabled" type="text" size="mini" class="code-btn" @click="getCodeOpen">申请编码</el-button>
  20. </template> -->
  21. </el-input>
  22. </el-form-item>
  23. </td>
  24. </tr>
  25. <!-- 第二行:发文机关 + 拟稿人 -->
  26. <tr>
  27. <td class="label required">发文机关</td>
  28. <td colspan="2">
  29. <el-form-item prop="issuingAuthority">
  30. <el-cascader
  31. :show-all-levels="false"
  32. class="ele-block"
  33. :disabled="disabled"
  34. :options="organizationList"
  35. placeholder="请选择部门"
  36. :props="defaultSingleProps"
  37. ref="deptRef"
  38. @change="handleIssuingAuthorityChange"
  39. v-model="form.issuingAuthority"
  40. clearable
  41. ></el-cascader>
  42. </el-form-item>
  43. <div class="hint-text">修改发文机关,将移除主送机关、抄送机关</div>
  44. <el-checkbox v-model="form.jointIssuance" :disabled="disabled">联合发文</el-checkbox>
  45. <el-cascader
  46. class="ele-block"
  47. :show-all-levels="false"
  48. v-if="form.jointIssuance"
  49. :disabled="disabled"
  50. :options="organizationList"
  51. placeholder="请选择联合发文部门"
  52. :props="defaultProps"
  53. v-model="form.jointIssuingAuthority"
  54. clearable
  55. ></el-cascader>
  56. </td>
  57. <td class="label required">拟稿人</td>
  58. <td colspan="2">
  59. <el-form-item prop="draftPersonId">
  60. <!-- <el-input v-model="form.draftPerson" placeholder="请输入">
  61. <template slot="append">
  62. <el-button type="text" icon="el-icon-user"></el-button>
  63. </template>
  64. </el-input> -->
  65. <personSelect
  66. ref="directorRef"
  67. :disabled="disabled"
  68. :init="false"
  69. v-model="form.draftPersonId"
  70. @selfChange="changeUserInfo"
  71. />
  72. </el-form-item>
  73. </td>
  74. </tr>
  75. <!-- 第三行:主送 + 抄送 -->
  76. <tr>
  77. <td class="label">主送</td>
  78. <td colspan="2">
  79. <el-form-item prop="mainRecipient">
  80. <!-- <el-select v-model="form.mainRecipient" placeholder="请选择" multiple style="width: 100%;">
  81. <el-option label="部门1" value="dept1" />
  82. <el-option label="部门2" value="dept2" />
  83. </el-select> -->
  84. <el-cascader
  85. class="ele-block"
  86. :disabled="disabled"
  87. :options="organizationList"
  88. placeholder="请选择部门"
  89. :props="defaultProps"
  90. :show-all-levels="false"
  91. v-model="form.mainRecipient"
  92. clearable
  93. ></el-cascader>
  94. </el-form-item>
  95. </td>
  96. <td class="label">抄送</td>
  97. <td colspan="2">
  98. <el-form-item prop="ccRecipient">
  99. <!-- <el-select v-model="form.ccRecipient" placeholder="请选择" multiple style="width: 100%;">
  100. <el-option label="部门1" value="dept1" />
  101. <el-option label="部门2" value="dept2" />
  102. </el-select> -->
  103. <el-cascader
  104. class="ele-block"
  105. :disabled="disabled"
  106. :options="organizationList"
  107. placeholder="请选择部门"
  108. :props="defaultProps"
  109. v-model="form.ccRecipient"
  110. :show-all-levels="false"
  111. clearable
  112. ></el-cascader>
  113. </el-form-item>
  114. </td>
  115. </tr>
  116. <!-- 第四行:发文单位意见 -->
  117. <tr>
  118. <td class="label">发文单位意见</td>
  119. <td colspan="4">
  120. <el-form-item prop="unitOpinion">
  121. <el-input v-model="form.unitOpinion" :disabled="disabled" placeholder="请输入" />
  122. </el-form-item>
  123. </td>
  124. </tr>
  125. <!-- 第五行:会办单位意见 + 核稿 -->
  126. <tr>
  127. <td class="label">会办单位意见</td>
  128. <td colspan="2">
  129. <el-form-item prop="coUnitOpinion">
  130. <el-input v-model="form.coUnitOpinion" :disabled="disabled" placeholder="请输入" />
  131. </el-form-item>
  132. </td>
  133. <td class="label">核稿</td>
  134. <td colspan="2">
  135. <el-form-item prop="reviewer">
  136. <el-input v-model="form.reviewer" :disabled="disabled" placeholder="请输入" />
  137. </el-form-item>
  138. </td>
  139. </tr>
  140. <!-- 第六行:主题词 -->
  141. <tr>
  142. <td class="label">主题词</td>
  143. <td colspan="4">
  144. <el-form-item prop="keywords">
  145. <el-input v-model="form.keywords" :disabled="disabled" placeholder="请输入,多个主题词,用英文逗号隔开" />
  146. </el-form-item>
  147. </td>
  148. </tr>
  149. <!-- 第七行:领导批示 -->
  150. <tr>
  151. <td class="label">领导批示</td>
  152. <td colspan="4">
  153. <el-form-item prop="leaderInstruction">
  154. <el-input v-model="form.leaderInstruction" :disabled="disabled" placeholder="请输入" />
  155. </el-form-item>
  156. </td>
  157. </tr>
  158. <!-- 第八行:秘密等级 + 紧急程度 -->
  159. <tr>
  160. <td class="label required">秘密等级</td>
  161. <td colspan="2">
  162. <el-form-item prop="secretLevel">
  163. <el-select v-model="form.secretLevel" :disabled="disabled" placeholder="请选择" style="width: 100%;">
  164. <el-option label="普通" value="1" />
  165. <el-option label="秘密" value="2" />
  166. <el-option label="机密" value="3" />
  167. <el-option label="绝密" value="4" />
  168. </el-select>
  169. </el-form-item>
  170. </td>
  171. <td class="label required">紧急程度</td>
  172. <td colspan="2">
  173. <el-form-item prop="urgencyLevel">
  174. <el-select v-model="form.urgencyLevel" :disabled="disabled" placeholder="请选择" style="width: 100%;">
  175. <el-option label="普通" value="1" />
  176. <el-option label="紧急" value="2" />
  177. <el-option label="特急" value="3" />
  178. </el-select>
  179. </el-form-item>
  180. </td>
  181. </tr>
  182. <!-- 第九行:保密期限 + 打印份数 -->
  183. <tr>
  184. <td class="label">保密期限</td>
  185. <td colspan="2">
  186. <div class="input-with-unit">
  187. <el-form-item prop="secretPeriod" style="flex: 1;">
  188. <el-input v-model="form.secretPeriod" :disabled="disabled" placeholder="请输入" />
  189. </el-form-item>
  190. <el-select v-model="form.secretPeriodUnit" :disabled="disabled" style="width: 60px;">
  191. <el-option label="年" value="年" />
  192. <el-option label="月" value="月" />
  193. <el-option label="日" value="日" />
  194. </el-select>
  195. </div>
  196. </td>
  197. <td class="label">打印份数</td>
  198. <td colspan="2">
  199. <el-form-item prop="printCopies">
  200. <el-input v-model="form.printCopies" :disabled="disabled" placeholder="请输入" type="number" />
  201. </el-form-item>
  202. </td>
  203. </tr>
  204. <!-- 第十行:印发机关 + 印发日期 -->
  205. <tr>
  206. <td class="label required">印发机关</td>
  207. <td colspan="2">
  208. <el-form-item prop="printingAuthority">
  209. <el-cascader
  210. class="ele-block"
  211. :disabled="disabled"
  212. :options="organizationList"
  213. placeholder="请选择部门"
  214. :props="defaultSingleProps"
  215. ref="printingDeptRef"
  216. :show-all-levels="false"
  217. v-model="form.printingAuthority"
  218. clearable
  219. ></el-cascader>
  220. </el-form-item>
  221. </td>
  222. <td class="label">印发日期</td>
  223. <td colspan="2">
  224. <el-form-item prop="printDate">
  225. <el-date-picker v-model="form.printDate" :disabled="disabled" type="date" placeholder="选择日期" style="width: 100%;" />
  226. </el-form-item>
  227. </td>
  228. </tr>
  229. <!-- 第十一行:说明 + 是否纳入督办 -->
  230. <tr>
  231. <td class="label">说明</td>
  232. <td colspan="2">
  233. <el-form-item prop="description">
  234. <el-input v-model="form.description" :disabled="disabled" placeholder="请输入" />
  235. </el-form-item>
  236. </td>
  237. <td class="label">是否纳入督办</td>
  238. <td colspan="2">
  239. <el-form-item prop="includeSupervision">
  240. <el-select v-model="form.includeSupervision" :disabled="disabled" placeholder="请选择" style="width: 100%;">
  241. <el-option label="是" value="1" />
  242. <el-option label="否" value="0" />
  243. </el-select>
  244. </el-form-item>
  245. </td>
  246. </tr>
  247. <!-- 第十二行:附件 -->
  248. <tr>
  249. <td class="label">附件</td>
  250. <td colspan="4">
  251. <el-form-item prop="attachments">
  252. <!-- <el-upload action="#" :auto-upload="false" :file-list="fileList">
  253. <i class="el-icon-upload"></i>
  254. <span class="upload-text">上传文件,请</span>
  255. <el-button type="text">点击上传</el-button>
  256. </el-upload> -->
  257. <fileMain :type="disabled ? 'view' : 'add'" v-model="form.attachments" @updateVal="getFiles"></fileMain>
  258. </el-form-item>
  259. </td>
  260. </tr>
  261. </table>
  262. </el-form>
  263. <getCode ref="getCode" @success="codeSuccess"></getCode>
  264. </div>
  265. </template>
  266. <script>
  267. import {
  268. listOrganizations,
  269. getUserPage
  270. } from '@/api/system/organization';
  271. import personSelect from "@/components/CommomSelect/person-select.vue";
  272. import getCode from "./getCode.vue";
  273. export default {
  274. name: 'MainBodyTemplate',
  275. components: {
  276. personSelect,
  277. getCode
  278. },
  279. props: {
  280. type: {
  281. type: String,
  282. default: 'add'
  283. },
  284. menu: {
  285. type: String,
  286. default: 'template'
  287. },
  288. },
  289. data() {
  290. return {
  291. form: {
  292. documentName: '',
  293. documentNumber: '',
  294. issuingAuthority: '',
  295. jointIssuance: false,
  296. jointIssuingAuthority: '',
  297. draftPersonId: '',
  298. draftPerson: '',
  299. mainRecipient: [],
  300. ccRecipient: [],
  301. unitOpinion: '',
  302. coUnitOpinion: '',
  303. reviewer: '',
  304. keywords: '',
  305. leaderInstruction: '',
  306. secretLevel: '',
  307. urgencyLevel: '',
  308. secretPeriod: '',
  309. secretPeriodUnit: '年',
  310. printCopies: '',
  311. printingAuthority: '',
  312. printDate: '',
  313. description: '',
  314. includeSupervision: '1',
  315. attachments: []
  316. },
  317. fileList: [],
  318. customFields: [],
  319. // 部门列表数据
  320. organizationList: [],
  321. // 人员列表数据
  322. userList: [],
  323. // 级联选择器配置
  324. defaultProps: {
  325. multiple: true,
  326. checkStrictly: true,
  327. emitPath: false,
  328. children: 'children',
  329. value: 'id',
  330. label: 'name'
  331. },
  332. defaultSingleProps: {
  333. checkStrictly: true,
  334. emitPath: false,
  335. children: 'children',
  336. value: 'id',
  337. label: 'name'
  338. },
  339. };
  340. },
  341. computed: {
  342. organization() {
  343. return this.setList(this.organizationList);
  344. },
  345. userInfo() {
  346. return this.$store.getters.user.info;
  347. },
  348. disabled() {
  349. return this.type == 'detail';
  350. },
  351. rules() {
  352. return {
  353. documentName: [
  354. { required: true, message: '请输入发文名称', trigger: 'blur' }
  355. ],
  356. documentNumber: [
  357. { required: this.menu != 'template', message: '请输入发文字号', trigger: 'blur' }
  358. ],
  359. issuingAuthority: [
  360. { required: true, message: '请选择发文机关', trigger: 'change' }
  361. ],
  362. secretLevel: [
  363. { required: true, message: '请选择秘密等级', trigger: 'change' }
  364. ],
  365. urgencyLevel: [
  366. { required: true, message: '请选择紧急程度', trigger: 'change' }
  367. ],
  368. printingAuthority: [
  369. { required: true, message: '请选择印发机关', trigger: 'change' }
  370. ]
  371. }
  372. },
  373. },
  374. created() {
  375. // let userInfo = this.$store.getters.user.info;
  376. console.log('userInfo:', this.userInfo);
  377. // 组件创建时获取部门列表
  378. this.getOrganizationList();
  379. if(this.type == 'add'){
  380. this.form.issuingAuthority = this.userInfo.groupId || '';
  381. this.$nextTick(() => {
  382. if(this.form.issuingAuthority && this.menu == 'template'){
  383. this.form.draftPersonId = this.userInfo.userId || '';
  384. this.handleIssuingAuthorityChange(this.form.issuingAuthority);
  385. }
  386. })
  387. }
  388. },
  389. methods: {
  390. setFiles(files) {
  391. console.log('setFiles~~~', files);
  392. this.form.attachments = files.map((i) => i.id);
  393. },
  394. getFiles() {
  395. console.log('getFiles~~~', this.form.attachments);
  396. const ids = JSON.parse(JSON.stringify(this.form.attachments)).join(',');
  397. this.$emit('sendFiles', ids);
  398. },
  399. getCodeOpen() {
  400. this.$refs.getCode.open('');
  401. },
  402. codeSuccess(data) {
  403. console.log('codeSuccess~~~', data);
  404. // this.code = code;
  405. this.$nextTick(() => {
  406. this.$set(this.form, 'documentNumber', data.code);
  407. });
  408. },
  409. //选择人员数据
  410. changeUserInfo(val, info) {
  411. this.form.draftPerson = info.name;
  412. },
  413. // 获取部门列表
  414. getOrganizationList() {
  415. listOrganizations()
  416. .then((list) => {
  417. let _list = list.filter((i) => i.name != '超级管理员');
  418. // 转换为树形结构
  419. this.organizationList = this.$util.toTreeData({
  420. data: _list,
  421. idField: 'id',
  422. parentIdField: 'parentId'
  423. });
  424. })
  425. .catch((e) => {
  426. console.error('获取部门列表失败:', e);
  427. this.$message.error('获取部门列表失败');
  428. });
  429. },
  430. // 获取人员数据
  431. getUserList(deptId) {
  432. // this.form.draftPerson = '';
  433. if (deptId) {
  434. this.$refs.directorRef.getList({ deptId });
  435. }
  436. },
  437. // 处理部门列表,设置禁用状态
  438. // setList(list) {
  439. // return list.map((val) => {
  440. // // val['disabled'] = val.id == this.form.groupId;
  441. // if (val.children) {
  442. // val.children = this.setList(val.children);
  443. // }
  444. // return val;
  445. // });
  446. // },
  447. // 部门选择变化处理
  448. handleIssuingAuthorityChange(value) {
  449. console.log('选择的部门:', value);
  450. // 印发机关默认为发文机关
  451. this.form.printingAuthority = value;
  452. // 清空主送机关、抄送机关
  453. this.form.mainRecipient = [];
  454. this.form.ccRecipient = [];
  455. // 调用获取人员列表方法
  456. this.getUserList(value);
  457. },
  458. generateCode() {
  459. this.$message.success('生成申请编码');
  460. },
  461. submitForm() {
  462. this.$refs.form.validate(valid => {
  463. if (valid) {
  464. // 生成自定义字段数据
  465. const customFields = this.generateCustomFields();
  466. console.log('自定义字段数据:', customFields);
  467. // 可以在这里调用API将customFields传到后台
  468. this.customFields = customFields;
  469. this.$message.success('提交成功');
  470. } else {
  471. this.$message.error('请完善必填项');
  472. return false;
  473. }
  474. });
  475. },
  476. // 设置编辑数据,将后台返回的自定义字段数据映射到表单
  477. setData(customFields) {
  478. if (!customFields || !Array.isArray(customFields) || customFields.length === 0) {
  479. console.warn('自定义字段数据为空');
  480. return;
  481. }
  482. // 遍历自定义字段数据,映射到表单
  483. customFields.forEach(field => {
  484. const { fieldKey, defaultValue } = field;
  485. // 根据字段类型处理数据
  486. if (field.fieldType === 'multipleCascader') {
  487. // 多选级联选择器处理,恢复成数组
  488. if (typeof defaultValue === 'string' && defaultValue) {
  489. console.log('多选级联选择器值:~~', fieldKey, typeof defaultValue, defaultValue);
  490. this.form[fieldKey] = defaultValue.split(',');
  491. } else if (Array.isArray(defaultValue)) {
  492. this.form[fieldKey] = defaultValue;
  493. } else {
  494. this.form[fieldKey] = [];
  495. }
  496. } else if (field.fieldType === 'cascader') {
  497. // 单选级联选择器处理,保持原值
  498. this.form[fieldKey] = defaultValue || '';
  499. } else if (field.fieldType === 'file') {
  500. // 文件处理,恢复成数组
  501. if (typeof defaultValue === 'string' && defaultValue) {
  502. this.form[fieldKey] = defaultValue.split(',');
  503. } else if (Array.isArray(defaultValue)) {
  504. this.form[fieldKey] = defaultValue;
  505. } else {
  506. this.form[fieldKey] = [];
  507. }
  508. } else if (field.fieldType === 'personSelect') {
  509. // 人员选择器处理
  510. this.form[fieldKey] = defaultValue;
  511. // 如果有draftPersonId字段,也设置
  512. if (this.form.draftPersonId) {
  513. this.$nextTick(() => {
  514. if (this.$refs.directorRef) {
  515. this.$refs.directorRef.getList({ deptId: this.form.issuingAuthority });
  516. }
  517. });
  518. }
  519. } else if (field.fieldType === 'date') {
  520. // 日期处理
  521. this.form[fieldKey] = defaultValue ? new Date(defaultValue) : '';
  522. } else if (field.fieldType === 'number') {
  523. // 数字处理
  524. this.form[fieldKey] = defaultValue ? String(defaultValue) : '';
  525. } else if (field.fieldType === 'select') {
  526. // 下拉选择处理
  527. this.form[fieldKey] = defaultValue !== undefined && defaultValue !== null ? String(defaultValue) : '';
  528. } else {
  529. // 其他字段直接赋值
  530. this.form[fieldKey] = defaultValue;
  531. }
  532. });
  533. console.log('表单数据已设置:', this.form);
  534. // 特殊处理:如果设置了发文机关,需要获取对应的人员列表
  535. if (this.form.issuingAuthority) {
  536. this.$nextTick(() => {
  537. // this.handleIssuingAuthorityChange(this.form.issuingAuthority);
  538. this.getUserList(this.form.issuingAuthority);
  539. });
  540. }
  541. },
  542. // 生成自定义字段数据
  543. generateCustomFields() {
  544. const fieldConfig = [
  545. {
  546. fieldKey: 'documentName',
  547. fieldName: '发文名称',
  548. fieldType: 'input',
  549. isRequired: 1,
  550. placeholder: '请输入',
  551. defaultValue: '',
  552. sortOrder: 1
  553. },
  554. {
  555. fieldKey: 'documentNumber',
  556. fieldName: '发文字号',
  557. fieldType: 'input',
  558. isRequired: 1,
  559. placeholder: '申请编码后自动填充',
  560. defaultValue: '',
  561. sortOrder: 2
  562. },
  563. {
  564. fieldKey: 'issuingAuthority',
  565. fieldName: '发文机关',
  566. fieldType: 'cascader',
  567. isRequired: 1,
  568. placeholder: '请选择部门',
  569. defaultValue: '',
  570. sortOrder: 3
  571. },
  572. {
  573. fieldKey: 'jointIssuance',
  574. fieldName: '联合发文',
  575. fieldType: 'checkbox',
  576. isRequired: 0,
  577. placeholder: '',
  578. defaultValue: false,
  579. sortOrder: 4
  580. },
  581. {
  582. fieldKey: 'jointIssuingAuthority',
  583. fieldName: '联合部门',
  584. fieldType: 'multipleCascader',
  585. isRequired: 0,
  586. placeholder: '请选择联合发文部门',
  587. defaultValue: [],
  588. sortOrder: 5
  589. },
  590. {
  591. fieldKey: 'draftPersonId',
  592. fieldName: '拟稿人',
  593. fieldType: 'personSelect',
  594. isRequired: 1,
  595. placeholder: '请选择',
  596. defaultValue: '',
  597. sortOrder: 6
  598. },
  599. {
  600. fieldKey: 'mainRecipient',
  601. fieldName: '主送',
  602. fieldType: 'multipleCascader',
  603. isRequired: 0,
  604. placeholder: '请选择部门',
  605. defaultValue: '',
  606. sortOrder: 7
  607. },
  608. {
  609. fieldKey: 'ccRecipient',
  610. fieldName: '抄送',
  611. fieldType: 'multipleCascader',
  612. isRequired: 0,
  613. placeholder: '请选择部门',
  614. defaultValue: '',
  615. sortOrder: 8
  616. },
  617. {
  618. fieldKey: 'unitOpinion',
  619. fieldName: '发文单位意见',
  620. fieldType: 'textarea',
  621. isRequired: 0,
  622. placeholder: '请输入',
  623. defaultValue: '',
  624. sortOrder: 9
  625. },
  626. {
  627. fieldKey: 'coUnitOpinion',
  628. fieldName: '会办单位意见',
  629. fieldType: 'input',
  630. isRequired: 0,
  631. placeholder: '请输入',
  632. defaultValue: '',
  633. sortOrder: 10
  634. },
  635. {
  636. fieldKey: 'reviewer',
  637. fieldName: '核稿',
  638. fieldType: 'input',
  639. isRequired: 0,
  640. placeholder: '请输入',
  641. defaultValue: '',
  642. sortOrder: 11
  643. },
  644. {
  645. fieldKey: 'keywords',
  646. fieldName: '主题词',
  647. fieldType: 'input',
  648. isRequired: 0,
  649. placeholder: '请输入,多个主题词,用英文逗号隔开',
  650. defaultValue: '',
  651. sortOrder: 12
  652. },
  653. {
  654. fieldKey: 'leaderInstruction',
  655. fieldName: '领导批示',
  656. fieldType: 'textarea',
  657. isRequired: 0,
  658. placeholder: '请输入',
  659. defaultValue: '',
  660. sortOrder: 13
  661. },
  662. {
  663. fieldKey: 'secretLevel',
  664. fieldName: '秘密等级',
  665. fieldType: 'select',
  666. isRequired: 1,
  667. placeholder: '请选择',
  668. defaultValue: '',
  669. sortOrder: 14
  670. },
  671. {
  672. fieldKey: 'urgencyLevel',
  673. fieldName: '紧急程度',
  674. fieldType: 'select',
  675. isRequired: 1,
  676. placeholder: '请选择',
  677. defaultValue: '',
  678. sortOrder: 15
  679. },
  680. {
  681. fieldKey: 'secretPeriod',
  682. fieldName: '保密期限',
  683. fieldType: 'input',
  684. isRequired: 0,
  685. placeholder: '请输入',
  686. defaultValue: '',
  687. sortOrder: 16
  688. },
  689. {
  690. fieldKey: 'secretPeriodUnit',
  691. fieldName: '保密期限单位',
  692. fieldType: 'select',
  693. isRequired: 0,
  694. placeholder: '请选择',
  695. defaultValue: '年',
  696. sortOrder: 17
  697. },
  698. {
  699. fieldKey: 'printCopies',
  700. fieldName: '打印份数',
  701. fieldType: 'number',
  702. isRequired: 0,
  703. placeholder: '请输入',
  704. defaultValue: '',
  705. sortOrder: 18
  706. },
  707. {
  708. fieldKey: 'printingAuthority',
  709. fieldName: '印发机关',
  710. fieldType: 'select',
  711. isRequired: 1,
  712. placeholder: '请选择',
  713. defaultValue: '',
  714. sortOrder: 19
  715. },
  716. {
  717. fieldKey: 'printDate',
  718. fieldName: '印发日期',
  719. fieldType: 'date',
  720. isRequired: 0,
  721. placeholder: '选择日期',
  722. defaultValue: '',
  723. sortOrder: 20
  724. },
  725. {
  726. fieldKey: 'description',
  727. fieldName: '说明',
  728. fieldType: 'input',
  729. isRequired: 0,
  730. placeholder: '请输入',
  731. defaultValue: '',
  732. sortOrder: 21
  733. },
  734. {
  735. fieldKey: 'includeSupervision',
  736. fieldName: '是否纳入督办',
  737. fieldType: 'select',
  738. isRequired: 0,
  739. placeholder: '请选择',
  740. defaultValue: 1,
  741. sortOrder: 22
  742. },
  743. {
  744. fieldKey: 'attachments',
  745. fieldName: '附件',
  746. fieldType: 'file',
  747. isRequired: 0,
  748. placeholder: '',
  749. defaultValue: [],
  750. sortOrder: 23
  751. }
  752. ];
  753. // 将表单数据映射到字段配置
  754. return fieldConfig.map(field => {
  755. let value = this.form[field.fieldKey];
  756. console.log('value~~~', value);
  757. // 判断多选组件的defaultValue是否为数组,如果是数组的话格式化为逗号分开的字符串
  758. if (field.fieldType === 'cascader' && Array.isArray(value)) {
  759. value = value.join(',');
  760. } else if (field.fieldType === 'file' && Array.isArray(value)) {
  761. value = value.join(',');
  762. }
  763. return {
  764. fieldKey: field.fieldKey,
  765. fieldName: field.fieldName,
  766. fieldType: field.fieldType,
  767. isRequired: field.isRequired,
  768. placeholder: field.placeholder,
  769. defaultValue: value,
  770. sortOrder: field.sortOrder
  771. };
  772. });
  773. },
  774. resetForm() {
  775. this.$refs.form.resetFields();
  776. this.fileList = [];
  777. }
  778. }
  779. };
  780. </script>
  781. <style scoped lang="scss">
  782. .main-body-template {
  783. padding: 20px;
  784. background-color: #fff;
  785. }
  786. .title {
  787. text-align: center;
  788. color: #ff0000;
  789. font-size: 20px;
  790. font-weight: bold;
  791. margin-bottom: 20px;
  792. }
  793. .table-container {
  794. width: 100%;
  795. border-collapse: collapse;
  796. border: 1px solid #ff0000;
  797. td {
  798. border: 1px solid #ff0000;
  799. padding: 8px 12px;
  800. vertical-align: middle;
  801. font-size: 14px;
  802. }
  803. .label {
  804. color: #ff0000;
  805. font-weight: normal;
  806. width: 150px;
  807. text-align: left;
  808. background-color: #fff;
  809. &.required::after {
  810. content: '*';
  811. color: #ff0000;
  812. margin-left: 4px;
  813. }
  814. }
  815. .code-cell {
  816. display: flex;
  817. align-items: center;
  818. justify-content: space-between;
  819. .code-text {
  820. color: #606266;
  821. font-size: 12px;
  822. }
  823. .code-btn {
  824. padding: 0;
  825. font-size: 12px;
  826. }
  827. }
  828. .code-display {
  829. color: #606266;
  830. font-size: 12px;
  831. margin-right: 8px;
  832. }
  833. .hint-text {
  834. color: #ff0000;
  835. font-size: 12px;
  836. line-height: 1.4;
  837. margin-top: 4px;
  838. }
  839. .input-with-unit {
  840. display: flex;
  841. align-items: center;
  842. gap: 8px;
  843. }
  844. .upload-text {
  845. color: #909399;
  846. margin-left: 4px;
  847. }
  848. }
  849. .form-actions {
  850. text-align: center;
  851. margin-top: 20px;
  852. .el-button {
  853. margin: 0 10px;
  854. }
  855. }
  856. ::v-deep .el-form-item {
  857. margin-bottom: 0;
  858. }
  859. ::v-deep .el-input__inner,
  860. ::v-deep .el-textarea__inner {
  861. border: 1px solid #dcdfe6;
  862. &:focus {
  863. border-color: #409eff;
  864. }
  865. }
  866. ::v-deep .el-checkbox__label {
  867. color: #606266;
  868. }
  869. </style>