index.vue 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064
  1. <template>
  2. <div class="container">
  3. <!-- 搜索框 -->
  4. <el-input v-model="search" placeholder="输入关键字" :maxlength="20" />
  5. <el-button class="searchButton" @click="tableData()" type="primary">搜索</el-button>
  6. <el-button class="addButton" @click="addrls()" type="primary">添加遗物</el-button>
  7. </div>
  8. <el-table :data="tableData()" class="table-container" :border="true">
  9. <el-table-column prop="id" label="ID" class="centered-content" align="center" />
  10. <el-table-column prop="iId" label="道具ID" class="centered-content" align="center" />
  11. <el-table-column label="遗物名称" class="centered-content" align="center">
  12. <template #default="scope">
  13. <span>{{ scope.row.iId }}</span>
  14. </template>
  15. </el-table-column>
  16. <el-table-column prop="pId" label="属性ID" class="centered-content" align="center" />
  17. <el-table-column prop="rsi" label="套装ID" class="centered-content" align="center" />
  18. <el-table-column prop="etp" label="遗物类型" class="centered-content" align="center">
  19. <template #default="scope">
  20. <span>{{ rlsTyeps[scope.row.etp] }}</span>
  21. </template>
  22. </el-table-column>
  23. <el-table-column prop="rat" label="主属性" class="centered-content" align="center">
  24. <template #default="scope">
  25. <span>{{ attrJson[scope.row.rat] }}</span>
  26. </template>
  27. </el-table-column>
  28. <el-table-column prop="ratValue" label="主属性值" class="centered-content" align="center" />
  29. <el-table-column prop="qua" label="遗物品质" class="centered-content" align="center" />
  30. <el-table-column prop="lv" label="遗物等级" class="centered-content" align="center" />
  31. <el-table-column prop="sar" label="遗物星级" class="centered-content" align="center" />
  32. <el-table-column prop="onr" label="装备英雄" class="centered-content" align="center">
  33. <template #default="scope">
  34. <span>{{ heroJson[scope.row.onr] }}</span>
  35. </template>
  36. </el-table-column>
  37. <el-table-column prop="exp" label="exp" class="centered-content" align="center" />
  38. <el-table-column prop="rdm" label="副词条1" class="centered-content" align="center">
  39. <template #default="scope">
  40. <span>
  41. <span v-for="(item, index) in scope.row.rdm" :key="item">
  42. <span v-if="index == 0">
  43. <a href="#" @click="openModal(scope.row, item, index, $event)" style="text-decoration: none">{{
  44. attrJson[item.typ] }}</a>
  45. </span>
  46. </span>
  47. </span>
  48. </template>
  49. </el-table-column>
  50. <el-table-column prop="rdm" label="副词条2" class="centered-content" align="center">
  51. <template #default="scope">
  52. <span>
  53. <span v-for="(item, index) in scope.row.rdm" :key="item">
  54. <span v-if="index == 1">
  55. <a href="#" @click="openModal(scope.row, item, index, $event)" style="text-decoration: none">{{
  56. attrJson[item.typ] }}</a>
  57. </span>
  58. </span>
  59. </span>
  60. </template>
  61. </el-table-column>
  62. <el-table-column prop="rdm" label="副词条3" class="centered-content" align="center">
  63. <template #default="scope">
  64. <span>
  65. <span v-for="(item, index) in scope.row.rdm" :key="item">
  66. <span v-if="index == 2">
  67. <a href="#" @click="openModal(scope.row, item, index, $event)" style="text-decoration: none">{{
  68. attrJson[item.typ] }}</a>
  69. </span>
  70. </span>
  71. </span>
  72. </template>
  73. </el-table-column>
  74. <el-table-column prop="rdm" label="副词条4" class="centered-content" align="center">
  75. <template #default="scope">
  76. <span>
  77. <span v-for="(item, index) in scope.row.rdm" :key="item">
  78. <span v-if="index == 3">
  79. <a href="#" @click="openModal(scope.row, item, index, $event)" style="text-decoration: none">{{
  80. attrJson[item.typ] }}</a>
  81. </span>
  82. </span>
  83. </span>
  84. </template>
  85. </el-table-column>
  86. <el-table-column label="操作" width="100px" align="center">
  87. <template #default="scope">
  88. <span class="con">
  89. <el-button @click="editrls(scope.row)" @mouseenter="showText" @mouseleave="hideText" type="primary"
  90. :icon="Edit" class="button-container">
  91. <i class="icon"></i>
  92. <span class="text">修改遗物</span>
  93. </el-button>
  94. <el-button @click="delRls(scope.row)" type="danger" :icon="Delete" class="button-container"
  95. @mouseenter="showText" @mouseleave="hideText">
  96. <i class="ic, resultPropson"></i>
  97. <span class="text">删除遗物</span>
  98. </el-button>
  99. </span>
  100. </template>
  101. </el-table-column>
  102. </el-table>
  103. <el-pagination style="margin: auto;" class="pagination-container" background layout="prev, pager, next ,total,sizes"
  104. :total="state.total" @current-change="handleCurrentChange" @size-change="handleSizeChange" />
  105. <!-- 模态框 -->
  106. <el-dialog :title="dialogTitle" v-model="showModal" @close="closeModal" width="800px">
  107. <el-row>
  108. <el-col :span="20">
  109. <span v-if="editAddFlag">
  110. <el-form-item label="遗物数量" label-width="100px" class="label-left">
  111. <el-input v-model="rlsCount" placeholder="添加同类型遗物数量" :maxlength="10" style="width: 200px" />
  112. </el-form-item>
  113. </span>
  114. <span v-else>
  115. <el-form-item label="遗物ID" label-width="100px" class="label-left">
  116. <el-input v-model="rlsId" placeholder="遗物ID" disabled="disabled" :maxlength="10"
  117. style="width: 200px" />
  118. </el-form-item>
  119. </span>
  120. </el-col>
  121. <el-col :span="4">
  122. <el-button @click="openRlsModal()" type="primary" style="">添加词条</el-button>
  123. </el-col>
  124. </el-row>
  125. <el-row style="margin-bottom: 20px;"></el-row>
  126. <el-form>
  127. <el-row>
  128. <el-col :span="12">
  129. <el-form-item label="遗物道具" label-width="100px" class="label-left">
  130. <el-input v-model="rlsiId" placeholder="输入道具ID" :maxlength="10" :disabled="!addDisabled"
  131. style="width: 200px;" @change="inputChange" />
  132. </el-form-item>
  133. </el-col>
  134. <el-col :span="12">
  135. <el-form-item label="遗物名称" label-width="100px" class="label-left">
  136. <el-input v-model="rlsName" placeholder="遗物名称" :disabled="addDisabled" :maxlength="10"
  137. style="width: 200px;" />
  138. </el-form-item>
  139. </el-col>
  140. </el-row>
  141. <el-row>
  142. <el-col :span="12">
  143. <el-form-item label="基础属性" label-width="100px" class="label-left">
  144. <el-input v-model="rlsPid" placeholder="基础属性ID" :disabled="addDisabled" :maxlength="10"
  145. style="width: 200px" />
  146. </el-form-item>
  147. </el-col>
  148. <el-col :span="12">
  149. <el-form-item label="遗物类型" label-width="100px" class="label-left">
  150. <el-select v-model="rlsTyp" placeholder="遗物类型" :disabled="addDisabled" style="width: 200px">
  151. <el-option v-for="option in typeOptions" :key="option.value" :label="option.label"
  152. :value="option.value"></el-option>
  153. </el-select>
  154. </el-form-item>
  155. </el-col>
  156. </el-row>
  157. <el-row>
  158. <el-col :span="12">
  159. <el-form-item label="主属性类型" label-width="100px" class="label-left">
  160. <el-select v-model="rlsAttr" placeholder="请选择主属性类型" style="width: 200px" :rules="rlsAttrRules"
  161. show-error>
  162. <el-option v-for="option in attrOptions" :key="option.value" :label="option.label"
  163. :value="option.value"></el-option>
  164. </el-select>
  165. </el-form-item>
  166. </el-col>
  167. <el-col :span="12">
  168. <el-form-item label="主属性值" label-width="100px" class="label-left">
  169. <el-input v-model="rlsAttrV" placeholder="主属性值" :maxlength="10" style="width: 200px" />
  170. </el-form-item>
  171. </el-col>
  172. </el-row>
  173. <el-row>
  174. <el-col :span="12">
  175. <el-form-item label="套装ID" label-width="100px" class="label-left">
  176. <el-input v-model="rsi" placeholder="套装ID" :disabled="addDisabled" :maxlength="10"
  177. style="width: 200px" />
  178. </el-form-item>
  179. </el-col>
  180. <el-col :span="12">
  181. <el-form-item label="遗物品质" label-width="100px" class="label-left">
  182. <el-input v-model="rlsqua" placeholder="遗物品质" :disabled="addDisabled" :maxlength="10"
  183. style="width: 200px" />
  184. </el-form-item>
  185. </el-col>
  186. </el-row>
  187. <el-row>
  188. <el-col :span="12">
  189. <el-form-item label="遗物等级" label-width="100px" class="label-left">
  190. <el-input v-model="rlsLv" placeholder="遗物等级" @change="lvChange" :maxlength="10"
  191. style="width: 200px" />
  192. </el-form-item>
  193. </el-col>
  194. <el-col :span="12">
  195. <el-form-item label="遗物星级" label-width="100px" class="label-left">
  196. <el-input v-model="rlsStar" placeholder="遗物星级" :disabled="addDisabled" :maxlength="10"
  197. style="width: 200px" />
  198. </el-form-item>
  199. </el-col>
  200. </el-row>
  201. <el-row>
  202. <el-col :span="12">
  203. <el-form-item label="装备英雄" label-width="100px" class="label-left">
  204. <el-input v-model="rlsOwn" placeholder="装备英雄" :maxlength="10" style="width: 200px" />
  205. </el-form-item>
  206. </el-col>
  207. <el-col :span="12">
  208. <el-form-item label="遗物经验值" label-width="100px" class="label-left">
  209. <el-input v-model="rlsExp" placeholder="遗物经验值" :maxlength="10" style="width: 200px" />
  210. </el-form-item>
  211. </el-col>
  212. </el-row>
  213. <el-row>
  214. <el-col :span="12" :class="{ 'hidden': !rdm1Dis }">
  215. <el-form-item label="副词条1 " label-width="100px" class="label-left">
  216. <el-input v-model="rdm1" placeholder="副词条1" :maxlength="10" style="width: 200px" />
  217. <el-button @click="editRdm1" icon="Edit" type="primary" round></el-button>
  218. </el-form-item>
  219. </el-col>
  220. <el-col :span="12" :class="{ 'hidden': !rdm2Dis }">
  221. <el-form-item label="副词条2 " label-width="100px" class="label-left">
  222. <el-input v-model="rdm2" placeholder="副词条2" :maxlength="10" style="width: 200px" />
  223. <el-button @click="editRdm2" icon="Edit" type="primary" round></el-button>
  224. </el-form-item>
  225. </el-col>
  226. </el-row>
  227. <el-row>
  228. <el-col :span="12" :class="{ 'hidden': !rdm3Dis }">
  229. <el-form-item label="副词条3 " label-width="100px" class="label-left">
  230. <el-input v-model="rdm3" placeholder="副词条3" :maxlength="10" style="width: 200px" />
  231. <el-button @click="editRdm3" icon="Edit" type="primary" round></el-button>
  232. </el-form-item>
  233. </el-col>
  234. <el-col :span="12" :class="{ 'hidden': !rdm4Dis }">
  235. <el-form-item label="副词条4 " label-width="100px" class="label-left">
  236. <el-input v-model="rdm4" placeholder="副词条4" :maxlength="10" style="width: 200px" />
  237. <el-button @click="editRdm4" icon="Edit" type="primary" round></el-button>
  238. </el-form-item>
  239. </el-col>
  240. </el-row>
  241. <el-row style="margin-bottom: 20px;"></el-row>
  242. <span slot="footer" class="dialog-footer" style="position: absolute; right: 20px; bottom: 10px;">
  243. <el-button type="primary" @click="saverls">保存</el-button>
  244. <el-button @click="closeModal">关闭</el-button>
  245. </span>
  246. </el-form>
  247. </el-dialog>
  248. <el-dialog title="副词条" v-model="rdmModal" @close="closeRdmModal" width="300px">
  249. <el-form-item label="词条类型">
  250. <el-select v-model="rdmTyp" placeholder="请选择词条类型" style="width: 200px" @change="rdmChange">
  251. <el-option v-for="option in rdmOptions" :key="option.value" :label="option.label"
  252. :value="option.value"></el-option>
  253. </el-select>
  254. </el-form-item>
  255. <el-form-item label="词条数值">
  256. <el-input v-model="rdmVal" placeholder="请输入词条数值" :maxlength="5" style="width: 200px" />
  257. </el-form-item>
  258. <el-form-item label="强化次数">
  259. <el-input v-model="rdmsTs" placeholder="请输入强化次数" :maxlength="5" style="width: 200px" />
  260. </el-form-item>
  261. <span slot="footer" class="dialog-footer" style="position: absolute; right: 20px; bottom: 10px;">
  262. <el-button type="primary" @click="saveRdm">保存</el-button>
  263. <el-button @click="closeRdmModal">关闭</el-button>
  264. </span>
  265. </el-dialog>
  266. </template>
  267. <script lang="ts" setup>
  268. import { ElMessageBox, ElMessage, rowContextKey } from 'element-plus';
  269. import { reactive, ref } from 'vue'
  270. import { Edit, Check, Close, Delete } from '@element-plus/icons-vue'
  271. import playerApi from '@/api/player'
  272. import { id } from 'element-plus/es/locale';
  273. const props = defineProps({
  274. rls: Array,
  275. ruleForm: Object,
  276. callback: {
  277. type: Function,
  278. required: true
  279. },
  280. callback1: {
  281. type: Function,
  282. required: true
  283. }
  284. });
  285. let dialogTitle = ref<string>('');
  286. const showModal = ref<Boolean>(false);
  287. const rdmModal = ref<Boolean>(false);
  288. const addDisabled = ref<Boolean>(true);
  289. const editAddFlag = ref<Boolean>(true); // 遗物新增 删除标志位
  290. const search = ref("");
  291. const rlsId = ref("");
  292. const rlsName = ref("");
  293. const rlsAlv = ref<Number>();
  294. const rlsiId = ref<Number>(); // 遗物道具Id
  295. const rlsPid = ref<Number>(); // 基础属性ID
  296. const rlsTyp = ref<Number>(); // 遗物类型
  297. const rlsAttr = ref<Number>(); // 遗物主属性
  298. const rlsAttrV = ref<Number>(0); // 主属性值
  299. const rsi = ref<Number>(); // 套装ID
  300. const rlsqua = ref<Number>(); // 遗物品质
  301. const rlsLv = ref<Number>(0); // 遗物等级
  302. const rlsStar = ref<Number>(); // 遗物星级
  303. const rlsOwn = ref<Number>(0); // 装备英雄
  304. const rlsExp = ref<Number>(0); // 经验
  305. const rlsCount = ref<Number>(1); // 添加数量
  306. const attrOptions = reactive([]);
  307. const rdm1 = ref(""); // 副词条1
  308. const rdm2 = ref(""); // 副词条2
  309. const rdm3 = ref(""); // 副词条3
  310. const rdm4 = ref(""); // 副词条4
  311. const rdm1Dis = ref<Boolean>(false); // 隐藏
  312. const rdm2Dis = ref<Boolean>(false); // 副词条2
  313. const rdm3Dis = ref<Boolean>(false); // 副词条3
  314. const rdm4Dis = ref<Boolean>(false); // 副词条4
  315. const rdmOpenType = ref<Number>(0);
  316. const existRdm = reactive([]); // 已存在的副词条属性
  317. const rdmTyp = ref<Number>(0);
  318. const rdmVal = ref<Number>(0);
  319. const rdmsTs = ref<Number>(0);
  320. const rdmOptions = reactive([]);
  321. const rdmIndex = ref<Number>();
  322. const rdmId = ref();
  323. const rlsAttrRules = [
  324. { required: true, message: '请选择主属性类型', trigger: 'change' }
  325. ];
  326. const state = reactive({
  327. page: 1,
  328. limit: 10,
  329. total: props.rls.length
  330. });
  331. const rlsTyeps = ['', '部件A', '部件B', '部件C', '部件D'];
  332. const typeOptions = [
  333. {
  334. 'label': "部位1",
  335. 'value': 1
  336. }, {
  337. 'label': "部位2",
  338. 'value': 2
  339. }, {
  340. 'label': "部位3",
  341. 'value': 3
  342. }, {
  343. 'label': "部位4",
  344. 'value': 4
  345. }
  346. ];
  347. const attrJson = {
  348. 101: "生命",
  349. 102: "攻击",
  350. 103: "威力",
  351. 104: "防御",
  352. 201: "暴击几率",
  353. 202: "攻击加成",
  354. 203: "威力加成",
  355. 204: "攻击速度",
  356. 301: "生命加成",
  357. 302: "防御加成",
  358. 303: "治疗效果",
  359. 304: "护盾精通",
  360. 401: "充能速度",
  361. 402: "施法速度",
  362. 403: "跌落抗性",
  363. 404: "召唤精通"
  364. };
  365. const heroJson = {
  366. 0: "无",
  367. 101: "莱格拉斯",
  368. 102: "米娅",
  369. 104: "霍夫曼",
  370. 105: "米洛",
  371. 201: "凡妮莎",
  372. 202: "内迪",
  373. 205: "糕点师",
  374. 206: "艾尔莎",
  375. 301: "船长",
  376. 303: "男主",
  377. 304: "兔盾",
  378. 401: "烧烤奶",
  379. 402: "艾丽西亚",
  380. 403: "占星师",
  381. 501: "维维安",
  382. 502: "沙拉曼",
  383. 601: "彩虹箭",
  384. 602: "大卫",
  385. 603: "指挥官",
  386. 702: "双枪",
  387. 703: "消防员"
  388. };
  389. const tableData = () => {
  390. let rls: any = [];
  391. if (search.value == "") {
  392. state.total = props.rls.length;
  393. rls = props.rls;
  394. } else {
  395. const regex = new RegExp(search.value, 'i');
  396. rls = props.rls.filter(
  397. (item: { id: string, bid: String, biId: String }, index) => {
  398. return regex.test(item.id) || regex.test(item.bid) || regex.test(item.biId);
  399. }
  400. );
  401. state.total = rls.length;
  402. }
  403. return rls.filter(
  404. (item, index) =>
  405. index < state.page * state.limit &&
  406. index >= state.limit * (state.page - 1)
  407. );
  408. };
  409. const inputChange = (val) => {
  410. let data = {
  411. itemID: val + "",
  412. srvId:props.ruleForm.gId
  413. }
  414. playerApi.getRls(data).then((resp) => {
  415. let result = resp.data.result;
  416. if (result == '') {
  417. ElMessage({
  418. message: "遗物道具不存在",
  419. type: 'error',
  420. duration: 3000
  421. });
  422. } else {
  423. let jsonData = JSON.parse(result);
  424. rlsName.value = jsonData.itemId;
  425. rlsPid.value = jsonData.pId;
  426. rlsStar.value = jsonData.star;
  427. rsi.value = jsonData.rsi;
  428. rlsLv.value = jsonData.lv;
  429. rlsqua.value = jsonData.qua;
  430. rlsTyp.value = jsonData.type;
  431. for (let index = 0; index < jsonData.attr.length; index++) {
  432. let key = jsonData.attr[index];
  433. let option = {
  434. 'label': attrJson[key],
  435. 'value': key
  436. };
  437. attrOptions.push(option);
  438. }
  439. for (let index = 0; index < jsonData.rdm.length; index++) {
  440. let key = jsonData.rdm[index];
  441. let option = {
  442. 'label': attrJson[key],
  443. 'value': key
  444. };
  445. rdmOptions.push(option);
  446. }
  447. }
  448. });
  449. }
  450. const lvChange = (val) => {
  451. let data = {
  452. itemID: rlsiId.value,
  453. changeLv: val + "",
  454. srvId:props.ruleForm.gId
  455. }
  456. if (val > 0) {
  457. playerApi.rlsChangeLv(data).then((resp) => {
  458. let result = resp.data.result;
  459. let jsonData = JSON.parse(result);
  460. if (jsonData.pId == 0) {
  461. ElMessage({
  462. message: "超出最大等级",
  463. type: 'error',
  464. duration: 3000
  465. });
  466. } else {
  467. rlsPid.value = jsonData.pId;
  468. }
  469. });
  470. }
  471. }
  472. const openModal = (row, item, index, event) => {
  473. event.preventDefault();
  474. rdmOpenType.value = 1;
  475. rdmModal.value = true;
  476. rdmTyp.value = item.typ;
  477. rdmVal.value = item.val;
  478. rdmsTs.value = item.sTs;
  479. rdmIndex.value = index;
  480. rlsId.value = row.id
  481. existRdm.splice(0, existRdm.length);
  482. rdmOptions.splice(0, rdmOptions.length);
  483. // 获取部位能选择的参数
  484. let data = {
  485. partType: row.etp,
  486. srvId:props.ruleForm.gId
  487. }
  488. // 移除已经存在的词条
  489. let rdms = row.rdm;
  490. for (let i = 0; i < rdms.length; i++) {
  491. if (i == index) {
  492. continue;
  493. }
  494. const element = rdms[i];
  495. existRdm.push(element.typ);
  496. }
  497. playerApi.getPart(data).then((resp) => {
  498. let data = resp.data.result;
  499. const jsonFun = new Function('return ' + data);
  500. const jsonData = jsonFun();
  501. for (let index = 0; index < jsonData.rdm.length; index++) {
  502. let key = jsonData.rdm[index];
  503. if (!existRdm.includes(key)) {
  504. let option = {
  505. 'label': attrJson[key],
  506. 'value': key
  507. };
  508. rdmOptions.push(option);
  509. }
  510. }
  511. });
  512. }
  513. const editRdm1 = () => {
  514. rdmOpenType.value = 1;
  515. rdmIndex.value = 0;
  516. let s = rdm1.value;
  517. let item = s.split(":");
  518. rdmModal.value = true;
  519. rdmTyp.value = parseInt(item[0]);
  520. rdmVal.value = parseInt(item[1]);
  521. rdmsTs.value = parseInt(item[2]);
  522. let option = {
  523. 'label': attrJson[rdmTyp.value],
  524. 'value': rdmTyp.value
  525. };
  526. if (!existRdm.includes(rdmTyp.value)) {
  527. rdmOptions.push(option);
  528. existRdm.push(rdmTyp.value);
  529. }
  530. }
  531. const editRdm2 = () => {
  532. rdmOpenType.value = 1;
  533. rdmIndex.value = 1;
  534. let s = rdm2.value;
  535. let item = s.split(":");
  536. rdmModal.value = true;
  537. rdmTyp.value = parseInt(item[0]);
  538. rdmVal.value = parseInt(item[1]);
  539. rdmsTs.value = parseInt(item[2]);
  540. }
  541. const editRdm3 = () => {
  542. rdmOpenType.value = 1;
  543. rdmIndex.value = 2;
  544. let s = rdm3.value;
  545. let item = s.split(":");
  546. rdmModal.value = true;
  547. rdmTyp.value = parseInt(item[0]);
  548. rdmVal.value = parseInt(item[1]);
  549. rdmsTs.value = parseInt(item[2]);
  550. }
  551. const editRdm4 = () => {
  552. rdmOpenType.value = 1;
  553. rdmIndex.value = 3;
  554. let s = rdm4.value;
  555. let item = s.split(":");
  556. rdmModal.value = true;
  557. console.log(item);
  558. rdmTyp.value = parseInt(item[0]);
  559. rdmVal.value = parseInt(item[1]);
  560. rdmsTs.value = parseInt(item[2]);
  561. }
  562. const openRlsModal = () => {
  563. let count = 0;
  564. if (rdm1.value != "") {
  565. count++;
  566. }
  567. if (rdm2.value != "") {
  568. count++;
  569. }
  570. if (rdm3.value != "") {
  571. count++;
  572. }
  573. if (rdm4.value != "") {
  574. count++;
  575. }
  576. if (count < rlsStar.value - 1) {
  577. rdmModal.value = true;
  578. rdmTyp.value = null;
  579. rdmVal.value = 0;
  580. rdmsTs.value = 0;
  581. rdmOpenType.value = 2;
  582. } else {
  583. let rdmCount = rlsStar.value - 1
  584. let msg = "该星级最大词条数" + rdmCount;
  585. ElMessage({
  586. message: msg,
  587. type: 'error',
  588. duration: 3000
  589. });
  590. }
  591. }
  592. const rdmChange = (val) => {
  593. if (existRdm.includes(val)) {
  594. ElMessage({
  595. message: "该词条已存在,请重新选择",
  596. type: 'error',
  597. duration: 3000
  598. });
  599. }
  600. }
  601. const saveRdm = () => {
  602. let data = {
  603. playerId: props.ruleForm.id,
  604. rdmType: rdmTyp.value,
  605. rdmVal: rdmVal.value,
  606. rdmsTs: rdmsTs.value,
  607. rlsId: rlsId.value,
  608. rdmIndex: rdmIndex.value,
  609. srvId:props.ruleForm.gId
  610. }
  611. if (rdmOpenType.value == 1) {
  612. playerApi.saveRdm(data).then((resp) => {
  613. props.callback(data);
  614. rdmModal.value = false;
  615. switch (rdmIndex.value) {
  616. case 0:
  617. rdm1.value = data.rdmType + ":" + data.rdmVal + ":" + data.rdmsTs
  618. break;
  619. case 1:
  620. rdm2.value = data.rdmType + ":" + data.rdmVal + ":" + data.rdmsTs
  621. break;
  622. case 2:
  623. rdm3.value = data.rdmType + ":" + data.rdmVal + ":" + data.rdmsTs
  624. break;
  625. case 3:
  626. rdm4.value = data.rdmType + ":" + data.rdmVal + ":" + data.rdmsTs
  627. break;
  628. default:
  629. break;
  630. }
  631. });
  632. } else if (rdmOpenType.value == 2) {
  633. let d = rdmTyp.value + ":" + rdmVal.value + ":" + rdmsTs.value;
  634. if (rdm1.value == "") {
  635. rdm1.value = d;
  636. rdm1Dis.value = true;
  637. } else if (rdm2.value == "") {
  638. rdm2.value = d;
  639. rdm2Dis.value = true;
  640. } else if (rdm3.value == "") {
  641. rdm3.value = d;
  642. rdm3Dis.value = true;
  643. } else if (rdm4.value == "") {
  644. rdm4.value = d;
  645. rdm4Dis.value = true;
  646. }
  647. }
  648. rdmModal.value = false;
  649. }
  650. const showText = (event) => {
  651. const button = event.target;
  652. const text = button.querySelector('.text');
  653. text.style.display = 'block';
  654. }
  655. const hideText = (event) => {
  656. const button = event.target;
  657. const text = button.querySelector('.text');
  658. text.style.display = 'none';
  659. }
  660. const closeModal = () => {
  661. rlsId.value = null
  662. rlsiId.value = null
  663. rlsLv.value = null
  664. rlsAlv.value = null
  665. rlsExp.value = null;
  666. rlsAttr.value = null;
  667. rlsAttrV.value = null;
  668. rdm1.value = null;
  669. rdm2.value = null;
  670. rdm3.value = null;
  671. rdm4.value = null;
  672. rdm1Dis.value = false;
  673. rdm2Dis.value = false;
  674. rdm3Dis.value = false;
  675. rdm4Dis.value = false;
  676. showModal.value = false;
  677. dialogTitle.value = "添加遗物";
  678. }
  679. const closeRdmModal = () => {
  680. rdmTyp.value = null
  681. rdmVal.value = null
  682. rdmsTs.value = null
  683. rdmModal.value = false;
  684. }
  685. const addrls = () => {
  686. editAddFlag.value = true;
  687. dialogTitle.value = "添加遗物";
  688. addDisabled.value = true;
  689. showModal.value = true;
  690. rlsName.value = null;
  691. rlsPid.value = 0;
  692. rlsStar.value = null;
  693. rsi.value = null;
  694. rlsLv.value = 0;
  695. rlsqua.value = null;
  696. rlsTyp.value = null;
  697. rlsCount.value = 1;
  698. attrOptions.splice(0, attrOptions.length);
  699. rdmOptions.splice(0, rdmOptions.length);
  700. }
  701. // 修改图纸
  702. const editrls = (row: any) => {
  703. dialogTitle.value = "修改遗物";
  704. showModal.value = true;
  705. editAddFlag.value = false;
  706. rlsId.value = row.id;
  707. rlsiId.value = row.iId;
  708. rlsLv.value = row.lv;
  709. rlsOwn.value = row.onr;
  710. rlsqua.value = row.qua;
  711. rlsStar.value = row.sar;
  712. rlsAttr.value = parseInt(row.rat);
  713. rlsAttrV.value = row.ratValue;
  714. rsi.value = row.rsi;
  715. rlsPid.value = row.pId;
  716. rlsExp.value = row.exp;
  717. rlsTyp.value = row.etp;
  718. existRdm.splice(0, existRdm.length);
  719. for (let index = 0; index < row.rdm.length; index++) {
  720. const element = row.rdm[index];
  721. switch (index) {
  722. case 0:
  723. rdm1Dis.value = true;
  724. rdm1.value = element.typ + ":" + element.val + ":" + element.sTs
  725. break;
  726. case 1:
  727. rdm2Dis.value = true;
  728. rdm2.value = element.typ + ":" + element.val + ":" + element.sTs
  729. break;
  730. case 2:
  731. rdm3Dis.value = true;
  732. rdm3.value = element.typ + ":" + element.val + ":" + element.sTs
  733. break;
  734. case 3:
  735. rdm4Dis.value = true;
  736. rdm4.value = element.typ + ":" + element.val + ":" + element.sTs
  737. break;
  738. default:
  739. break;
  740. }
  741. existRdm.push(element.typ);
  742. }
  743. let data = {
  744. partType: row.etp,
  745. srvId:props.ruleForm.gId
  746. }
  747. playerApi.getPart(data).then((resp) => {
  748. let data = resp.data.result;
  749. let jsonData = JSON.parse(data);
  750. for (let index = 0; index < jsonData.attr.length; index++) {
  751. let key = jsonData.attr[index];
  752. let option = {
  753. 'label': attrJson[key],
  754. 'value': key
  755. };
  756. attrOptions.push(option);
  757. }
  758. for (let index = 0; index < jsonData.rdm.length; index++) {
  759. let key = jsonData.rdm[index];
  760. let option = {
  761. 'label': attrJson[key],
  762. 'value': key
  763. };
  764. rdmOptions.push(option);
  765. }
  766. });
  767. }
  768. // 保存
  769. const saverls = () => {
  770. let flag = editAddFlag.value;
  771. console.log(rlsAttr.value);
  772. if (flag) {
  773. if (rlsAttr.value == undefined) {
  774. ElMessage({
  775. message: "请选择主属性",
  776. type: 'error',
  777. duration: 3000
  778. });
  779. } else {
  780. let data = {
  781. playerId: props.ruleForm.id,
  782. pbId: rlsPid.value,
  783. itemId: rlsiId.value,
  784. attrType: rlsAttr.value,
  785. attrVal: rlsAttrV.value,
  786. lv: rlsLv.value,
  787. exp: rlsExp.value,
  788. heroId: rlsOwn.value,
  789. rdm1: rdm1.value,
  790. rdm2: rdm2.value,
  791. rdm3: rdm3.value,
  792. rdm4: rdm4.value,
  793. relicNum: rlsCount.value,
  794. srvId:props.ruleForm.gId
  795. }
  796. playerApi.addRelic(data).then((resp) => {
  797. let data = resp.data.result;
  798. if (data === '添加失败') {
  799. ElMessage({
  800. message: "添加失败",
  801. type: 'error',
  802. duration: 3000
  803. });
  804. } else {
  805. let jsonArray = JSON.parse(data);
  806. props.callback1(jsonArray);
  807. }
  808. });
  809. }
  810. } else {
  811. let data = {
  812. relicId: rlsId.value,
  813. playerId: props.ruleForm.id,
  814. pbId: rlsPid.value,
  815. attrType: rlsAttr.value,
  816. attrVal: rlsAttrV.value,
  817. lv: rlsLv.value,
  818. exp: rlsExp.value,
  819. heroId: rlsOwn.value,
  820. rdm1: rdm1.value,
  821. rdm2: rdm2.value,
  822. rdm3: rdm3.value,
  823. rdm4: rdm4.value,
  824. srvId:props.ruleForm.gId
  825. }
  826. playerApi.editRelic(data).then((resp) => {
  827. let data = resp.data.result;
  828. if (data === '修改失败') {
  829. ElMessage({
  830. message: "修改失败",
  831. type: 'error',
  832. duration: 3000
  833. });
  834. } else {
  835. let jsonArray = JSON.parse(data);
  836. props.callback1(jsonArray);
  837. }
  838. });
  839. }
  840. showModal.value = false;
  841. }
  842. // 删除遗物
  843. const delRls = (row: any) => {
  844. ElMessageBox.confirm('确定要删除该遗物吗?', '提示', {
  845. confirmButtonText: '确定',
  846. cancelButtonText: '取消'
  847. }).then(() => {
  848. let data = {
  849. playerId: props.ruleForm.id,
  850. relicId: row.id,
  851. srvId:props.ruleForm.gId
  852. }
  853. playerApi.delRls(data).then((resp) => {
  854. console.log(resp);
  855. if (resp.data.result === '删除成功') {
  856. ElMessage({
  857. message: "删除成功",
  858. type: 'success',
  859. duration: 3000
  860. });
  861. let index = props.rls.indexOf(row);
  862. props.rls.splice(index, 1);
  863. } else {
  864. ElMessage({
  865. message: "删除失败",
  866. type: 'error',
  867. duration: 3000
  868. });
  869. }
  870. });
  871. }).catch(() => { });
  872. }
  873. // 分页
  874. const handleCurrentChange = (e) => {
  875. state.page = e;
  876. };
  877. const handleSizeChange = (e) => {
  878. state.limit = e;
  879. };
  880. </script>
  881. <style>
  882. .hidden {
  883. display: none;
  884. }
  885. .con {
  886. display: flex;
  887. align-items: center;
  888. }
  889. .button-container {
  890. position: relative;
  891. left: 10px;
  892. transform: translateY(1%);
  893. border-radius: 50%;
  894. width: 30px;
  895. height: 28px;
  896. }
  897. .input-container {
  898. display: flex;
  899. align-items: center;
  900. }
  901. .addButton {
  902. position: absolute;
  903. right: 5%;
  904. }
  905. .searchButton {
  906. margin-right: 20px;
  907. /* 调整搜索按钮的右侧间距 */
  908. }
  909. .button-container:hover {
  910. border-radius: 10px;
  911. width: 100px;
  912. }
  913. .button-container el-button {
  914. margin-right: 10px;
  915. }
  916. .button-container el-button:last-child {
  917. margin-right: 0;
  918. }
  919. .container {
  920. display: flex;
  921. align-items: center;
  922. width: 200px;
  923. justify-content: space-between;
  924. align-items: center;
  925. }
  926. .container .el-input {
  927. margin-right: 10px;
  928. /* 调整输入框的右边距 */
  929. }
  930. .edit-button {
  931. position: absolute;
  932. top: 50%;
  933. left: 120px;
  934. transform: translateY(-50%);
  935. }
  936. .table-container {
  937. text-align: center;
  938. display: grid;
  939. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  940. }
  941. .pagination-container {
  942. display: flex;
  943. justify-content: center;
  944. }
  945. .centered-content {
  946. text-align: center;
  947. }
  948. .text {
  949. display: none;
  950. }
  951. .label-left {
  952. text-align: left;
  953. }
  954. .label-left .el-input {
  955. margin-right: 10px;
  956. /* 调整输入框的右边距 */
  957. }
  958. </style>