index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <script lang="ts">
  2. // 声明额外的选项
  3. export default {
  4. name: "Edit"
  5. };
  6. </script>
  7. <script setup lang="ts">
  8. import { inject, onMounted, reactive, ref, Uploadfile, UploadImg, Editor, useRenderIcon, ElMessage, ElMessageBox, Upload, Close, http, getGroupUrl, RegularVerification, verification } from "@/utils/importUsed"
  9. // 接口列表实例
  10. let UrlList = reactive(null)
  11. // 获取当前板块接口列表
  12. onMounted(async () => {
  13. UrlList = await getGroupUrl(["prizeSet"]);
  14. prizeObjQuery();
  15. })
  16. const props = defineProps<{
  17. editVisible: {
  18. type: Boolean;
  19. default: false;
  20. };
  21. width: {
  22. type: Number;
  23. default: 50;
  24. };
  25. formData: {
  26. id: any;
  27. type: any;
  28. default: {};
  29. };
  30. }>();
  31. // 表单数据
  32. const UpdateForm: any = ref({
  33. id: null, //ID
  34. kind: "", //奖励分类
  35. prizeName: "", //奖励名称
  36. prizeCode: "", //奖励代码
  37. prizePercent: "", //奖励比例
  38. prizeAmount: "", //奖励固定金额
  39. conditionMode: "", //条件模式
  40. recursionFlag: "", //是否递归
  41. prizeContent: "", //奖励内容
  42. requestParamField: "", //入参字段
  43. prizeSourceField: "", //奖励金额来源数据
  44. prizeSourceFieldType: "", //奖励金额来源数据类型
  45. prizeObj: null, //奖励发放对象
  46. queryTableIdList: "", //条件匹配列表
  47. repeatFlag: "", //重复发放
  48. });
  49. const prizeObjOptionList = ref([]);
  50. // 条件模式选项数据
  51. const conditionModeOptionList = [
  52. { id: 'all', label: '全部满足' },
  53. { id: 'one', label: '一个满足' },
  54. { id: 'two', label: '两个满足' },
  55. { id: 'three', label: '三个满足' },
  56. ]
  57. // 奖励内容选项数据
  58. const prizeContentOptionList = [
  59. { id: 'cash', label: '现金' },
  60. { id: 'recyc', label: '循环资格' },
  61. { id: 'coupon', label: '机具券' },
  62. { id: 'reserve', label: '额度' },
  63. ]
  64. // 奖励分类
  65. const kindOptionList = [
  66. { id: 'pos', label: '机具奖励' },
  67. { id: 'order', label: '订单奖励' },
  68. { id: 'reserve', label: '额度返还' },
  69. ]
  70. // 奖励金额来源数据类型
  71. const prizeSourceFieldTypeOptionList = [
  72. { id: 'condi', label: '条件返回字段' },
  73. { id: 'loop', label: '循环递归返回字段' },
  74. ]
  75. // 表单实例
  76. const ruleFormRef = ref()
  77. // 选项卡参数(默认值为列表某项的id)
  78. const activeId = ref('1')
  79. // 提交函数
  80. const submit = async (formEl) => {
  81. // 表单校验拦截
  82. if (!formEl) return
  83. await formEl.validate(async (valid, fields) => {
  84. if (valid) {
  85. //表单校验成功回调
  86. console.log('submit!')
  87. // 需动态生成接口
  88. const { status, msg }: any = await http.Request({
  89. method: UrlList.prizeSet.priupdatePriList.method,
  90. url: UrlList.prizeSet.priupdatePriList.url,
  91. params: UpdateForm.value
  92. });
  93. if (status === 1) {
  94. //业务成功回调
  95. ElMessage({
  96. message: "修改成功",
  97. type: "success"
  98. });
  99. UpdateForm.value = {
  100. id: null, //ID
  101. kind: "", //奖励分类
  102. prizeName: "", //奖励名称
  103. prizeCode: "", //奖励代码
  104. prizePercent: "", //奖励比例
  105. prizeAmount: "", //奖励固定金额
  106. conditionMode: "", //条件模式
  107. recursionFlag: "", //是否递归
  108. prizeContent: "", //奖励内容
  109. requestParamField: "", //入参字段
  110. prizeSourceField: "", //奖励金额来源数据
  111. prizeSourceFieldType: "", //奖励金额来源数据类型
  112. prizeObj: null, //奖励发放对象
  113. queryTableIdList: "", //条件匹配列表
  114. repeatFlag: "", //重复发放
  115. };
  116. // 关闭修改弹窗;
  117. closeUpdatePriListVisible();
  118. } else {
  119. //业务失败回调
  120. ElMessageBox.alert(msg, "提示", {
  121. confirmButtonText: "关闭",
  122. type: "warning"
  123. });
  124. }
  125. } else {
  126. //表单校验失败回调
  127. ElMessage({
  128. message: "请输入完整信息",
  129. type: "error"
  130. });
  131. }
  132. })
  133. };
  134. //获取奖励发放对象
  135. const prizeObjQuery = async () => {
  136. console.log(1);
  137. const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriPrizeObjectTableDic.method, url: UrlList.prizeSet.prigetPriPrizeObjectTableDic.url, params: {} });
  138. if (status === 1) {
  139. prizeObjOptionList.value = data.records;
  140. }
  141. };
  142. // 表单校验规则
  143. const rules = reactive({
  144. id: [
  145. { required: true, message: '请输入ID', trigger: 'blur' },
  146. ],
  147. prizeName: [
  148. { required: true, message: '请输入奖励名称', trigger: 'blur' },
  149. ],
  150. prizePercent: [
  151. { required: true, message: '请输入奖励比例', trigger: 'blur' },
  152. ],
  153. conditionMode: [
  154. { required: true, message: '请输入条件模式', trigger: 'blur' },
  155. ],
  156. })
  157. // 关闭弹窗回调函数
  158. const closeFn: any = inject('closeEditUpdatePriListVisible');
  159. const openVisible = async () => {
  160. //通过ID获取表格数据
  161. const { status, data }: any = await http.Request({ method: UrlList.prizeSet.prigetPriListQuery.method, url: UrlList.prizeSet.prigetPriListQuery.url, params: { id: props.formData.id } });
  162. if (status === 1) {
  163. UpdateForm.value = data;
  164. }
  165. };
  166. // 关闭弹窗回调函数
  167. const closeUpdatePriListVisible = () => {
  168. UpdateForm.value = {
  169. id: null, //ID
  170. kind: "", //奖励分类
  171. prizeName: "", //奖励名称
  172. prizeCode: "", //奖励代码
  173. prizePercent: "", //奖励比例
  174. prizeAmount: "", //奖励固定金额
  175. conditionMode: "", //条件模式
  176. recursionFlag: "", //是否递归
  177. prizeContent: "", //奖励内容
  178. requestParamField: "", //入参字段
  179. prizeSourceField: "", //奖励金额来源数据
  180. prizeSourceFieldType: "", //奖励金额来源数据类型
  181. prizeObj: null, //奖励发放对象
  182. queryTableIdList: "", //条件匹配列表
  183. repeatFlag: "", //重复发放
  184. };
  185. closeFn();
  186. };
  187. // 弹窗是否全屏
  188. const isFullscreen = ref(false)
  189. </script>
  190. <template lang="pug">
  191. .main
  192. el-dialog(v-model='props.editVisible' draggable width="50%" :fullscreen="isFullscreen" title="修改" @close="closeUpdatePriListVisible" @open="openVisible")
  193. el-form(:model='UpdateForm' label-position="right" ref="ruleFormRef" :rules="rules" label-width="100px")
  194. el-form-item(label='ID' prop="id")
  195. el-input-number(v-model='UpdateForm.id' :min="1" :max="1000"
  196. placeholder="请输入ID")
  197. el-form-item(label="奖励分类", prop="kind")
  198. el-select(
  199. v-model="UpdateForm.kind",
  200. placeholder="请选择奖励分类",
  201. clearable,
  202. )
  203. el-option(:label="item.label", :value="item.id" v-for="(item,index) in kindOptionList")
  204. el-form-item(label='奖励名称' prop="prizeName")
  205. el-input(v-model='UpdateForm.prizeName' autocomplete='off'
  206. placeholder="请输入奖励名称")
  207. el-form-item(label='奖励代码' prop="prizeCode")
  208. el-input(v-model='UpdateForm.prizeCode' autocomplete='off'
  209. placeholder="请输入奖励代码")
  210. el-form-item(label='奖励比例' prop="prizePercent")
  211. el-input-number(v-model='UpdateForm.prizePercent' :min="0" :max="1000"
  212. placeholder="请输入奖励比例")
  213. el-form-item(label='奖励固定金额' prop="prizeAmount")
  214. el-input-number(v-model='UpdateForm.prizeAmount' :min="0" :max="100000"
  215. placeholder="请输入奖励固定金额")
  216. el-form-item(label="条件模式", prop="conditionMode")
  217. el-select(
  218. v-model="UpdateForm.conditionMode",
  219. placeholder="请选择条件模式",
  220. clearable,
  221. )
  222. el-option(:label="item.label", :value="item.id" v-for="(item,index) in conditionModeOptionList")
  223. el-form-item(label='是否递归' prop="recursionFlag")
  224. el-switch(v-model="UpdateForm.recursionFlag")
  225. el-form-item(label='重复发放' prop="repeatFlag")
  226. el-switch(v-model="UpdateForm.repeatFlag")
  227. el-form-item(label="奖励内容", prop="prizeContent")
  228. el-select(
  229. v-model="UpdateForm.prizeContent",
  230. placeholder="请选择奖励内容",
  231. clearable,
  232. )
  233. el-option(:label="item.label", :value="item.id" v-for="(item,index) in prizeContentOptionList")
  234. el-form-item(label='入参字段' prop="requestParamField")
  235. el-input(v-model='UpdateForm.requestParamField' autocomplete='off'
  236. placeholder="请输入入参字段")
  237. el-form-item(label='奖励金额来源数据' prop="prizeSourceField")
  238. el-input(v-model='UpdateForm.prizeSourceField' autocomplete='off'
  239. placeholder="请输入奖励金额来源数据")
  240. el-form-item(label="奖励金额来源数据类型", prop="prizeSourceFieldType")
  241. el-select(
  242. v-model="UpdateForm.prizeSourceFieldType",
  243. placeholder="请选择奖励金额来源数据类型",
  244. clearable,
  245. )
  246. el-option(:label="item.label", :value="item.id" v-for="(item,index) in prizeSourceFieldTypeOptionList")
  247. el-form-item(label="发放对象", prop="prizeObj")
  248. el-select(
  249. v-model="UpdateForm.prizeObj",
  250. placeholder="请选择发放对象",
  251. clearable,
  252. )
  253. el-option(:label="item.tableEnName + item.note", :value="item.id" v-for="(item,index) in prizeObjOptionList")
  254. el-form-item(label='条件匹配列表' prop="queryTableIdList")
  255. el-input(v-model='UpdateForm.queryTableIdList' autocomplete='off'
  256. placeholder="请输入条件匹配列表")
  257. .flex.justify-end
  258. el-button(
  259. :icon="useRenderIcon(Close)",
  260. :loading="loading",
  261. @click="closeUpdatePriListVisible()"
  262. ) 关闭
  263. el-button(
  264. type="primary",
  265. :icon="useRenderIcon(Upload)",
  266. @click="submit(ruleFormRef)"
  267. ) 确认提交
  268. </template>
  269. <style scoped lang="scss">
  270. :deep(.el-dropdown-menu__item i) {
  271. margin: 0;
  272. }
  273. :deep(.el-form-item__label) {
  274. font-weight: 700;
  275. }
  276. :deep(.el-pagination) {
  277. flex-flow: wrap;
  278. }
  279. :deep(.is-draggable) {
  280. max-height: 80vh;
  281. overflow: auto;
  282. }
  283. :deep(.el-dialog__header) {
  284. position: sticky;
  285. top: 0;
  286. z-index: 2;
  287. background: #fff;
  288. }
  289. .collapsedom {
  290. padding: 0 20px;
  291. background-color: #fff;
  292. }
  293. .ovh-x {
  294. height: 40vh;
  295. overflow-y: auto;
  296. }
  297. :deep(.el-descriptions__header) {
  298. margin: 16px 0 !important;
  299. }
  300. .el-select {
  301. width: 100%;
  302. }
  303. </style>