AddAbility.vue 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <template>
  2. <div>
  3. <el-dialog v-model="dialogVisible" title="新增/编辑功能" width="30%" @close="handleClose">
  4. <el-form :model="abilityFrom" :rules="rules" label-width="150px">
  5. <el-form-item label="设计功能名称" prop="setAbName">
  6. <el-select @change="abNameChange" style="width: 350px;" v-model="abilityFrom.setAbName" filterable
  7. allow-create default-first-option :reserve-keyword="false" placeholder="选择或输入">
  8. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item" />
  9. </el-select>
  10. <p style="color: #2C5BE5;font-size: 16px;">新功能可直接输入但不能重复;已有功能可选择</p>
  11. </el-form-item>
  12. <el-form-item label="设计端子名称" prop="setSon">
  13. <el-input style="width: 350px;" v-model="abilityFrom.setSon"></el-input>
  14. </el-form-item>
  15. <el-form-item label="端子描述关键词" prop="setMemo">
  16. <el-input style="width: 350px;" v-model="abilityFrom.setMemo"></el-input>
  17. <p style="color: #2C5BE5;font-size: 16px;">关键词之间“|”表示或者,“&”表示并且</p>
  18. </el-form-item>
  19. </el-form>
  20. <template #footer>
  21. <span class="dialog-footer">
  22. <el-button @click="cancels">取消</el-button>
  23. <el-button type="primary" @click="sureClick">确定</el-button>
  24. </span>
  25. </template>
  26. </el-dialog>
  27. </div>
  28. </template>
  29. <script>
  30. import { ref, onMounted, watch, toRefs, reactive } from 'vue'
  31. import flow from '@/api/flow/flow'
  32. import { ElMessage } from 'element-plus'
  33. export default {
  34. props: {
  35. addModal: {
  36. type: Boolean,
  37. required: true,
  38. },
  39. tableData: {
  40. type: Array,
  41. required: true
  42. },
  43. modelIds: {
  44. type: String,
  45. required: true
  46. },//模型id
  47. iedTypes: {
  48. type: String,
  49. required: true
  50. },//iedtype
  51. copyReload: {
  52. type: Function,
  53. required: true
  54. },//刷新父组件属性方法
  55. editOrAdd: {
  56. type: Number,
  57. required: true,
  58. },//编辑或新增
  59. editRow: {
  60. type: Object,
  61. required: true
  62. },//表格整行数据结构id就为fcda_id
  63. },
  64. setup(props, { emit }) {
  65. let dialogVisible = ref(false)//模态框开关
  66. let abilityFrom = ref({
  67. setAbName: "",//设计功能名称
  68. setSon: "",//设计端子名称
  69. setMemo: "",//端子描述关键词
  70. })
  71. let options = ref([])//多选选项
  72. let fatherToSon = ref([])//AbilityModal.vue传过来的表格数据,制作为选项
  73. let needModel = ref('')//需要的模型id
  74. let needIedType = ref('')//需要的iedtype
  75. const rules = reactive({
  76. setAbName: [
  77. { required: true, message: '请选择设计功能名称', trigger: 'change' },
  78. ],
  79. setSon: [
  80. { required: true, message: '请输入设计端子名称', trigger: 'blur' },
  81. ],
  82. setMemo: [
  83. { required: true, message: '请输入端子描述关键词', trigger: 'blur' },
  84. ]
  85. })//表单验证
  86. let numState = ref(0)//0为新增,1为修改
  87. let needEditRow = ref({})//需要修改的整个对象属性
  88. let newAddId = ref("")//新增的id
  89. // 监听props.tabledata变化赋值
  90. watch(() => props.tableData, (newVal) => {
  91. fatherToSon.value = newVal
  92. })
  93. // 监听props.modelids变化并赋值
  94. watch(() => props.modelIds, (newVal) => {
  95. needModel.value = newVal
  96. }, { immediate: true })
  97. // 监听props.iedtypes变化并赋值
  98. watch(() => props.iedTypes, (newVal) => {
  99. needIedType.value = newVal
  100. })
  101. // 监听props.editrow变化并赋值
  102. watch(() => props.editRow, (newVal) => {
  103. needEditRow.value = newVal
  104. })
  105. // 初始化组件
  106. function reload() {
  107. dialogVisible.value = props.addModal//模态框状态
  108. fatherToSon.value = props.tableData//表格数据,制作为下拉菜单
  109. needModel.value = props.modelIds//模型id
  110. needIedType.value = props.iedTypes//iedtype
  111. numState.value = props.editOrAdd//判断修改还是新增,0新增,1修改
  112. needEditRow.value = props.editRow//赋值给本组件需要修改对象
  113. flow.getByModelAndIed({//给下拉菜单赋值
  114. model_id: needModel.value - 0,
  115. ied_type: needIedType.value
  116. }).then(res => {
  117. if (res.data !== null && res.data.length > 0) {
  118. options.value = res.data.map((item, index) => {
  119. return {
  120. label: item.func_name,
  121. id: item.id,
  122. value: item.func_name
  123. }
  124. })
  125. } else {
  126. options.value = []
  127. }
  128. })
  129. if (numState.value == 1) {
  130. abilityFrom.value.setAbName = needEditRow.value.func_name
  131. abilityFrom.value.setMemo = needEditRow.value.fcda_match_exp
  132. abilityFrom.value.setSon = needEditRow.value.fcda_name
  133. }
  134. }
  135. // 关闭模态框
  136. function closeModal() {
  137. dialogVisible.value = false
  138. emit("addAback", dialogVisible.value)
  139. }
  140. // 确认关闭模态框
  141. function sureClose() {
  142. if (numState.value == 0) {
  143. flow.saveModelAndIed({
  144. model_id: needModel.value - 0,
  145. ied_type: needIedType.value,
  146. func_id:newAddId?.value,
  147. func_name: abilityFrom.value?.setAbName,
  148. fcda_name: abilityFrom.value.setSon,
  149. fcda_match_exp: abilityFrom.value.setMemo,
  150. }).then(res => {
  151. if (res.code == 0) {
  152. dialogVisible.value = false
  153. emit("addAback", dialogVisible.value)
  154. ElMessage({
  155. type: "success",
  156. message: "添加成功",
  157. duration: 2000
  158. })
  159. props.copyReload()
  160. } else {
  161. ElMessage({
  162. message: res.msg,
  163. type: "error"
  164. })
  165. }
  166. })
  167. } else {
  168. flow.saveModelAndIed({
  169. model_id: needModel.value - 0,
  170. ied_type: needIedType.value,
  171. func_name: abilityFrom.value.setAbName,
  172. fcda_name: abilityFrom.value.setSon,
  173. fcda_match_exp: abilityFrom.value.setMemo,
  174. func_id: needEditRow.value.func_id - 0,
  175. fcda_id: needEditRow.value.id - 0,
  176. }).then(res => {
  177. if (res.code == 0) {
  178. dialogVisible.value = false
  179. emit("addAback", dialogVisible.value)
  180. ElMessage({
  181. type: "success",
  182. message: "修改成功",
  183. duration: 2000
  184. })
  185. props.copyReload()
  186. } else {
  187. ElMessage({
  188. message: res.msg,
  189. type: "error"
  190. })
  191. }
  192. })
  193. }
  194. }
  195. // 设计功能名称change事件
  196. function abNameChange(e) {
  197. if (e.label) {
  198. abilityFrom.value.setAbName = e.label
  199. newAddId.value = e.id
  200. } else {
  201. abilityFrom.value.setAbName = e
  202. console.log(e,'id');
  203. }
  204. }
  205. onMounted(() => {
  206. reload()
  207. setTimeout(() => {
  208. reload()
  209. }, 1500);
  210. })
  211. return {
  212. dialogVisible,//模态框开关
  213. reload,//初始化组件
  214. handleClose: closeModal,//关闭模态框
  215. cancels: closeModal,//关闭模态框
  216. sureClick: sureClose,// 确认关闭模态框
  217. abilityFrom,//表单项value
  218. options,//多选选项
  219. rules,//表单验证
  220. abNameChange,//设计功能名称change事件
  221. needModel,//需要的模型id
  222. needIedType,//需要的iedtype
  223. numState,//0为新增,1为修改
  224. needEditRow,//需要的整个对象属性
  225. newAddId,//新增的id
  226. }
  227. }
  228. }
  229. </script>
  230. <style scoped>
  231. p {
  232. margin: 0;
  233. padding: 0;
  234. }
  235. </style>