Update.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <template>
  2. <lay-layer :title="modelConfig.title" v-model="modelConfig.visible" area="auto" :btn="operator">
  3. <div class="width-800 custom-layer" style="padding: 20px">
  4. <lay-form :model="modelParams" ref="modelFormRef" required>
  5. <lay-row space="10">
  6. <lay-col md="12" sm="12" xs="24">
  7. <lay-form-item label="名称" prop="name">
  8. <lay-input v-model="modelParams.name" />
  9. </lay-form-item>
  10. </lay-col>
  11. <lay-col md="12" sm="12" xs="24">
  12. <lay-form-item label="初始金额" prop="startAmount">
  13. <lay-input v-model="modelParams.startAmount" />
  14. </lay-form-item>
  15. </lay-col>
  16. <lay-col md="12" sm="12" xs="24">
  17. <lay-form-item label="服务器" prop="serverId">
  18. <lay-select v-model="modelParams.serverId" :show-search="true">
  19. <lay-select-option v-for="item in serverList" :value="item.id" :label="item.value" />
  20. </lay-select>
  21. </lay-form-item>
  22. </lay-col>
  23. <lay-col md="12" sm="12" xs="24">
  24. <lay-form-item label="通讯端口" prop="callPort">
  25. <lay-input v-model="modelParams.callPort" />
  26. </lay-form-item>
  27. </lay-col>
  28. <lay-col md="12" sm="12" xs="24">
  29. <lay-form-item label="策略" prop="strategyId">
  30. <lay-select v-model="modelParams.strategyId" @change="strategyHandleChange">
  31. <lay-select-option v-for="item in strategyList" :value="item.id" :label="item.value" />
  32. </lay-select>
  33. </lay-form-item>
  34. </lay-col>
  35. <lay-col md="12" sm="12" xs="24">
  36. <lay-form-item label="策略版本" prop="strategyProgramId">
  37. <lay-select v-model="modelParams.strategyProgramId" @change="strategyProgramHandleChange">
  38. <lay-select-option v-for="item in strategyProgramList" :value="item.id" :label="item.value" />
  39. </lay-select>
  40. </lay-form-item>
  41. </lay-col>
  42. <div>
  43. <template v-for="item in strategyParameterList">
  44. <lay-col md="12" sm="12" xs="24">
  45. <lay-form-item :label="item.name" :prop="`robotConfigs.${item.code}`">
  46. <lay-input v-if="item.valType == 0" v-model="modelParams.robotConfigs[item.code]" />
  47. <lay-input type="number" v-if="item.valType == 1" v-model="modelParams.robotConfigs[item.code]" />
  48. <lay-switch v-if="item.valType == 2" v-model="modelParams.robotConfigs[item.code]" />
  49. <lay-select v-if="item.valType == 3" v-model="modelParams.robotConfigs[item.code]" :show-search="true">
  50. <lay-select-option v-for="items in item.contentVal.split(',')" :value="items" :label="items" />
  51. </lay-select>
  52. <lay-select v-if="item.valType == 5" v-model="modelParams.robotConfigs[item.code]" :options="apikeyList" :show-search="true" />
  53. </lay-form-item>
  54. </lay-col>
  55. </template>
  56. </div>
  57. </lay-row>
  58. </lay-form>
  59. </div>
  60. </lay-layer>
  61. </template>
  62. <script lang="ts" setup>
  63. import { ref, reactive, getCurrentInstance } from "vue";
  64. import { add_robot, update_robot, get_server_select, get_strategy_select, get_strategy_program_select, get_strategy_parameter_select, get_apikey_select } from "@/api";
  65. const { proxy }: any = getCurrentInstance();
  66. const modelFormRef = ref();
  67. interface ModelConfig {
  68. title: string;
  69. visible: boolean;
  70. isUpdate: boolean;
  71. loading: boolean;
  72. }
  73. interface ModelParams {
  74. id?: number;
  75. name?: string;
  76. serverId?: number;
  77. strategyId?: number;
  78. strategyProgramId?: number;
  79. startAmount?: number;
  80. callPort?: number;
  81. remark?: string;
  82. robotConfigs?: any;
  83. }
  84. let modelParams = ref<ModelParams>({});
  85. let modelConfig: ModelConfig = reactive({ title: "", visible: false, isUpdate: false, loading: false });
  86. let handleResult = reactive<{ resolve?: any; reject?: any }>({});
  87. let serverList = ref();
  88. let strategyList = ref();
  89. let strategyProgramList = ref();
  90. let strategyParameterList = ref();
  91. let apikeyList = ref();
  92. const show = async (params?: any) => {
  93. initData();
  94. get_server_list();
  95. get_strategy_list();
  96. get_apikey();
  97. modelConfig.visible = true;
  98. modelConfig.isUpdate = !!params;
  99. modelConfig.title = !!params ? "编辑机器人" : "添加机器人";
  100. if (modelConfig.isUpdate) {
  101. let robotConfigs: any = {};
  102. params.configList.map((item: any) => {
  103. if (item.valType == 2) {
  104. robotConfigs[item.code] = item.val == "true" ? true : false;
  105. } else if (item.valType == 5) {
  106. robotConfigs[item.code] = item.val ? parseInt(item.val) : undefined;
  107. } else {
  108. robotConfigs[item.code] = item.val;
  109. }
  110. });
  111. modelParams.value = { ...params, robotConfigs };
  112. strategyHandleChange(modelParams.value.strategyId);
  113. strategyProgramHandleChange(modelParams.value.strategyProgramId);
  114. } else {
  115. modelParams.value = { robotConfigs: {} };
  116. }
  117. return new Promise(async (resolve, reject) => {
  118. handleResult.resolve = resolve;
  119. handleResult.reject = reject;
  120. });
  121. };
  122. // 获取服务器列表
  123. const get_server_list = () => {
  124. const params = {};
  125. get_server_select(params, (data: any) => {
  126. serverList.value = data.data;
  127. });
  128. };
  129. // 获取策略列表
  130. const get_strategy_list = () => {
  131. const params = {};
  132. get_strategy_select(params, (data: any) => {
  133. strategyList.value = data.data;
  134. });
  135. };
  136. // 获取策略版本列表
  137. const get_strategy_program_list = (value: number) => {
  138. const params = { strategyId: value };
  139. get_strategy_program_select(params, (data: any) => {
  140. strategyProgramList.value = data.data;
  141. });
  142. };
  143. // 获取策略版本参数下拉
  144. const get_strategy_parameter = (value: number) => {
  145. const params = { programId: value };
  146. get_strategy_parameter_select(params, (data: any) => {
  147. strategyParameterList.value = data.data;
  148. let defaultValObj: any = {};
  149. strategyParameterList.value.map((item: any) => {
  150. if (item.valType == 2) {
  151. defaultValObj[item.code] = item.defaultVal == "true" ? true : false;
  152. } else if (item.valType == 5) {
  153. defaultValObj[item.code] = item.defaultVal ? parseInt(item.defaultVal) : undefined;
  154. } else {
  155. defaultValObj[item.code] = item.defaultVal;
  156. }
  157. });
  158. modelParams.value = { ...modelParams.value, robotConfigs: { ...defaultValObj, ...modelParams.value.robotConfigs } };
  159. });
  160. };
  161. // 获取APIKEY参数下拉
  162. const get_apikey = () => {
  163. const params = {};
  164. get_apikey_select(params, (data: any) => {
  165. apikeyList.value = data.data.map((item: any) => ({ label: item.value, value: item.id }));
  166. });
  167. };
  168. // 选择策略操作
  169. const strategyHandleChange = (e: any) => {
  170. get_strategy_program_list(e);
  171. };
  172. // 选择策略版本操作
  173. const strategyProgramHandleChange = (e: any) => {
  174. get_strategy_parameter(e);
  175. };
  176. const handleParams = (value: any) => {
  177. const params = {
  178. id: value.id,
  179. name: value.name,
  180. serverId: value.serverId,
  181. strategyId: value.strategyId,
  182. strategyProgramId: value.strategyProgramId,
  183. startAmount: value.startAmount,
  184. callPort: value.callPort,
  185. remark: value.remark,
  186. };
  187. const robotConfigs = strategyParameterList.value.map((item: any) => ({ name: item.name, code: item.code, val: value.robotConfigs[item.code], valType: item.valType }));
  188. return { ...params, robotConfigs };
  189. };
  190. const initData = () => {
  191. serverList.value = [];
  192. strategyList.value = [];
  193. strategyProgramList.value = [];
  194. strategyParameterList.value = [];
  195. apikeyList.value = [];
  196. };
  197. const operator = reactive([
  198. {
  199. text: "确认",
  200. callback: () => {
  201. modelFormRef.value.validate((isValidate: boolean) => {
  202. if (isValidate) {
  203. modelConfig.loading = true;
  204. const params = handleParams(modelParams.value);
  205. if (modelConfig.isUpdate) {
  206. update_robot(params, (data: any) => {
  207. modelConfig.loading = false;
  208. if (data.code == 200) {
  209. proxy.$message("编辑成功!");
  210. modelConfig.visible = false;
  211. handleResult.resolve(true);
  212. }
  213. });
  214. } else {
  215. add_robot(params, (data: any) => {
  216. modelConfig.loading = false;
  217. if (data.code == 200) {
  218. proxy.$message("添加成功!");
  219. modelConfig.visible = false;
  220. handleResult.resolve(true);
  221. }
  222. });
  223. }
  224. }
  225. });
  226. },
  227. },
  228. {
  229. text: "取消",
  230. callback: () => {
  231. modelConfig.visible = false;
  232. handleResult.resolve(false);
  233. },
  234. },
  235. ]);
  236. defineExpose({ show });
  237. </script>