evaluate.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967
  1. <template>
  2. <div class="content-box">
  3. <div class="left">
  4. <!-- <el-icon :size="23" class="camera"><VideoCameraFilled /></el-icon> -->
  5. <span class="cameratxt">评价管理</span>
  6. </div>
  7. <div class="middle">
  8. <div class="filter">
  9. <div class="condition">
  10. <span>关键字 : </span>
  11. <el-input :clearable="true" v-model="searchInput.keyWord" class="w-50 m-2" placeholder="请输入工单号或姓名"
  12. style="width: 180px" />
  13. </div>
  14. <div class="condition">
  15. <span>评价时间 : </span>
  16. <el-date-picker v-model="searchInput.createTime" type="daterange" range-separator="-" start-placeholder="起始时间"
  17. end-placeholder="结束时间" format="YYYY-MM-DD" value-format="YYYY-MM-DD" :prefix-icon="Calendar"
  18. placeholder="请选择日期" :clearable="true" />
  19. </div>
  20. <div class="condition">
  21. <span>评价 : </span>
  22. <el-select clearable v-model="searchInput.star" class="m-2" placeholder="请选择评价星级" @change="selSchool">
  23. <el-option label="1星" :value="1" />
  24. <el-option label="2星" :value="2" />
  25. <el-option label="3星" :value="3" />
  26. <el-option label="4星" :value="4" />
  27. <el-option label="5星" :value="5" />
  28. </el-select>
  29. </div>
  30. <el-button style="margin-left: 20px" color="rgba(111, 182, 184, 1)" type="primary" class="search"
  31. @click="searchBtn"><el-icon>
  32. <Search />
  33. </el-icon> <span>查询</span></el-button>
  34. </div>
  35. <!-- 按钮列表 -->
  36. <div class="gongneng">
  37. <el-button color="rgba(111, 182, 184, 1)" class="import" type="primary" @click="importExcel"><img
  38. src="@/assets/import.png" style="width: 14px; height: 14px; margin-right: 4px" alt="" />
  39. <span>导出表单</span></el-button>
  40. </div>
  41. </div>
  42. <div class="footer">
  43. <el-table :row-class-name="tableRowClassName" :data="tableData.list" style="width: 100%" :header-cell-style="{
  44. background: 'rgba(240, 243, 247, 1)',
  45. height: '50px',
  46. border: 0,
  47. }">
  48. <el-table-column align="center" width="180" prop="recordNo" label="工单编号" />
  49. <el-table-column align="center" prop="userName" label="姓名" />
  50. <el-table-column align="center" prop="userPhone" label="电话" />
  51. <el-table-column align="center" width="180" prop="description" label="故障描述" show-overflow-tooltip />
  52. <el-table-column align="center" width="170" prop="reportTime" label="报修时间" />
  53. <el-table-column align="center" prop="maintenancerName" label="技术员" />
  54. <el-table-column align="center" label="评价星级" width="160">
  55. <template #default="{ row, index }">
  56. <el-rate v-model="row.star" allow-half color="rgba(234, 149, 24, 1)" size="large" disabled
  57. disabled-void-color="rgba(179, 179, 179, 1)" />
  58. </template>
  59. </el-table-column>
  60. <el-table-column align="center" width="160" show-overflow-tooltip prop="content" label="评价内容" />
  61. <el-table-column align="center" prop="createTime" width="180" label="评价时间" />
  62. <el-table-column align="center" label="操作" width="220">
  63. <template #default="scope">
  64. <div class="edit">
  65. <div class="look" @click="orderInfo(scope.row)">详情</div>
  66. <el-popconfirm width="220" confirm-button-text="确认" cancel-button-text="取消" :icon="InfoFilled"
  67. icon-color="#f89626" title="是否删除这条评价?" @confirm="confirmEvent(scope.row)" @cancel="cancelEvent">
  68. <template #reference>
  69. <div class="look">删除</div>
  70. </template>
  71. </el-popconfirm>
  72. </div>
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. </div>
  77. <!-- 详情弹窗 -->
  78. <el-dialog class="orderInfo" v-model="orderInfoVisible" :close-on-click-modal="false" :close-on-press-escape="false"
  79. title="评价详情" align-center width="760" :before-close="cancelOrderInfo">
  80. <div class="order_info">
  81. <!-- 工单详情 工单信息 -->
  82. <div class="title">
  83. <img src="@/assets/orderInfo.png" alt="" />
  84. <span>工单信息</span>
  85. </div>
  86. <div class="workNum">
  87. <div class="titles">工单编号:</div><span>{{ orderInfoData.recordNo }}</span>
  88. </div>
  89. <div class="workNum">
  90. <div class="titles">报修姓名:</div><span>{{ orderInfoData.userName }}</span>
  91. </div>
  92. <div class="workNum">
  93. <div class="titles">报修电话:</div><span>{{ orderInfoData.userPhone }}</span>
  94. </div>
  95. <div class="workNum">
  96. <div class="titles">故障类型:</div><span>{{ orderInfoData.articleName }}</span>
  97. </div>
  98. <div class="workNum">
  99. <div class="titles">故障描述:</div><span>{{ orderInfoData.description }}</span>
  100. </div>
  101. <div class="workNum">
  102. <div class="titles">报修区域:</div><span>{{ orderInfoData.areaName }}{{ orderInfoData.address }}</span>
  103. </div>
  104. <div class="workNum">
  105. <div class="titles">报修录音:</div>
  106. <div class="audio" @click="bofang">
  107. <img src="@/assets/audio.png" alt="" />
  108. <div class="audioNum">{{ orderInfoData.voiceLength }}"</div>
  109. <!-- <button class="butt" @click="bofang">确认</button> -->
  110. <audio ref="audio" class="aud" :src="orderInfoData.voice"></audio>
  111. </div>
  112. </div>
  113. <div class="workNum">
  114. <div class="titles">报修时间:</div><span>{{ orderInfoData.reportTime }}</span>
  115. </div>
  116. <div class="workNum">
  117. <div class="titles">评价内容:</div><span>{{ orderInfoData.content }}</span>
  118. </div>
  119. <div class="workNum">
  120. <div class="titles">评价时间:</div><span>{{ orderInfoData.createTime }}</span>
  121. </div>
  122. <div class="workNums">
  123. <div class="titles">评价星级:</div>
  124. <el-rate v-model="orderInfoData.star" allow-half color="rgba(234, 149, 24, 1)" size="large" disabled
  125. disabled-void-color="rgba(179, 179, 179, 1)" />
  126. </div>
  127. <!-- 工单详情 报修进度 -->
  128. <div class="title">
  129. <img src="@/assets/repairsInfo.png" alt="" />
  130. <span>报修进度</span>
  131. </div>
  132. <!-- <div class="workNum">
  133. <span class="titles">维修总时长:</span
  134. ><span>{{ orderInfoData.totalTime }}</span>
  135. </div>
  136. <div class="workNum">
  137. <span class="titles">维修耗时:</span
  138. ><span>{{ orderInfoData.time }}</span>
  139. </div> -->
  140. <div class="steps">
  141. <el-steps direction="vertical" :active="orderInfoData.tracks.length">
  142. <el-step v-for="(i, index) in orderInfoData.tracks">
  143. <template v-slot:icon>
  144. <img style="width: 20px; height: 20px" src="@/assets/step_common.png" alt="" />
  145. </template>
  146. <template v-slot:title>
  147. <span>{{ i.state }}</span>
  148. </template>
  149. <template v-slot:description>
  150. <div class="content">
  151. <span>[{{ i.userZzstr }}]{{ i.userName }}{{ i.userPhone }}
  152. {{ i.createTime }}</span>
  153. </div>
  154. <div>
  155. <div>{{ i.content }}</div>
  156. <!-- 评价图片 -->
  157. <div v-if="i.images" class="evaluateImg">
  158. <div v-for="(item, index) in i.images">
  159. <img @click="lookImg(item)" :key="index" :src="item" alt="" />
  160. </div>
  161. </div>
  162. <!-- 评价录音 -->
  163. <div v-if="i.voice" class="audio" @click="audioPlay(i)">
  164. <img src="@/assets/audio.png" alt="" />
  165. <div class="audioNum">{{ i.voiceLength }}"</div>
  166. <!-- <button class="butt" @click="bofang">确认</button> -->
  167. <audio :id="`audio${i.id}`" class="aud" :src="i.voice"></audio>
  168. </div>
  169. </div>
  170. </template>
  171. </el-step>
  172. </el-steps>
  173. </div>
  174. </div>
  175. </el-dialog>
  176. <!-- 分页组件 -->
  177. <div class="pageSize">
  178. <span></span>
  179. <el-pagination background :current-page="currentPage" :page-size="pageSize"
  180. layout="total, prev, pager, next, jumper, slot" :total="total" @update:current-page="handleCurrentChange" />
  181. </div>
  182. <div class="bgImg" v-if="bgImg">
  183. <img @click="bgImg = false" :src="bgImgurl" alt="" />
  184. </div>
  185. </div>
  186. </template>
  187. <script setup>
  188. import { ref, reactive, nextTick, onBeforeMount, onUnmounted } from "vue";
  189. import { useRouter } from "vue-router";
  190. import { ElMessage, ElMessageBox } from "element-plus";
  191. import { Calendar } from "@element-plus/icons-vue";
  192. import vidiconsApi from "@/api/vidicons.js";
  193. import { dayjs } from "element-plus";
  194. import lodash from "lodash";
  195. import axios from "axios";
  196. import { useStore } from "vuex";
  197. const store = useStore();
  198. const api = ref("");
  199. const router = useRouter();
  200. // 表格数据
  201. const tableData = reactive({ list: [] });
  202. // 详情 (-----------------------------------------------)
  203. const orderInfoVisible = ref(false); // 控制工单详情
  204. // 录音
  205. const audio = ref();
  206. const orderInfoData = ref({
  207. recordNo: "", // 工单编号
  208. userName: "", // 报修姓名
  209. userPhone: "", // 报修电话
  210. articleName: "", // 故障类型
  211. description: "", // 故障描述
  212. articleId: "", // 报修类型
  213. address: "", // 报修区域
  214. areaName: "",// 报修校区地址
  215. voice: "", // 报修录音
  216. voiceLength: "", // 报修录音时长
  217. reportTime: "", // 报修时间
  218. totalTime: "", // 维修总时长
  219. time: "", // 维修耗时
  220. content: "", // 评价内容
  221. createTime: "", // 评价时间
  222. star: "", // 评价星级
  223. tracks: [],
  224. });
  225. const bgImg = ref(false)// 点击查看图片
  226. const bgImgurl = ref() // 点击查看图片地址
  227. const searchInput = reactive({
  228. keyWord: "",
  229. createTime: "",
  230. star:""
  231. }); // 搜索按钮数据
  232. 5;
  233. const currentPage = ref(1); // 当前页
  234. const pageSize = ref(10);
  235. const total = ref(); // 当前总数
  236. // 查看评价数据列表
  237. const getList = async (message) => {
  238. // let data = new FormData();
  239. // if (searchInput.createTime == null) {
  240. // searchInput.createTime = "";
  241. // }
  242. // data.set("car_number", searchInput.carnumber);
  243. // data.set("create_time", searchInput.createTime); //前面的key记得对应!
  244. // data.set("page", currentPage.value);
  245. // data.set("rows", pageSize.value); //前面的key记得对应!
  246. // let res = await adminApi.adminLogin(data);
  247. let data;
  248. if (searchInput.createTime) {
  249. data = {
  250. currentPage: currentPage.value, // 当前页
  251. pageCount: pageSize.value, // 一页数据条数
  252. keyWord: searchInput.keyWord, // 关键字
  253. startTime: searchInput.createTime[0],
  254. endTime: searchInput.createTime[1],
  255. star:searchInput.star
  256. };
  257. } else {
  258. data = {
  259. currentPage: currentPage.value, // 当前页
  260. pageCount: pageSize.value, // 一页数据条数
  261. keyWord: searchInput.keyWord, // 关键字
  262. star:searchInput.star
  263. };
  264. }
  265. let res = await axios({
  266. method: "get",
  267. url: api.value + "/repairEvaluate/queryPageRepairEvaluate",
  268. headers: {
  269. token: sessionStorage.getItem("token"),
  270. user_head: sessionStorage.getItem("userhead"),
  271. },
  272. params: data,
  273. });
  274. console.log(res, "评价数据");
  275. if (res.data.code == 200) {
  276. tableData.list = res.data.data.list;
  277. if (message) {
  278. ElMessage({
  279. type: "success",
  280. showClose: true,
  281. message: message,
  282. center: true,
  283. });
  284. }
  285. // currentPage.value = res.data.currentPage;
  286. total.value = res.data.data.totalCount;
  287. } else {
  288. ElMessage({
  289. type: "error",
  290. showClose: true,
  291. message: res.data.message,
  292. center: true,
  293. });
  294. if (res.data.code == 570) {
  295. sessionStorage.removeItem("token")
  296. router.push({
  297. path: `/login`,
  298. });
  299. }
  300. }
  301. };
  302. // 搜索功能
  303. const searchBtn = lodash.debounce(async () => {
  304. getList("查询成功");
  305. }, 300);
  306. // 工单详情按钮 (工单详情-----------------------------------)
  307. const orderInfo = async (row) => {
  308. orderInfoVisible.value = true;
  309. orderInfoData.value.createTime = row.createTime;
  310. orderInfoData.value.star = row.star;
  311. orderInfoData.value.content = row.content;
  312. let data = { recordId: row.recordId };
  313. let res = await axios({
  314. method: "get",
  315. url: api.value + "/repairRecord/details",
  316. headers: {
  317. token: sessionStorage.getItem("token"),
  318. user_head: sessionStorage.getItem("userhead"),
  319. },
  320. params: data,
  321. });
  322. console.log(res, "详情数据");
  323. if (res.data.code == 200) {
  324. orderInfoData.value.recordNo = res.data.data.recordNo;
  325. orderInfoData.value.userName = res.data.data.userName;
  326. orderInfoData.value.userPhone = res.data.data.userPhone;
  327. orderInfoData.value.description = res.data.data.description;
  328. orderInfoData.value.address = res.data.data.address;
  329. orderInfoData.value.areaName = res.data.data.areaName;
  330. orderInfoData.value.articleName = res.data.data.articleName;
  331. orderInfoData.value.voice = res.data.data.voice;
  332. orderInfoData.value.voiceLength = res.data.data.voiceLength;
  333. orderInfoData.value.reportTime = res.data.data.reportTime;
  334. orderInfoData.value.totalTime = res.data.data.totalTime;
  335. orderInfoData.value.time = res.data.data.time;
  336. orderInfoData.value.tracks = res.data.data.tracks;
  337. } else {
  338. ElMessage({
  339. type: "error",
  340. showClose: true,
  341. message: res.data.message,
  342. center: true,
  343. });
  344. }
  345. };
  346. // 取消工单详情按钮
  347. const cancelOrderInfo = () => {
  348. orderInfoVisible.value = false;
  349. };
  350. // 工单详情 点击音频
  351. const bofang = () => {
  352. orderInfoData.value.tracks.forEach((item) => {
  353. // console.log(item.id);
  354. let audioId = document.getElementById(`audio${item.id}`);
  355. if (item.voice) {
  356. // console.log(item.id);
  357. audioId.load();
  358. }
  359. });
  360. console.log(audio.value.duration, "音频总时长");
  361. // audio.value.pause(); // 暂停pause
  362. if (audio.value.paused == true) {
  363. audio.value.play();
  364. } else {
  365. audio.value.pause();
  366. }
  367. };
  368. // 步骤条中的播放
  369. const audioPlay = (i) => {
  370. audio.value.load();
  371. orderInfoData.value.tracks.forEach((item) => {
  372. // console.log(item.id);
  373. let audioId = document.getElementById(`audio${item.id}`);
  374. if (item.voice) {
  375. // console.log(item.id);
  376. audioId.load();
  377. }
  378. });
  379. let audioId = document.getElementById(`audio${i.id}`);
  380. // console.log(audioId, i.state);
  381. if (audioId.paused == true) {
  382. audioId.play();
  383. } else {
  384. audioId.pause();
  385. // clearInterval(timer);
  386. // timer = null;
  387. }
  388. };
  389. // 点击工单步骤中的图片查看
  390. const lookImg = (item) => {
  391. bgImg.value = true
  392. bgImgurl.value = item
  393. }
  394. // 工单详情删除按钮 (工单详情-----------------------------------)
  395. // const orderInfo = (row) => {
  396. // orderInfoVisible.value = true;
  397. // orderInfoData.list = row;
  398. // };
  399. // // 取消工单详情按钮
  400. // const cancelOrderInfo = () => {
  401. // orderInfoVisible.value = false;
  402. // };
  403. // // 工单详情 点击音频
  404. // const bofang = () => {
  405. // let music1 = new Audio();
  406. // music1 = gaobai;
  407. // audio.value.src = music1;
  408. // // imgUrl.value = "@/assets/gaobai.mp3";
  409. // audio.value.play();
  410. // };
  411. // 删除评价功能 (--------------------------------------------------)
  412. // 确定删除
  413. const confirmEvent = async (row) => {
  414. let data = {
  415. id: row.id,
  416. };
  417. let res = await axios({
  418. method: "get",
  419. url: api.value + "/repairEvaluate/deleteRepairEvaluateById",
  420. headers: {
  421. token: sessionStorage.getItem("token"),
  422. user_head: sessionStorage.getItem("userhead"),
  423. },
  424. params: data,
  425. });
  426. console.log(res, "删除评价成功");
  427. if (res.data.code == 200) {
  428. if (tableData.list.length == 1 && currentPage.value != 1) {
  429. currentPage.value = currentPage.value - 1;
  430. }
  431. getList();
  432. ElMessage({
  433. type: "success",
  434. showClose: true,
  435. message: res.data.message,
  436. center: true,
  437. });
  438. } else {
  439. ElMessage({
  440. type: "error",
  441. showClose: true,
  442. message: res.data.message,
  443. center: true,
  444. });
  445. }
  446. };
  447. // 取消删除
  448. const cancelEvent = () => {
  449. ElMessage({
  450. type: "info",
  451. showClose: true,
  452. message: "取消删除",
  453. center: true,
  454. });
  455. };
  456. //导出功能
  457. const importExcel = async () => {
  458. let datas = {
  459. keyWord: searchInput.keyWord, // 关键字
  460. };
  461. if (searchInput.createTime) {
  462. datas.startTime = searchInput.createTime[0];
  463. datas.endTime = searchInput.createTime[1];
  464. }
  465. let res = await axios({
  466. method: "get",
  467. url: api.value + "/repairEvaluate/toRepairEvaluateExcel",
  468. headers: {
  469. token: sessionStorage.getItem("token"),
  470. user_head: sessionStorage.getItem("userhead"),
  471. },
  472. params: datas,
  473. responseType: "blob",
  474. });
  475. console.log(res, "导出评价表单");
  476. if (res.status == 200) {
  477. let name = `评价管理表单`;
  478. var content = res.data;
  479. // var data = new Blob([content],{type:"application/octet-stream;charset=utf-8"});
  480. // var data = new Blob([content], {
  481. // type: "application/vnd.ms-excel;charset=utf-8",
  482. // });
  483. var data = new Blob([content]);
  484. var downloadUrl = window.URL.createObjectURL(data);
  485. var anchor = document.createElement("a");
  486. anchor.href = downloadUrl;
  487. anchor.download = name + ".xlsx";
  488. anchor.click();
  489. window.URL.revokeObjectURL(data);
  490. ElMessage({
  491. type: "success",
  492. showClose: true,
  493. message: "导出成功",
  494. center: true,
  495. });
  496. } else {
  497. ElMessage({
  498. type: "error",
  499. showClose: true,
  500. message: "导出失败",
  501. center: true,
  502. });
  503. }
  504. };
  505. // 表格斑马纹颜色修改
  506. const tableRowClassName = ({ row, rowIndex }) => {
  507. if (rowIndex % 2 === 0) {
  508. return "even";
  509. } else if (rowIndex % 2 !== 0) {
  510. return "odd";
  511. }
  512. return "";
  513. };
  514. // 分页
  515. const handleCurrentChange = (value) => {
  516. // console.log(value);
  517. currentPage.value = value;
  518. getList();
  519. };
  520. onBeforeMount(() => {
  521. api.value = store.state.user.api;
  522. getList();
  523. });
  524. onUnmounted(() => {
  525. // document.removeEventListener("keyup", Enters);
  526. });
  527. </script>
  528. <style scoped lang="scss">
  529. .content-box {
  530. width: 97.5%;
  531. height: 89%;
  532. margin: 20px auto;
  533. background-color: #fff;
  534. color: #fff;
  535. display: flex;
  536. flex-direction: column;
  537. box-shadow: 0px 3px 10px rgba(213, 228, 252, 1);
  538. .left {
  539. // width: calc(100wh - 40px);
  540. display: flex;
  541. align-items: center;
  542. height: 60px;
  543. margin: 0 30px;
  544. border-bottom: 1px solid #ccc;
  545. color: rgb(0, 0, 0);
  546. font-size: 18px;
  547. font-weight: 600;
  548. span {
  549. margin-right: 20px;
  550. cursor: pointer;
  551. }
  552. .is_active {
  553. color: rgba(111, 182, 184, 1);
  554. }
  555. }
  556. .middle {
  557. width: 96%;
  558. margin: 0 auto;
  559. color: #000;
  560. // border-bottom: 1px solid rgb(231, 231, 231);
  561. .filter {
  562. display: flex;
  563. flex-wrap: wrap;
  564. align-items: center;
  565. margin: 10px 0 0 0;
  566. .search {
  567. color: #fff;
  568. }
  569. .condition {
  570. display: flex;
  571. align-items: center;
  572. margin: 10px 30px 10px 0;
  573. :deep(.el-input .el-input__inner) {
  574. font-size: 16px;
  575. }
  576. span {
  577. margin: 0 10px 0 0;
  578. }
  579. }
  580. }
  581. .gongneng {
  582. margin: 10px 0 15px 0;
  583. span {
  584. color: #fff;
  585. }
  586. }
  587. :deep(.cont) {
  588. width: 60%;
  589. margin: 20px auto;
  590. }
  591. :deep(.download) {
  592. display: flex;
  593. align-items: center;
  594. margin: 10px;
  595. }
  596. :deep(.download span) {
  597. font-size: 16px;
  598. margin-left: 20px;
  599. }
  600. :deep(.cont .el-button) {
  601. margin-left: 60px;
  602. margin-bottom: 30px;
  603. }
  604. :deep(.cont .accomplish) {
  605. width: 100%;
  606. display: flex;
  607. justify-content: center;
  608. }
  609. :deep(.cont .accomplish .el-button) {
  610. width: 50%;
  611. margin: 0;
  612. }
  613. }
  614. .footer {
  615. width: 96%;
  616. height: 550px;
  617. margin: 10px auto 30px;
  618. .el-table--fit {
  619. height: 100%;
  620. :deep(.el-table__header-wrapper) {
  621. background-color: #000;
  622. font-size: 16px;
  623. tr {
  624. color: #000;
  625. }
  626. }
  627. :deep(.el-table__row) {
  628. height: 50px;
  629. font-size: 16px;
  630. color: #000;
  631. .el-rate__icon {
  632. //评分图标大小
  633. font-size: 25px;
  634. }
  635. }
  636. :deep(.el-table__row td) {
  637. padding: 0;
  638. border: 0;
  639. }
  640. .el-button--primary {
  641. margin-left: 5px;
  642. }
  643. :deep(.el-table__body .even) {
  644. background-color: #fff;
  645. }
  646. :deep(.el-table__body .odd) {
  647. background-color: rgba(240, 243, 247, 1);
  648. }
  649. :deep(.edit) {
  650. display: flex;
  651. align-items: center;
  652. justify-content: center;
  653. color: rgba(111, 182, 184, 1);
  654. }
  655. :deep(.look) {
  656. padding: 0 10px;
  657. cursor: pointer;
  658. }
  659. // :deep(.look):hover {
  660. // color: red;
  661. // }
  662. }
  663. }
  664. // 详情样式
  665. :deep(.orderInfo) {
  666. height: 800px;
  667. overflow: hidden;
  668. border-radius: 11px;
  669. .el-dialog__header {
  670. border-radius: 11px 11px 0 0;
  671. background: rgba(237, 241, 245, 1);
  672. font-weight: 600;
  673. margin: 0;
  674. .el-dialog__headerbtn {
  675. outline: none;
  676. }
  677. }
  678. .el-dialog__body {
  679. height: 720px;
  680. overflow: auto;
  681. padding: 0px 20px 10px 20px;
  682. .order_info {
  683. .title {
  684. display: flex;
  685. align-items: center;
  686. margin: 25px 0 10px 0;
  687. img {
  688. width: 20px;
  689. height: 20px;
  690. margin-right: 10px;
  691. }
  692. span {
  693. color: #000;
  694. font-size: 18px;
  695. font-weight: 800;
  696. }
  697. }
  698. // 工单详情 排列模式样式
  699. .workNum {
  700. display: flex;
  701. align-items: center;
  702. margin-bottom: 12px;
  703. font-size: 16px;
  704. .audio {
  705. width: 98px;
  706. height: 30px;
  707. border-radius: 42.41px;
  708. background: rgba(255, 255, 255, 1);
  709. box-shadow: 0px 0px 1.68px rgba(0, 0, 0, 0.25);
  710. display: flex;
  711. align-items: center;
  712. cursor: pointer;
  713. img {
  714. width: 18px;
  715. height: 18px;
  716. margin-left: 5px;
  717. }
  718. .audioNum {
  719. font-size: 16px;
  720. }
  721. }
  722. .titles {
  723. color: rgba(128, 128, 128, 1);
  724. font-weight: 200;
  725. display: inline-block;
  726. width: 80px;
  727. }
  728. span:nth-child(2) {
  729. color: #000;
  730. font-weight: 600;
  731. width: 640px;
  732. }
  733. }
  734. .workNums {
  735. display: flex;
  736. align-items: center;
  737. margin-bottom: 12px;
  738. font-size: 16px;
  739. .el-rate__item {
  740. .el-icon {
  741. font-size: 25px;
  742. }
  743. }
  744. .titles {
  745. color: rgba(128, 128, 128, 1);
  746. font-weight: 200;
  747. display: inline-block;
  748. width: 80px;
  749. }
  750. }
  751. // 工单详情 步骤条样式
  752. .steps {
  753. .el-step {
  754. // margin: 15px 0;
  755. .el-step__main {
  756. display: flex;
  757. margin-bottom: 15px;
  758. span {
  759. font-size: 16px;
  760. }
  761. .el-step__title {
  762. padding: 0 10px 0 0;
  763. span {
  764. background-color: rgba(111, 182, 184, 1);
  765. color: #fff;
  766. padding: 1px 3px;
  767. border-radius: 3px;
  768. display: block;
  769. }
  770. }
  771. }
  772. .el-step__description {
  773. .content {
  774. margin-top: 7px;
  775. }
  776. .evaluateImg {
  777. width: 500px;
  778. margin: 10px 0;
  779. display: flex;
  780. flex-wrap: wrap;
  781. img {
  782. width: 80px;
  783. // height: 40px;
  784. margin: 5px 10px 0 0;
  785. }
  786. }
  787. .audio {
  788. width: 98px;
  789. height: 30px;
  790. border-radius: 42.41px;
  791. background: rgba(255, 255, 255, 1);
  792. box-shadow: 0px 0px 1.68px rgba(0, 0, 0, 0.25);
  793. display: flex;
  794. align-items: center;
  795. cursor: pointer;
  796. img {
  797. width: 18px;
  798. height: 18px;
  799. margin-left: 5px;
  800. }
  801. .audioNum {
  802. font-size: 16px;
  803. color: #000;
  804. }
  805. }
  806. }
  807. }
  808. }
  809. }
  810. }
  811. }
  812. .pageSize {
  813. display: flex;
  814. align-items: center;
  815. justify-content: space-between;
  816. margin: 0 30px;
  817. span {
  818. color: #000;
  819. }
  820. .el-pagination {
  821. // width: 1600px;
  822. :deep(.el-pagination__total) {
  823. color: #000;
  824. }
  825. :deep(.el-pagination__goto) {
  826. color: #000;
  827. }
  828. :deep(.el-pagination__classifier) {
  829. color: #000;
  830. }
  831. :deep(.el-input__wrapper) {
  832. border: 1px solid rgba(0, 0, 0, 1);
  833. border-radius: 5px;
  834. box-shadow: none;
  835. }
  836. :deep(.el-pager li) {
  837. margin: 0 5px;
  838. border: 1px solid rgba(0, 0, 0, 1);
  839. border-radius: 5px;
  840. background-color: transparent;
  841. }
  842. :deep(.el-pager li.is-active) {
  843. background-color: rgba(111, 182, 184, 1);
  844. }
  845. :deep(.btn-prev) {
  846. margin-right: 5px;
  847. border: 1px solid rgba(0, 0, 0, 1);
  848. border-radius: 5px;
  849. background-color: transparent;
  850. }
  851. :deep(.btn-next) {
  852. margin-left: 5px;
  853. border: 1px solid rgba(0, 0, 0, 1);
  854. border-radius: 5px;
  855. background-color: transparent;
  856. }
  857. }
  858. }
  859. .bgImg {
  860. position: absolute;
  861. left: 0;
  862. top: 0;
  863. z-index: 99999999;
  864. width: 100%;
  865. height: 100%;
  866. background-color: rgba(255, 255, 255, 0.8);
  867. display: flex;
  868. justify-content: center;
  869. img {
  870. height: 100%;
  871. }
  872. }
  873. }
  874. .el-input {
  875. width: 192px;
  876. }
  877. </style>