index.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. <template>
  2. <div>
  3. <PageMain class="vh100">
  4. <ElForm :inline="false" :model="formInline" class="demo-form-inline" label-width="100px">
  5. <ElRow :gutter="20">
  6. <ElCol :md="6">
  7. <ElFormItem label="特约名称">
  8. <el-input v-model="formInline.companyName" placeholder="输入保险公司查找" clearable class="el-inputs" />
  9. </ElFormItem>
  10. </ElCol>
  11. <ElCol :md="6">
  12. <ElFormItem label="特约内容">
  13. <el-input v-model="formInline.companyName" placeholder="输入保险公司查找" clearable class="el-inputs" />
  14. </ElFormItem>
  15. </ElCol>
  16. <ElCol :md="1">
  17. <el-button type="primary" @click="findpage">查询</el-button>
  18. </ElCol>
  19. </ElRow>
  20. </ElForm>
  21. <ElDivider border-style="dashed"></ElDivider>
  22. <Table :tableData="tableData" :columns="columns" :showIndex="false" :columnwidth="200" :showSelect="false"
  23. :pageInfo="pageInfo" @getList="getList">
  24. <template v-slot:table-title-btn>
  25. <el-button type="primary" @click="companyAdd">
  26. 添加特约
  27. <template #icon>
  28. <el-icon>
  29. <Plus />
  30. </el-icon>
  31. </template>
  32. </el-button>
  33. </template>
  34. <template v-slot:operation="scope">
  35. <el-button type="primary" link @click="paymentEdit(scope.operationData.id)"> 编辑
  36. </el-button>
  37. <el-button type="primary" link @click="paymentDel(scope.operationData.id)"> 删除
  38. </el-button>
  39. </template>
  40. <template v-slot:search="scope">
  41. {{ scope.slotData.label }}
  42. </template>
  43. </Table>
  44. </PageMain>
  45. <el-dialog v-model="paynemtAdddialogVisible" :title="dialogTitle" width="40%" @close="close">
  46. <ElRow :gutter="20">
  47. <el-form :model="paymentform" :inline="true" label-width="120px" :rules="memberformRules" label-position="top"
  48. ref="paymentFormRef" style="width: 100%;" :size="fromSize">
  49. <ElCol :md="24" :lg="12">
  50. <el-form-item label="保险公司" prop="companyId">
  51. <el-select v-model="paymentform.companyId" @change="companyIdChange" placeholder="请选择"
  52. style="width: 100%;">
  53. <el-option :label="item.name" :value="item.id" v-for="(item, index) in companyList" :key="index" />
  54. </el-select>
  55. </el-form-item>
  56. </ElCol>
  57. <ElCol :md="24" :lg="12">
  58. <el-form-item label="简称" prop="companyName">
  59. <el-input v-model="paymentform.companyName" placeholder="请输入姓名" disabled />
  60. </el-form-item>
  61. </ElCol>
  62. <ElCol :md="24" :lg="12">
  63. <el-form-item label="二维码类型" prop="type">
  64. <el-select v-model="paymentform.type" placeholder="请选择" style="width: 100%;">
  65. <el-option v-for="(item, index) in getDict('qr_barcode')" :label="item.label" :value="item.value"
  66. :key="index" />
  67. </el-select>
  68. </el-form-item>
  69. </ElCol>
  70. <ElCol :md="24" :lg="12">
  71. <el-form-item label="请求类型" prop="apiType">
  72. <el-select v-model="paymentform.apiType" placeholder="请选择" style="width: 100%;">
  73. <el-option v-for="(item, index) in getDict('api_type')" :label="item.label" :value="item.value"
  74. :key="index" />
  75. </el-select>
  76. </el-form-item>
  77. </ElCol>
  78. </el-form>
  79. </ElRow>
  80. <template #footer>
  81. <div class="dialog-footer">
  82. <el-button @click="paynemtAdddialogVisible = false">取消</el-button>
  83. <el-button type="primary" @click="MemberAdd(paymentFormRef)">
  84. 保存
  85. </el-button>
  86. </div>
  87. </template>
  88. </el-dialog>
  89. </div>
  90. </template>
  91. <script lang="ts" setup>
  92. import { ref, reactive } from 'vue'
  93. import api from '@/api';
  94. import { ElMessage, ElMessageBox } from 'element-plus'
  95. import { FormRules, FormInstance, ComponentSize } from 'element-plus';
  96. import { loadDicts, getDict } from '@/utils/composables/dictService';
  97. interface PageInfo {
  98. pageNum: number;
  99. pageSize: number;
  100. sizes: number[];
  101. total: number;
  102. }
  103. interface paymentform {
  104. id?: string,
  105. companyId: string,
  106. companyName: string,
  107. type: string,
  108. apiType: string,
  109. companyCode: string,
  110. }
  111. const tableData = ref([]);//列表数据
  112. const paymentFormRef = ref<FormInstance>()
  113. const fromSize = ref<ComponentSize>('large')//表单大小
  114. const paynemtAdddialogVisible = ref(false)//弹窗
  115. const dialogTitle = ref('支付码配置')//弹窗title
  116. const dialogType = ref('add')//弹窗title
  117. const companyList = ref();
  118. const paymentform = reactive<paymentform>({
  119. id: "",
  120. companyId: "",
  121. companyName: "",
  122. type: "",
  123. apiType: "",
  124. companyCode: "",
  125. })
  126. const memberformRules = ref<FormRules>({
  127. companyId: [
  128. { required: true, trigger: 'change', message: '请选择保险公司' },
  129. ],
  130. type: [
  131. { required: true, trigger: 'change', message: '请选择二维码类型' },
  132. ],
  133. apiType: [
  134. { required: true, trigger: 'change', message: '请选择请求类型' },
  135. ],
  136. });
  137. //分页
  138. const pageInfo = ref({
  139. pageNum: 1,
  140. pageSize: 20,
  141. sizes: [10, 20, 30, 40, 50],
  142. total: 0,
  143. });
  144. //检索条件
  145. const formInline = reactive({
  146. companyName: '',//保险公司name
  147. })
  148. onMounted(() => {
  149. findpage();
  150. companyQuery();//获取保险公司
  151. loadDicts(['qr_barcode', 'api_type']);//获取多个字典
  152. });
  153. function findpage() {
  154. api.company.QRcodePage({ pages: pageInfo.value.pageNum, size: pageInfo.value.pageSize, ...formInline }).then((res: any) => {
  155. if (res.code == 200) {
  156. tableData.value = res.data.records;
  157. pageInfo.value.pageNum = res.data.current;
  158. pageInfo.value.pageSize = res.data.size;
  159. pageInfo.value.total = res.data.total;
  160. }
  161. })
  162. }
  163. const columns = [
  164. { prop: "companyName", label: "特约名称", align: 'left' },
  165. { prop: "companyCode", label: "编码", width: '220' },
  166. {
  167. prop: "type", label: "特别约定内容", width: '280', formatter: (row: any) => {
  168. let type = row.type;
  169. let name = getDict('qr_barcode').find(val => val.value == type).label;
  170. return name;
  171. }
  172. },
  173. ];
  174. function getList(item: PageInfo) {
  175. pageInfo.value.pageNum = item.pageNum;
  176. pageInfo.value.pageSize = item.pageSize;
  177. findpage();
  178. };
  179. const companyIdChange = (value: string) => {
  180. let Info = companyList.value.find((val: any) => val.id == value);
  181. paymentform.companyName = Info.name;
  182. paymentform.companyCode = Info.companyCode;
  183. }
  184. //获取保险公司列表
  185. const companyQuery = () => {
  186. api.company.selectLevelList({ name: "" }).then((res: any) => {
  187. if (res.code == '200') {
  188. companyList.value = res.data;
  189. }
  190. });
  191. }
  192. const companyAdd = () => {
  193. dialogTitle.value = '支付码配置';
  194. dialogType.value = 'add';
  195. paynemtAdddialogVisible.value = true
  196. }
  197. const MemberAdd = async (formEl: FormInstance | undefined) => {
  198. if (!formEl) return
  199. await formEl.validate((valid) => {
  200. if (valid) {
  201. if (dialogType.value == 'add') {
  202. api.company.QRBarcodeAdd({ ...paymentform }).then((res: any) => {
  203. if (res.code == '200') {
  204. ElMessage({
  205. type: 'success',
  206. message: res.msg,
  207. plain: true,
  208. })
  209. paynemtAdddialogVisible.value = false;
  210. findpage();
  211. } else {
  212. }
  213. });
  214. } else {
  215. api.company.QRBarcodeUpdate({ ...paymentform }).then((res: any) => {
  216. if (res.code == '200') {
  217. ElMessage({
  218. type: 'success',
  219. message: res.msg,
  220. plain: true,
  221. })
  222. paynemtAdddialogVisible.value = false;
  223. findpage();
  224. } else {
  225. }
  226. });
  227. }
  228. } else {
  229. ElMessage({
  230. type: 'error',
  231. message: '信息不完整',
  232. plain: true,
  233. })
  234. }
  235. })
  236. }
  237. // 编辑
  238. const paymentEdit = (id: string) => {
  239. dialogTitle.value = '支付码编辑';
  240. dialogType.value = 'edit';
  241. api.company.QRcodeById(id).then((res: any) => {
  242. if (res.code == '200') {
  243. Object.keys(paymentform).forEach((key) => {
  244. if (res.data.hasOwnProperty(key)) {
  245. paymentform[key as keyof typeof paymentform] = res.data[key as keyof typeof paymentform];
  246. }
  247. });
  248. paynemtAdddialogVisible.value = true;
  249. } else {
  250. }
  251. });
  252. }
  253. // 删除
  254. const paymentDel = (id: string) => {
  255. ElMessageBox.confirm(
  256. '确定删除吗?',
  257. '删除二维码配置',
  258. {
  259. confirmButtonText: '确定删除',
  260. type: 'error',
  261. center: true,
  262. confirmButtonClass: 'el-button--danger',
  263. }
  264. )
  265. .then(() => {
  266. api.company.QRcodeDel(id).then((res: any) => {
  267. if (res.code == '200') {
  268. ElMessage({
  269. type: 'success',
  270. message: res.msg,
  271. plain: true,
  272. })
  273. findpage();
  274. } else {
  275. }
  276. });
  277. })
  278. .catch(() => {
  279. })
  280. }
  281. const close = () => {
  282. paymentform.companyId = "";
  283. paymentform.companyName = "";
  284. paymentform.type = "";
  285. paymentform.apiType = "";
  286. }
  287. </script>
  288. <style lang="scss" scoped>
  289. :deep(.el-divider--horizontal) {
  290. margin: 8px 0 24px;
  291. color: #f2f2f2;
  292. }
  293. .el-inputs {
  294. width: 100% !important;
  295. }
  296. </style>