前端转vue
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DepartLevelInfo.vue 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <template>
  2. <div>
  3. <pro-dialog :visible="$attrs.visible" @close="$emit('close:modal')" :title="title" width="70%" :closable="true"
  4. :destroyOnClose="true" :maskClosable="true">
  5. <template v-slot:footer="">
  6. <pro-button id="f3dd65a2-c52b-11ea-87c3-ff36a904ecf1" @click="$emit('close:modal')"
  7. :icon="h(CloseOutlined)">关闭</pro-button>
  8. <pro-button id="f3dd65a4-c52b-11ea-87c3-ff36a904ecf2" @click="save"
  9. :icon="h(SaveOutlined)">保存</pro-button>
  10. </template>
  11. <pro-form ref="formRef" :model="dialogData" :rules="formRules" label-width="120px">
  12. <pro-form-grid :header="{ title: '基本信息' }" colNum="4">
  13. <pro-input v-show="false" :formItemProps="{ label: 'no', prop: 'no' }" v-model:value="dialogData.no"
  14. placeholder="请输入" :allowClear="true">
  15. </pro-input>
  16. <pro-input :formItemProps="{ label: '层级编号:', prop: 'key' }" v-model:value="dialogData.key"
  17. placeholder="请输入" :allowClear="true">
  18. </pro-input>
  19. <pro-input :formItemProps="{ label: '层级名称:', prop: 'name' }" v-model:value="dialogData.name"
  20. placeholder="请输入" :allowClear="true">
  21. </pro-input>
  22. <pro-input :formItemProps="{ label: '用途:', prop: 'use' }" v-model:value="dialogData.use"
  23. placeholder="请输入" :allowClear="true">
  24. </pro-input>
  25. <pro-select :formItemProps="{ label: '启用标志', prop: 'use_yn' }" disabled="true"
  26. v-model:value="dialogData.use_yn" placeholder="请选择启用标志" :allowClear="true"
  27. tableName="com_usertype_info" colName="use_yn">
  28. </pro-select>
  29. </pro-form-grid>
  30. <pro-form-grid :header="{ title: '层级信息' }" colNum="3">
  31. <div>
  32. <pro-table ref="tableRef" :columns="columns" :dataSource="dialogData.departLevelInfoData">
  33. <template v-slot:header="">
  34. <pro-button id=" 4b7facf0-94a4-11ee-9af3-e137392c498c" text="增加一行"
  35. :icon="h(PlusOutlined)" icon="plus" type="primary" @click="addRows"
  36. style="margin-right: 10px;">增加一行</pro-button>
  37. <pro-button id=" 4b7facf0-94a4-11ee-9af3-e137392c498d" text="删除" :icon="h(PlusOutlined)"
  38. icon="plus" type="primary" @click="deleteRows2">删除</pro-button>
  39. </template>
  40. </pro-table>
  41. </div>
  42. </pro-form-grid>
  43. </pro-form>
  44. </pro-dialog>
  45. </div>
  46. </template>
  47. <script setup lang="jsx">
  48. import * as service from './services';
  49. import { ref, onUnmounted, computed, h, reactive, onMounted, watch } from 'vue';
  50. import { useStore } from 'vuex';
  51. import { CloseOutlined, SaveOutlined, DeleteOutlined, PlusOutlined } from "@ant-design/icons-vue";
  52. import { Modal, message } from "ant-design-vue";
  53. //const emit = defineEmits(['close:modal'])
  54. const emit = defineEmits(['addDataDemo']);
  55. const store = useStore();
  56. // 表单组件的引用
  57. const formRef = ref();
  58. const tableRef = ref();
  59. const title = computed(() => store.state.DepartLevel.dialogData.title);
  60. const dialogData = computed(() => store.state.DepartLevel.dialogData);
  61. const originalKeyValue = dialogData.value.key;
  62. // 表单验证规则
  63. const formRules = ref({
  64. key: [
  65. { required: true, trigger: 'blur' },
  66. {
  67. validator: async (rule, value, callback) => {
  68. try {
  69. if (originalKeyValue !== value) {
  70. const resp = await service.validateRecord({
  71. sql: `select * from Com_depart_level_info where key = ? `,
  72. param: value
  73. });
  74. if (resp === '0000') {
  75. console.log("wyq-------code2", resp);
  76. return Promise.resolve();
  77. } else {
  78. return Promise.reject(new Error('编号已存在'));
  79. }
  80. }
  81. } catch (error) {
  82. message.error('处理失败' + error);
  83. return Promise.reject(new Error('处理失败' + error));
  84. }
  85. },
  86. trigger: 'blur'
  87. }
  88. ],
  89. brf: [
  90. { required: true, trigger: 'blur' },
  91. // 其他校验规则
  92. ]
  93. });
  94. const columns = ref([
  95. {
  96. prop: "ActionColumn",
  97. label: "操作",
  98. width: "120px",
  99. align: "center",
  100. render: (scope) => {
  101. return <div>
  102. <pro-button id="deleteId" onClick={() => deleteRows(scope)} icon={h(DeleteOutlined)}>删除</pro-button>
  103. </div>
  104. }
  105. },
  106. {
  107. prop: "key", label: "层级编号", align: "center", width: "120px", editing: true,
  108. rules: [
  109. { required: true, message: '请输入层级编号', trigger: 'blur' },
  110. {
  111. validator: (rule, value, callback) => {
  112. if (!isNumber(value)) {
  113. return Promise.reject(new Error('层级编号请填写大于0的整数'));
  114. } else {
  115. return Promise.resolve();
  116. }
  117. }
  118. }
  119. ]
  120. },
  121. { prop: "name", label: "层级名称", align: "center", width: "120px", editing: true },
  122. {
  123. prop: "brf", label: "层级功能描述", align: "center", width: "240px", editing: true,
  124. rules: [
  125. { required: true, message: '请输入层级功能描述', trigger: 'blur' }
  126. ]
  127. },
  128. ]);
  129. function isNumber (value) {
  130. // 判断是否为数字、整数、大于0
  131. return /^\d+(\.\d+)?$/.test(value) && /^\d+$/.test(value) && value > 0;
  132. }
  133. function addRows () {
  134. store.dispatch("DepartLevel/addDepartLevelInfoData");
  135. }
  136. function deleteRows2 (scope) {
  137. console.log('wyq------deleteRows1', scope);
  138. console.log('wyq------deleteRows2', tableRef.value.getChecked());
  139. console.log('wyq------dialogData', dialogData.value.departLevelInfoData.records);
  140. dialogData.value.departLevelInfoData.records = dialogData.value.departLevelInfoData.records.filter(item => !tableRef.value.getChecked().includes(item));
  141. // tableRef.value.getChecked().forEach(item => {
  142. // console.log('wyq------deleteRows3', item.no);
  143. // dialogData.value.departLevelInfoData.records = dialogData.value.departLevelInfoData.records.filter(item1 => item1.no !== item.no);
  144. // });
  145. console.log('wyq------dialogData', dialogData.value.departLevelInfoData.records);
  146. }
  147. function deleteRows (scope) {
  148. Modal.confirm({
  149. title: '删除确认',
  150. content: '确认删除选中的记录',
  151. cancelText: '取消',
  152. onOk () {
  153. store.dispatch('DepartLevel/deleteDepartLevelInfoData', { ...scope });
  154. }
  155. });
  156. }
  157. function save () {
  158. console.log('wyqq------save', dialogData.value);
  159. console.log('wyq------调用addDataDemo11');
  160. emit('addDataDemo');
  161. //this.$emit('addDataDemo');
  162. // 表单校验成功
  163. formRef.value.getOrignRef().validate().then(() => {
  164. // 保存数据
  165. store.dispatch('DepartLevel/saveDepartLevelInfoData', {
  166. closeMethod: () => { emit("close:modal") }
  167. });
  168. }).catch((error) => {
  169. //console.log('error', error);
  170. //console.log('error', error.errorFields[0].errors[0]);
  171. message.error('提交失败:' + error.errorFields[0].errors[0]);
  172. });
  173. }
  174. </script>