index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <el-button icon="el-icon-plus" plain @click="handleAddOrEdit('','add')">添加模板</el-button>
  5. <div class="content-box">
  6. <el-empty style="width: 100%;" :image-size="200" v-if="!Object.keys(templateList).length"
  7. description="暂无模板,快去新建吧"></el-empty>
  8. <div v-for="category in Object.keys(templateList)" :key="category" class="category_box">
  9. <div class="category_box_title">{{ getDictV('collaborative_type', category) }}</div>
  10. <div v-for="v in templateList[category]" :key="v.id" class="category_content"
  11. @mouseenter.self="()=>showEdit=v.id" @mouseleave.s.self="()=>showEdit=''">
  12. <div style="display: flex;align-items: center">
  13. <!-- <span :class="v.icon" style="transform: scale(1.5);margin-right: 2px">-->
  14. <!-- </span>-->
  15. <svg-icon
  16. style="margin-right: 5px"
  17. :icon-class="v.icon"
  18. className="svg-icon-set"
  19. ></svg-icon>
  20. <span>
  21. {{ v.name }}
  22. </span>
  23. </div>
  24. <span>
  25. <span v-if="v?.dataScope?.length" style="maxWidth: 200px;display: inline-block">
  26. {{ getDataScopeName(v.dataScope) }}
  27. </span>
  28. <span v-else style="maxWidth: 200px;display: inline-block">
  29. {{ '全公司可见' }}
  30. </span>
  31. <span v-if="showEdit==v.id">
  32. <el-button size="mini" type="text" @click="handleEditDataScope(v)">修改</el-button>
  33. </span>
  34. </span>
  35. <span>
  36. <el-button size="mini" style="color: #0C4C7F" v-if="!v.status" type="text" @click="handleAddOrEdit(v,'edit')">编辑</el-button>
  37. <el-button size="mini" type="text" @click="handleAddOrEdit(v,'copy')">复制</el-button>
  38. <el-button size="mini" type="text" v-if="!v.status" style="color: red" @click="handleDel(v)">删除</el-button>
  39. <el-button size="mini" type="text" v-if="v.status" style="color: red" @click="handleStatus(v,0)">停用</el-button>
  40. <el-button size="mini" type="text" v-if="!v.status" style="color: #58e805" @click="handleStatus(v,1)">启用</el-button>
  41. <!-- <el-dropdown size="mini" trigger="click" style="cursor: pointer"-->
  42. <!-- @command="(command)=>handleCommand(command,v)">-->
  43. <!-- <span style="color: #0C4C7F;font-size: 12px" class="el-dropdown-link">-->
  44. <!-- 更多-->
  45. <!-- </span>-->
  46. <!-- <el-dropdown-menu slot="dropdown">-->
  47. <!-- <el-dropdown-item v-if="v.status" style="color: red" command="stop">停用</el-dropdown-item>-->
  48. <!-- <el-dropdown-item v-if="!v.status" style="color: #58e805" command="start">启用</el-dropdown-item>-->
  49. <!--&lt;!&ndash; <el-dropdown-item command="copy" style="color: #0e85fa">复制</el-dropdown-item>&ndash;&gt;-->
  50. <!--&lt;!&ndash; <el-dropdown-item command="del" style="color: red">删除</el-dropdown-item>&ndash;&gt;-->
  51. <!-- </el-dropdown-menu>-->
  52. <!-- </el-dropdown>-->
  53. </span>
  54. </div>
  55. </div>
  56. </div>
  57. <addOrEditDialog :addOrEditDialogFlag.sync="addOrEditDialogFlag" ref="dialogRef" v-if="addOrEditDialogFlag"
  58. @reload="getTemplateList"></addOrEditDialog>
  59. <visibility-range-dialog :visibilityRangeDialogFlag.sync="visibilityRangeDialogFlag"
  60. v-if="visibilityRangeDialogFlag"
  61. @reload="getTemplateList"
  62. ref="visibilityRangeDialogRef"></visibility-range-dialog>
  63. </el-card>
  64. </div>
  65. </template>
  66. <script>
  67. import addOrEditDialog from "./addOrEditDialog.vue";
  68. import {bpmCustomFormDelete, bpmCustomFormUpdate, getBpmCustomFormPage} from "@/api/bpm/task";
  69. import formGenerator from "@/components/FormGenerator/index.vue";
  70. import visibilityRangeDialog from "@/views/bpm/formConfig/visibilityRangeDialog.vue";
  71. import {getByCode} from "@/api/system/dictionary-data";
  72. export default {
  73. components: {
  74. formGenerator,
  75. addOrEditDialog,
  76. visibilityRangeDialog
  77. },
  78. name: "index",
  79. data() {
  80. return {
  81. addOrEditDialogFlag: false,
  82. visibilityRangeDialogFlag: false,
  83. showEdit: false,
  84. templateList: {},
  85. list: {},
  86. dictList: {}
  87. }
  88. },
  89. created() {
  90. this.getDictList('collaborative_type')
  91. this.getTemplateList()
  92. },
  93. computed: {
  94. getDataScopeName() {
  95. return (dataScope) => {
  96. return dataScope.map(item => item.name).join(',')
  97. }
  98. }
  99. },
  100. methods: {
  101. getDictV(code, val) {
  102. if (!this.dictList[code]) return '';
  103. return this.dictList[code].find(item => item.value == val)?.label
  104. },
  105. async getDictList(code) {
  106. let {data: res} = await getByCode(code)
  107. this.dictList[code] = res.map(item => {
  108. let values = Object.keys(item)
  109. return {
  110. value: values[0],
  111. label: item[values[0]]
  112. }
  113. })
  114. },
  115. handleAddOrEdit(row = {}, type) {
  116. this.addOrEditDialogFlag = true
  117. this.$nextTick(() => {
  118. this.$refs.dialogRef.init(row, type)
  119. })
  120. },
  121. async getTemplateList() {
  122. let params = {
  123. pageNum: 1,
  124. size: 9999,
  125. }
  126. const {list} = await getBpmCustomFormPage(params)
  127. this.list = list
  128. this.templateList = _.groupBy(list, 'dictType');
  129. },
  130. handleCommand(command, v) {
  131. switch (command) {
  132. case 'start':
  133. this.handleStart(v, 1);
  134. break
  135. case 'stop':
  136. this.handleStatus(v, 0)
  137. break
  138. case 'del':
  139. this.handleDel(v);
  140. break
  141. case 'copy':
  142. this.handleAddOrEdit(v, command);
  143. break
  144. }
  145. },
  146. async handleDel(v) {
  147. this.$confirm('确定删除该模板?', '提示', {
  148. confirmButtonText: '确定',
  149. cancelButtonText: '取消',
  150. type: 'warning'
  151. })
  152. .then(async () => {
  153. await bpmCustomFormDelete([v.id])
  154. let findIndex = this.templateList[v.dictType].findIndex(i => i.id == v.id)
  155. this.templateList[v.dictType].splice(findIndex, 1)
  156. this.$message.success('操作成功')
  157. }).catch(()=>{
  158. this.$message.info('11111')
  159. })
  160. },
  161. handleEditDataScope(v) {
  162. this.visibilityRangeDialogFlag = true
  163. this.$nextTick(() => {
  164. this.$refs.visibilityRangeDialogRef.init(v)
  165. })
  166. },
  167. handleStatus(v,status) {
  168. let msg = status?'启用':'停用'
  169. this.$confirm(`是否${msg}此模板?`, '提示', {
  170. type: 'warning'
  171. }).then(async ()=>{
  172. v.status = status
  173. await bpmCustomFormUpdate(v)
  174. this.$message(`${msg}成功`)
  175. }).catch(e=>{
  176. console.log(e);
  177. })
  178. }
  179. }
  180. }
  181. </script>
  182. <style scoped lang="scss">
  183. .ele-body {
  184. padding: 15px 20% !important;
  185. }
  186. .content-box {
  187. display: flex;
  188. flex-direction: row;
  189. flex-wrap: wrap;
  190. justify-content: space-between;
  191. .category_box {
  192. border: 1px solid #e1e1e1;
  193. border-radius: 5px;
  194. width: 100%;
  195. margin-top: 15px;
  196. .category_box_title {
  197. font-size: 14px;
  198. font-weight: bold;
  199. color: #616161;
  200. height: 40px;
  201. display: flex;
  202. padding: 5px 20px;
  203. align-items: center;
  204. background: rgb(247, 247, 248);
  205. }
  206. .category_content {
  207. height: 40px;
  208. display: flex;
  209. align-items: center;
  210. padding: 5px 20px;
  211. justify-content: space-between;
  212. }
  213. .category_content:hover {
  214. background-color: rgba(135, 181, 243, 0.29);
  215. }
  216. }
  217. }
  218. ::v-deep .el-card__body {
  219. padding: 10px 5%;
  220. height: 85vh;
  221. }
  222. </style>