index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. <template>
  2. <div class="app-container">
  3. <!-- 搜索工作栏 -->
  4. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  5. <el-form-item label="表单名" prop="name">
  6. <el-input v-model="queryParams.name" placeholder="请输入表单名" clearable size="small" @keyup.enter.native="handleQuery"/>
  7. </el-form-item>
  8. <el-form-item>
  9. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  10. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  11. </el-form-item>
  12. </el-form>
  13. <!-- 操作工具栏 -->
  14. <el-row :gutter="10" class="mb8">
  15. <el-col :span="1.5">
  16. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
  17. v-hasPermi="['bpm:form:create']">新增</el-button>
  18. </el-col>
  19. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  20. </el-row>
  21. <!-- 列表 -->
  22. <el-table v-loading="loading" :data="list">
  23. <el-table-column label="编号" align="center" prop="id" />
  24. <el-table-column label="表单名" align="center" prop="name" />
  25. <el-table-column label="开启状态" align="center" prop="status">
  26. <template slot-scope="scope">
  27. <span>{{ getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, scope.row.status) }}</span>
  28. </template>
  29. </el-table-column>
  30. <el-table-column label="备注" align="center" prop="remark" />
  31. <el-table-column label="创建时间" align="center" prop="createTime" width="180">
  32. <template slot-scope="scope">
  33. <span>{{ parseTime(scope.row.createTime) }}</span>
  34. </template>
  35. </el-table-column>
  36. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  37. <template slot-scope="scope">
  38. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleDetail(scope.row)"
  39. v-hasPermi="['bpm:form:query']">详情</el-button>
  40. <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
  41. v-hasPermi="['bpm:form:update']">修改</el-button>
  42. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
  43. v-hasPermi="['bpm:form:delete']">删除</el-button>
  44. </template>
  45. </el-table-column>
  46. </el-table>
  47. <!-- 分页组件 -->
  48. <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
  49. @pagination="getList"/>
  50. <!--表单配置详情-->
  51. <el-dialog title="表单详情" :visible.sync="detailOpen" width="50%" append-to-body>
  52. <div class="test-form">
  53. <parser :key="new Date().getTime()" :form-conf="detailForm" />
  54. </div>
  55. </el-dialog>
  56. </div>
  57. </template>
  58. <script>
  59. import {deleteForm, getForm, getFormPage} from "@/api/bpm/form";
  60. import Parser from '@/components/parser/Parser'
  61. export default {
  62. name: "Form",
  63. components: {
  64. Parser
  65. },
  66. data() {
  67. return {
  68. // 遮罩层
  69. loading: true,
  70. // 显示搜索条件
  71. showSearch: true,
  72. // 总条数
  73. total: 0,
  74. // 工作流的列表
  75. list: [],
  76. // 查询参数
  77. queryParams: {
  78. pageNo: 1,
  79. pageSize: 10,
  80. name: null,
  81. },
  82. // 表单详情
  83. detailOpen: false,
  84. detailForm: {}
  85. };
  86. },
  87. created() {
  88. this.getList();
  89. },
  90. methods: {
  91. /** 查询列表 */
  92. getList() {
  93. this.loading = true;
  94. // 处理查询参数
  95. let params = {...this.queryParams};
  96. // 执行查询
  97. getFormPage(params).then(response => {
  98. this.list = response.data.list;
  99. this.total = response.data.total;
  100. this.loading = false;
  101. });
  102. },
  103. /** 搜索按钮操作 */
  104. handleQuery() {
  105. this.queryParams.pageNo = 1;
  106. this.getList();
  107. },
  108. /** 重置按钮操作 */
  109. resetQuery() {
  110. this.resetForm("queryForm");
  111. this.handleQuery();
  112. },
  113. /** 详情按钮操作 */
  114. handleDetail(row) {
  115. this.detailOpen = true
  116. getForm(row.id).then(response => {
  117. const data = response.data
  118. this.detailForm = {
  119. ...JSON.parse(data.conf),
  120. fields: this.decodeFields(data.fields)
  121. }
  122. // console.log({
  123. // ...JSON.parse(data.conf),
  124. // fields: this.decodeFields(data.fields)
  125. // })
  126. // this.detailForm = {
  127. // fields: [
  128. // {
  129. // __config__: {
  130. // label: '单行文本',
  131. // labelWidth: null,
  132. // showLabel: true,
  133. // changeTag: true,
  134. // tag: 'el-input',
  135. // tagIcon: 'input',
  136. // required: true,
  137. // layout: 'colFormItem',
  138. // span: 24,
  139. // document: 'https://element.eleme.cn/#/zh-CN/component/input',
  140. // regList: [
  141. // {
  142. // pattern: '/^1(3|4|5|7|8|9)\\d{9}$/',
  143. // message: '手机号格式错误'
  144. // }
  145. // ]
  146. // },
  147. // __slot__: {
  148. // prepend: '',
  149. // append: ''
  150. // },
  151. // __vModel__: 'mobile',
  152. // placeholder: '请输入手机号',
  153. // style: {
  154. // width: '100%'
  155. // },
  156. // clearable: true,
  157. // 'prefix-icon': 'el-icon-mobile',
  158. // 'suffix-icon': '',
  159. // maxlength: 11,
  160. // 'show-word-limit': true,
  161. // readonly: false,
  162. // disabled: false
  163. // },
  164. // {
  165. // __config__: {
  166. // label: '日期范围',
  167. // tag: 'el-date-picker',
  168. // tagIcon: 'date-range',
  169. // defaultValue: null,
  170. // span: 24,
  171. // showLabel: true,
  172. // labelWidth: null,
  173. // required: true,
  174. // layout: 'colFormItem',
  175. // regList: [],
  176. // changeTag: true,
  177. // document:
  178. // 'https://element.eleme.cn/#/zh-CN/component/date-picker',
  179. // formId: 101,
  180. // renderKey: 1585980082729
  181. // },
  182. // style: {
  183. // width: '100%'
  184. // },
  185. // type: 'daterange',
  186. // 'range-separator': '至',
  187. // 'start-placeholder': '开始日期',
  188. // 'end-placeholder': '结束日期',
  189. // disabled: false,
  190. // clearable: true,
  191. // format: 'yyyy-MM-dd',
  192. // 'value-format': 'yyyy-MM-dd',
  193. // readonly: false,
  194. // __vModel__: 'field101'
  195. // },
  196. // {
  197. // __config__: {
  198. // layout: 'rowFormItem',
  199. // tagIcon: 'row',
  200. // label: '行容器',
  201. // layoutTree: true,
  202. // children: [
  203. // {
  204. // __config__: {
  205. // label: '评分',
  206. // tag: 'el-rate',
  207. // tagIcon: 'rate',
  208. // defaultValue: 0,
  209. // span: 24,
  210. // showLabel: true,
  211. // labelWidth: null,
  212. // layout: 'colFormItem',
  213. // required: true,
  214. // regList: [],
  215. // changeTag: true,
  216. // document: 'https://element.eleme.cn/#/zh-CN/component/rate',
  217. // formId: 102,
  218. // renderKey: 1586839671259
  219. // },
  220. // style: {},
  221. // max: 5,
  222. // 'allow-half': false,
  223. // 'show-text': false,
  224. // 'show-score': false,
  225. // disabled: false,
  226. // __vModel__: 'field102'
  227. // }
  228. // ],
  229. // document: 'https://element.eleme.cn/#/zh-CN/component/layout',
  230. // formId: 101,
  231. // span: 24,
  232. // renderKey: 1586839668999,
  233. // componentName: 'row101',
  234. // gutter: 15
  235. // },
  236. // type: 'default',
  237. // justify: 'start',
  238. // align: 'top'
  239. // },
  240. // {
  241. // __config__: {
  242. // label: '按钮',
  243. // showLabel: true,
  244. // changeTag: true,
  245. // labelWidth: null,
  246. // tag: 'el-button',
  247. // tagIcon: 'button',
  248. // span: 24,
  249. // layout: 'colFormItem',
  250. // document: 'https://element.eleme.cn/#/zh-CN/component/button',
  251. // renderKey: 1594288459289
  252. // },
  253. // __slot__: {
  254. // default: '测试按钮1'
  255. // },
  256. // type: 'primary',
  257. // icon: 'el-icon-search',
  258. // round: false,
  259. // size: 'medium',
  260. // plain: false,
  261. // circle: false,
  262. // disabled: false,
  263. // on: {
  264. // click: 'clickTestButton1'
  265. // }
  266. // }
  267. // ],
  268. // __methods__: {
  269. // clickTestButton1() {
  270. // console.log(
  271. // `%c【测试按钮1】点击事件里可以访问当前表单:
  272. // 1) formModel='formData', 所以this.formData可以拿到当前表单的model
  273. // 2) formRef='elForm', 所以this.$refs.elForm可以拿到当前表单的ref(vue组件)
  274. // `,
  275. // 'color:#409EFF;font-size: 15px'
  276. // )
  277. // console.log('表单的Model:', this.formData)
  278. // console.log('表单的ref:', this.$refs.elForm)
  279. // }
  280. // },
  281. // formRef: 'elForm',
  282. // formModel: 'formData',
  283. // size: 'small',
  284. // labelPosition: 'right',
  285. // labelWidth: 100,
  286. // formRules: 'rules',
  287. // gutter: 15,
  288. // disabled: false,
  289. // span: 24,
  290. // formBtns: true,
  291. // unFocusedComponentBorder: false
  292. // }
  293. });
  294. },
  295. decodeFields(fields) {
  296. const drawingList = []
  297. fields.forEach(item => {
  298. drawingList.push(JSON.parse(item))
  299. })
  300. return drawingList
  301. },
  302. /** 新增按钮操作 */
  303. handleAdd() {
  304. this.$router.push({
  305. path:"/bpm/manager/form/edit"
  306. });
  307. },
  308. /** 修改按钮操作 */
  309. handleUpdate(row) {
  310. this.$router.push({
  311. path:"/bpm/manager/form/edit",
  312. query:{
  313. formId: row.id
  314. }
  315. });
  316. },
  317. /** 删除按钮操作 */
  318. handleDelete(row) {
  319. const id = row.id;
  320. this.$confirm('是否确认删除工作流的编号为"' + id + '"的数据项?', "警告", {
  321. confirmButtonText: "确定",
  322. cancelButtonText: "取消",
  323. type: "warning"
  324. }).then(function() {
  325. return deleteForm(id);
  326. }).then(() => {
  327. this.getList();
  328. this.msgSuccess("删除成功");
  329. })
  330. }
  331. }
  332. };
  333. </script>