dialog.des.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <template>
  2. <div class="rule-type">
  3. <DialogCom
  4. :title="id ? '安全责任书存档记录详情' : '新增安全责任书存档记录'"
  5. :visible.sync="isShow"
  6. @close="onHide"
  7. width="1200px"
  8. >
  9. <div class="page-body">
  10. <el-form
  11. :model="formData"
  12. :rules="formDataRules"
  13. size="small"
  14. ref="form"
  15. label-position="right"
  16. label-width="180px"
  17. label-prefix=":"
  18. >
  19. <el-descriptions
  20. class="margin-top"
  21. :column="1"
  22. size="medium"
  23. border
  24. :label-style="labelStyle"
  25. :contentStyle="content_style"
  26. >
  27. <el-descriptions-item
  28. labelClassName="gx_info_label"
  29. label="签署层级"
  30. >
  31. {{ getLabel(dict.type.sign_level, formData.signLevel) }}
  32. </el-descriptions-item>
  33. <el-descriptions-item
  34. labelClassName="gx_info_label"
  35. label="签署责任书类型"
  36. >
  37. {{ getLabel(dict.type.safety_book_type, formData.type) }}
  38. </el-descriptions-item>
  39. <el-descriptions-item
  40. labelClassName="gx_info_label"
  41. label="所属年度"
  42. >
  43. {{ formData.year }}
  44. </el-descriptions-item>
  45. <!-- <el-form-item prop="orgName" label="签署人所在机构:" >
  46. <el-input
  47. :readonly="true"
  48. v-model="formData.orgName"
  49. :disabled="true"
  50. ></el-input>
  51. </el-form-item> -->
  52. <el-descriptions-item labelClassName="gx_info_label" label="甲方姓名">
  53. {{ formData.partyA }}
  54. </el-descriptions-item>
  55. <el-descriptions-item
  56. labelClassName="gx_info_label"
  57. label="甲方机构"
  58. v-if="formData.type == 1 || formData.type == 3"
  59. >
  60. {{ formData.partyAOrgName }}
  61. </el-descriptions-item>
  62. <el-descriptions-item
  63. labelClassName="gx_info_label"
  64. label="甲方机构"
  65. v-if="formData.type == 2"
  66. >
  67. <!-- <tree-select
  68. :disabled="true"
  69. v-model="formData.partyAOrg"
  70. :options="deptOptions"
  71. :show-count="true"
  72. :normalizer="tenantIdnormalizer"
  73. :props="{ checkStrictly: true, label: 'shortName' }"
  74. placeholder="请选择乙方所属机构"
  75. /> -->
  76. {{ formData.partyAOrgName }}
  77. </el-descriptions-item>
  78. <el-descriptions-item labelClassName="gx_info_label" label="乙方姓名">
  79. {{ formData.partyB }}
  80. </el-descriptions-item>
  81. <el-descriptions-item
  82. labelClassName="gx_info_label"
  83. label="乙方机构"
  84. v-if="formData.type == 1 || formData.type == 3"
  85. >
  86. <!-- <tree-select
  87. :disabled="true"
  88. v-model="formData.partyBOrg"
  89. :options="deptOptions"
  90. :show-count="true"
  91. :normalizer="tenantIdnormalizer"
  92. :props="{ checkStrictly: true, label: 'shortName' }"
  93. placeholder="请选择乙方所属机构"
  94. /> -->
  95. {{ formData.partyBOrgName }}
  96. </el-descriptions-item>
  97. <el-descriptions-item
  98. labelClassName="gx_info_label"
  99. label="乙方机构"
  100. v-if="formData.type == 2"
  101. >
  102. {{ formData.partyBOrgName }}
  103. </el-descriptions-item>
  104. <el-descriptions-item
  105. labelClassName="gx_info_label"
  106. label="签署时间"
  107. >
  108. {{
  109. formData.time
  110. ? dayjs(formData.time).format("YYYY年MM月DD日")
  111. : ""
  112. }}
  113. </el-descriptions-item>
  114. <el-descriptions-item
  115. labelClassName="gx_info_label"
  116. label="签署文件"
  117. >
  118. <div
  119. v-for="(file, index) in formData.files"
  120. :key="index"
  121. class="container"
  122. >
  123. <el-image
  124. class="item"
  125. v-if="isPic(file.url)"
  126. :src="file.url"
  127. :preview-src-list="[file.url]"
  128. fit="contain"
  129. ></el-image>
  130. <div v-else="isPic(file.url)">
  131. <el-link :href="file.url" :underline="false" target="_blank">
  132. <span class="el-icon-document"> {{ file.name }} </span>
  133. </el-link>
  134. </div>
  135. </div>
  136. </el-descriptions-item>
  137. </el-descriptions>
  138. </el-form>
  139. </div>
  140. <div slot="footer" class="dialog-footer" style="margin-top: 10px">
  141. <el-button @click="isShow = false">确定</el-button>
  142. <!-- <el-button type="primary" @click="onSubmit">确定</el-button> -->
  143. </div>
  144. </DialogCom>
  145. <!-- <DialogSelect ref="DialogSelect" @success="getSign"></DialogSelect> -->
  146. </div>
  147. </template>
  148. <script>
  149. import { mapState, mapMutations } from "vuex";
  150. import { getLabel } from "@/views/commonOption.js";
  151. import {
  152. listSafetyBook,
  153. getSafetyBook,
  154. editOrAdd,
  155. delSafetyBook,
  156. } from "@/api/safetyBookNew/index";
  157. import { deptTreeSelect } from "@/api/system/public";
  158. // import DialogSelect from "./dialog.sign";
  159. import dayjs from "dayjs";
  160. export default {
  161. dicts: ["safety_book_type", "sign_level"],
  162. data() {
  163. return {
  164. labelStyle: {
  165. color: "#000",
  166. "text-align": "center",
  167. height: "40px",
  168. "min-width": "150px",
  169. "word-break": "keep-all",
  170. },
  171. content_style: {
  172. "text-align": "left",
  173. "min-width": "150px",
  174. "word-break": "break-all",
  175. },
  176. id: null,
  177. isShow: false,
  178. timeClearable: true,
  179. formData: this.reset(),
  180. tableData: [],
  181. //修改新增中的机构树
  182. deptOptions: [],
  183. formDataRules: {
  184. orgId: [{ required: true, message: "请选择签署责任人所在机构" }],
  185. type: [{ required: true, message: "请选择签署责任书类型" }],
  186. year: [{ required: true, message: "请选择所属年度" }],
  187. },
  188. };
  189. },
  190. watch: {},
  191. computed: {
  192. ...mapState([]),
  193. },
  194. methods: {
  195. isPic(url) {
  196. if (url.endsWith("jpg") || url.endsWith("png")) {
  197. return true;
  198. }
  199. return false;
  200. },
  201. getLabel,
  202. ...mapMutations([]),
  203. dayjs,
  204. //添加签署后回调
  205. // getSign(data) {
  206. // this.tableData.push(data);
  207. // // console.log(data, "ddd");
  208. // },
  209. //新增签署
  210. openSelect() {
  211. // this.$refs.DialogSelect.show();
  212. },
  213. /** 查询机构树数据 */
  214. getDeptTree() {
  215. deptTreeSelect().then((response) => {
  216. this.deptOptions = response.data;
  217. });
  218. },
  219. /** treeSelect组件自定义数据*/
  220. tenantIdnormalizer(node, instanceId) {
  221. if (node.children && !node.children.length) {
  222. delete node.children;
  223. }
  224. return {
  225. id: node.id,
  226. label: node.shortName,
  227. children: node.children,
  228. };
  229. },
  230. removeRow(row) {
  231. this.tableData = this.tableData.filter((item) => item !== row);
  232. },
  233. reset() {
  234. return {
  235. id: null,
  236. type: null,
  237. year: null,
  238. };
  239. },
  240. async refresh(id) {
  241. if (id != null && id != undefined) {
  242. await getSafetyBook(id).then((res) => {
  243. // console.log(res.data,"res")
  244. this.formData = res.data;
  245. this.tableData = res.data.bookUsers;
  246. });
  247. }
  248. },
  249. async show(id) {
  250. // console.log(id, "id");
  251. this.getDeptTree();
  252. this.formData = this.reset();
  253. this.tableData = [];
  254. this.id = id;
  255. await this.refresh(id);
  256. this.isShow = true;
  257. },
  258. // 事件
  259. onHide() {
  260. this.formData = this.reset();
  261. this.$refs.form.resetFields();
  262. },
  263. onSubmit() {
  264. console.log(this.formData, "this.formData");
  265. this.$refs.form.validate(async (isValidate) => {
  266. if (!isValidate) return;
  267. this.formData.bookUsers = this.tableData;
  268. await editOrAdd(this.formData);
  269. this.$emit("success");
  270. this.isShow = false;
  271. });
  272. },
  273. // 事件
  274. //apimark//
  275. },
  276. mounted() {},
  277. components: {},
  278. };
  279. </script>
  280. <style lang="scss" scoped>
  281. .brand_info {
  282. .el-form {
  283. width: 600px;
  284. padding-top: 40px;
  285. }
  286. }
  287. .container {
  288. width: 50px;
  289. height: 50px;
  290. float: left;
  291. .item {
  292. width: 100%;
  293. height: 100%;
  294. }
  295. .item img {
  296. width: 100% !important;
  297. object-fit: cover !important;
  298. }
  299. }
  300. </style>