Approve.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. <template>
  2. <div class="list-wrap">
  3. <div
  4. class="list-item"
  5. v-for="(item, index) in formArray"
  6. :key="index + new Date().getTime()"
  7. >
  8. <k-form-build
  9. :dynamicData="item.template.dfFormSql || {}"
  10. :defaultValue="item.template.defaultValue || {}"
  11. class="formBuild"
  12. :ref="item.tableName"
  13. :value="item.template.dfVueTemplate"
  14. />
  15. <el-divider></el-divider>
  16. </div>
  17. <!-- <div class="log-list"></div> -->
  18. <el-descriptions
  19. v-for="(item, index) in nodeLogList"
  20. :key="index"
  21. :title="item.taskNodeName"
  22. >
  23. <el-descriptions-item label="审批人">{{
  24. item.createBy
  25. }}</el-descriptions-item>
  26. <el-descriptions-item label="审批结果">{{
  27. statusObj[item.taskNodeOtherState]
  28. }}</el-descriptions-item>
  29. <el-descriptions-item label="审批意见">{{
  30. item.taskRemark || "无"
  31. }}</el-descriptions-item>
  32. </el-descriptions>
  33. <el-divider></el-divider>
  34. <el-form
  35. :model="form"
  36. ref="form"
  37. :rules="rules"
  38. label-width="80px"
  39. :inline="false"
  40. size="normal"
  41. >
  42. <el-form-item prop="approvalStatus" label="审批:">
  43. <el-select
  44. v-model="form.approvalStatus"
  45. placeholder="请选择审批结果"
  46. clearable
  47. filterable
  48. >
  49. <el-option
  50. v-for="item in statusOptions"
  51. :key="item.value"
  52. :label="item.label"
  53. :value="item.value"
  54. >
  55. </el-option>
  56. </el-select>
  57. </el-form-item>
  58. <el-form-item label="审批意见:" size="normal">
  59. <el-input
  60. type="textarea"
  61. :rows="3"
  62. v-model="form.approvalRemark"
  63. placeholder="请输入"
  64. :maxlength="-1"
  65. :show-word-limit="false"
  66. :autosize="{ minRows: 2, maxRows: 4 }"
  67. >
  68. </el-input>
  69. </el-form-item>
  70. <!-- <el-form-item>
  71. <el-button type="primary" @click="onSubmit">立即创建</el-button>
  72. <el-button>取消</el-button>
  73. </el-form-item> -->
  74. </el-form>
  75. </div>
  76. </template>
  77. <script>
  78. // import formList from "@/assets/js/formArray";
  79. import { camelCase, toUnderline } from "@/utils/index";
  80. import { disableFormItem } from "@/utils/kFormDesign";
  81. import { uuid as uuidv4 } from "uuid";
  82. export default {
  83. name: "Approve",
  84. props: {
  85. formList: {
  86. type: Array,
  87. default: () => {
  88. return [];
  89. },
  90. },
  91. nodeLogList: {
  92. type: Array,
  93. default: () => {
  94. return [];
  95. },
  96. },
  97. },
  98. components: {},
  99. data() {
  100. return {
  101. // formList: [
  102. // {
  103. // formJson: formList,
  104. // },
  105. // ],
  106. formArray: [],
  107. form: {
  108. approvalStatus: "", //审批结果
  109. approvalRemark: "", //审批备注
  110. },
  111. statusOptions: [
  112. {
  113. value: "pass",
  114. label: "通过",
  115. },
  116. {
  117. value: "noPass",
  118. label: "不通过",
  119. },
  120. {
  121. value: "reject",
  122. label: "驳回",
  123. },
  124. ],
  125. statusObj: {
  126. pass: "通过",
  127. noPass: "不通过",
  128. reject: "驳回",
  129. },
  130. rules: {
  131. approvalStatus: [
  132. {
  133. required: true,
  134. message: "请选择审批结果",
  135. trigger: "change",
  136. },
  137. ],
  138. approvalRemark: [
  139. {
  140. required: true,
  141. message: "请输入审批备注",
  142. trigger: "blur",
  143. },
  144. ],
  145. },
  146. defaultValue: {}, //表单默认值
  147. defaultValueObj: {},
  148. };
  149. },
  150. computed: {
  151. myFormList() {
  152. return this.formList;
  153. // return this.disableHandler(this.formList);
  154. // this.formList.forEach((item) => {
  155. // item.template.dfFormSql = JSON.parse(item.template.dfFormSql);
  156. // item.template.dfVueTemplate = JSON.parse(item.template.dfVueTemplate);
  157. // });
  158. // return this.formList;
  159. },
  160. },
  161. watch: {
  162. myFormList: {
  163. handler(val) {
  164. // this.$emit("update:formList", val);
  165. this.formArray = this.disableHandler(val);
  166. this.$nextTick(() => {
  167. this.setDefaultValue();
  168. });
  169. // console.log(this.formArray);
  170. },
  171. deep: true,
  172. immediate: true,
  173. },
  174. },
  175. methods: {
  176. // 延迟
  177. sleep(ms) {
  178. var unixtime_ms = new Date().getTime();
  179. while (new Date().getTime() < unixtime_ms + ms) {}
  180. return "";
  181. },
  182. setDefaultValue() {
  183. console.log("this.defaultValueObj", this.defaultValueObj);
  184. for (const key in this.defaultValueObj) {
  185. // console.log(this.$refs[key], key);
  186. this.$refs[key][0]?.setData(this.defaultValueObj[key]);
  187. }
  188. },
  189. getUUID() {
  190. return uuidv4();
  191. },
  192. /**
  193. *
  194. * @param {array} formList 表单列表
  195. * @return {array} 处理后的表单列表-添加disable属性
  196. */
  197. disableHandler(formList) {
  198. // console.log(formList);
  199. this.resetForm();
  200. this.defaultValueObj = {};
  201. if (formList.length == 0) return [];
  202. formList.forEach((item) => {
  203. item.template.dfFormSql =
  204. typeof item.template.dfFormSql == "object"
  205. ? item.template.dfFormSql
  206. : JSON.parse(item.template.dfFormSql);
  207. item.template.dfVueTemplate = disableFormItem(
  208. typeof item.template.dfVueTemplate == "object"
  209. ? item.template.dfVueTemplate
  210. : JSON.parse(item.template.dfVueTemplate)
  211. );
  212. if (item.template.resultMap) {
  213. if (item.template.resultMap[0]?.batch) {
  214. item.template.defaultValue = item.template.resultMap[0];
  215. } else {
  216. item.template.defaultValue = item.template.resultMap[0]?.resultMap
  217. ? item.template.resultMap[0].resultMap
  218. : {};
  219. }
  220. }
  221. for (const key of Object.keys(item.template?.defaultValue || {})) {
  222. item.template.defaultValue[toUnderline(key)] =
  223. item.template.defaultValue[key];
  224. }
  225. let tableName = (this.defaultValueObj[item.tableName] =
  226. item.template.defaultValue);
  227. // this.$nextTick(() => {
  228. // Object.assign(this.defaultValue, item.template.defaultValue);
  229. // });
  230. // item.formInfo.jsonData = disableFormItem(item.formInfo.jsonData);
  231. });
  232. return formList;
  233. },
  234. // 获取表单信息
  235. getformInfo() {
  236. let res = {
  237. flag: false,
  238. };
  239. return new Promise((resolve) => {
  240. this.$refs.form.validate((valid) => {
  241. if (valid) {
  242. // alert('submit!');
  243. res.flag = true;
  244. res.data = this.form;
  245. // console.log(res);
  246. // return res;
  247. resolve(res);
  248. } else {
  249. resolve(res);
  250. }
  251. });
  252. });
  253. },
  254. // 重置审批表单
  255. resetForm() {
  256. Object.assign(this.form, {
  257. approvalStatus: "",
  258. approvalRemark: "",
  259. });
  260. },
  261. },
  262. mounted() {},
  263. };
  264. </script>
  265. <style scoped lang="scss">
  266. // .list-wrap {
  267. // display: flex;
  268. // flex-direction: column;
  269. // .list-item {
  270. // margin-top: 10px;
  271. // &::after {
  272. // content: "";
  273. // display: block;
  274. // border: 1px dashed #41baeb; /* 设置虚线样式 */
  275. // }
  276. // &:last-child::after {
  277. // display: none;
  278. // }
  279. // }
  280. // }
  281. </style>